Web Apps Development With Breeze.js. Workaround Seminars

36
WEB APPS DEVELOPMENT WITH BREEZE.JS AUTHOR: VIACHESLAV BUKACH SOFTWARE DEVELOPER AT SOFTENGI

Transcript of Web Apps Development With Breeze.js. Workaround Seminars

WEB APPS DEVELOPMENT WITH BREEZE.JS

AUTHOR:

VIACHESLAV BUKACH

SOFTWARE DEVELOPER AT SOFTENGI

• BREEZE IS A JAVASCRIPT LIBRARY THAT HELPS YOU TO MANAGE DATA IN RICH CLIENT APPLICATION

• FIRST RELEASE – SEPTEMBER 17, 2012

• LAST RELEASED VERSION – 1.4.16 (JULY 13. 2014)

BREEZE

• - CAPABILITIES

• - REQUIREMENTS

• - CLIENT SIDE

• - SERVER SIDE

• - OTHER

OUTLINE

• DATA RETRIEVAL VIA SERVICE CALLS

• DATA CACHING ON CLIENT

• CHANGES TRACKING

• SAVE CHANGES VIA SERVICE CALLS

• VALIDATION

• EXPORT/IMPORT DATA ON FOR OFFLINE STORAGE

• WORK WITH ODATA SERVICES

CAPABILITIES

Single Page App

SERVER

DATABASE

Markup

UI Logic

Data Access

SPA ARCHITECTURE

• ENTITYMANAGER IS THE BRAINS OF BREEZE CLIENT SIDE FUNCTIONALITY

• - MAKES SERVICE CALLS

• - CACHES METADATA AND QUERY RESULTS

• - CREATES ENTITIES

• - VALIDATES ENTITIES

• - FORMS UPDATE REQUESTS

• - HANDLES MERGING REQUERY AND SAVECHANGES RESULTS WITH CACHED ENTITIES

ENTITY MANAGER

• - QUERY

• - UPDATE

CALLING PATTERNS

ClientBreeze

Controller

Metadata

Entity Manager

Query Results

GET breeze/Zza/Customers

ClientEntity

ManagerClient

GET breeze/{controller}/Metadata

Entity Manager

ClientEntity

ManagerClientClient

Entity ManagerClient

Entity ManagerClient

Breeze Controller

Entity ManagerClient

Breeze Controller

Entity ManagerClient

QueryEntities

QUERY

• METADATA IS USED BY BREEZE ENTITYMANAGER FOR MANY ASPECTS

• ENTITY TYPE INFORMATION

• CREATING ENTITIES

• MANAGING KEY PROPERTIES FOR ENTITIES

• MANAGING ENTITY RELATIONSHIPS

• VALIDATION

• DEFAULT VALUES

• ALLOW ENTITYMANAGER TO BE SMART ABOUT SENDING CHANGE BATCHES

• PARENT-CHILD RELATIONSHIPS AND QUERY EXECUTION ORDER

METADATA

Server Persisted Entities

Breeze Controller

POST breeze/{controller}/SaveChanges

Entity ManagerClient

SaveChanges

UPDATE

• BREEZE ROUTING

• AUTO-REGISTERS BREEZE ROUTES

• BREEZECONTROLLERS (WEBAPI CONTROLLER)

• ADDS QUERY FILTERS HANDLE QUERY REQUESTS

• CONTEXTPROVIDERS

BREEZE SERVER INFRASTRUCTURE

• BREEZE ROUTING IS ACTION-BASED

• URL INCLUDES CONTROLLER NAME AND METHOD (ACTION) ON CONTROLLER TO INVOKE

• ALLOWS MANY DIFFERENT QUERY METHODS TO BE EXPOSED FROM THE SAME CONTROLLER

• BREEZE ROUTING IS AUTO- CONFIGURED ON START- UP

BREEZE ROUTING CONFIGURATION

• BASED ON WEBAPI CONTROLLER

• SIMPLE ATTRIBUTE TO ADD TO AN APICONTROLLER

• ADDS FILTERS FOR METADATA AND QUERY REQUEST HANDLING

• SIMPLIFIES SERVER CODING PATTERN

CONTROLLER

• METADATA

• - RETURNS THE EDM AS CLIENT METADATA

• QUERY METHODS

• - RETURNS IQUERYABLE

• - NO EXPLICIT PARAMETERS

• - ODATA QUERY PARAMETERS ARE TURNED INTO EXPRESSION TREE THAT IS EXECUTED AGAINST RETURNED IQUERYABLE BY THE FILTER

• SAVECHANGES

• - TAKES JOBJECT BUNDLE(BATCH OF ENTITIES)

• - HANDS IT OF TO EFCONTEXTPROVIDER TO PROCESS REQUEST

BREEZE CONTROLLER METHODS

• CONTEXTPROVIDER ENCAPSULATES THREE MAIN FUNCTIONS:

• - INSTANTIATION OF A CONTEXT FOR ACCESSING THE DATA STORE

• - GENERATION (OR ACQUISITION) OF METADATA TO SEND TO BREEZE CLIENTS

• - PROCESSING "CHANGE-SET" SAVE REQUESTS

• ALTERNATIVES TO ENTITY FRAMEWORK:

• - NHIBERNATE PROVIDER

• - YOU ARE ABLE TO IMPLEMENT YOUR OWN CUSTOM CONTEXT PROVIDER

• - ALSO YOU CAN EXTEND EFCONTEXTPROVIDER TO ADD CUSTOM CODE

CONTEXT PROVIDERS

• - BASIC QUERYING/CACHING

• - EDITING/SAVING

• - ENTITY CREATION

• - WORKING WITH ENTITY ON THE CLIENT

• - VALIDATIONS

OTHER

• ENTITYQUERY OBJECTS DEFINE THE QUERY TO BE EXECUTED

• - DEFINE THE MODEL RESOURCE COLLECTION THROUGH THE FROM() METHOD

• EXPOSES CHAINABLE METHODS FOR SUPPORTED QUERY OPERATIONS

• - WHERE/ORDERBY/TAKE/SKIP

• EXECUTED THROUGH ENTITYMANAGER

• - CALL ENTITYMANAGER.EXECUTEQUERY() OR ENTITYQUERY.EXECUTE()

• THE QUERY IS PASSED FROM THE CLIENT TO THE SERVER VIA ODATA QUERY SYNTAX

• - EVEN IF NOT AN ODATA SERVER

• CAN BE EXECUTED LOCALLY AGAINST THE CACHE AS WELL

CREATING ENTITY QUERIES

• CAN EASILY QUERY THE ENTITIES THAT HAVE ALREADY BEEN LOADED INTO THE ENTITYMANAGER CACHE

• SYNCHRONOUS:

• - ENTITYMANAGER.EXECUTEQUERYLOCALLY

• - RETURNS THE ARRAY OF MATCHING ENTITIES DIRECTLY

• ASYNCHRONOUS:

• - ENTITYQUERY.USING(FETCHSTRATEGY.FROMLOCALCACHE)

• - EXECUTE QUERY THROUGH ENTITYMANAGER.EXECUTEQUERY

• - RETURNS PROMISES AS NORMAL

• - ONLY EXECUTES AGAINST THE LOCAL CACHE

FETCHING FROM CACHE

• BREEZE APPENDS AN ENTITYASPECT OBJECT TO EVERY ENTITY IT MANAGES

• CONTAINS METADATA AND STATE INFORMATION ABOUT THE ENTITY

• USED FOR

• - CHECKING/MODIFYING ENTITY STATE

• - OBTAIN ORIGINAL VALUES OF MODIFIED ENTITIES

• - OBTAINING REFERENCE TO ITS ASSOCIATED ENTITYMANAGER

• - VALIDATION

• - MONITORING PROPERTY CHANGE EVENTS

ENTITY ASPECT

• - ENTITYASPECT

• - MODIFYING ENTITIES

• - SAVING CHANGES TO THE SERVER

• - CREATING ENTITIES

• - REJECTING AND ACCEPTING CHANGES

• - DELETING ENTITIES

• - NAMED SAVES

EDITING AND SAVING

• ENTITY PROPERTIES ARE OBSERVABLES

• - RAISE CHANGE NOTIFICATIONS TO ANY SUBSCRIBERS WHEN PROPERTY IS SET

• BREEZE ENTITYMANAGER TRACKS CHANGES TO ANY ENTITIES THAT ARE ATTACHED

• ENTITYMANAGER WILL KNOW WHEN PROPERTIES GET MODIFIED AND KEEPS A LIST OF THOSE ENTITIES THAT HAVE CHANGED

MODIFYING ENTITITES

• SIMPLY CALL ENTITYMANAGER.SAVECHANGES

• ENTITYMANAGER FORMS A BATCH FROM ALL THE ENTITIES THAT WERE MODIFIED, ADDED, OR DELETED

• MAKES THE CALL TO THE SERVICE WITH THE BATCH

• - SAVECHANGES METHOD BY DEFAULT

• GETS BACK A RESPONSE CONTAINING ALL THE PERSISTED ENTITIES

• - IN CASE OF SERVER COMPUTED PROPERTIES

• - PRIMARY KEYS

• MERGES ENTITIES BACK INTO THE CLIENT SIDE CACHE

SAVING CHANGES TO THE SERVER

• NEED TO BE CONSTRUCTED THROUGH BREEZE

• BASED ON METADATA OBJECT MODEL

• - WITH AN ENTITYASPECT ATTACHED

• - WITH OBSERVABLE PROPERTIES

• - WITH TEMPORARY KEYS IF SERVER GENERATED KEY PROPERTIES

• TWO WAYS:

• ENTITYMANAGER.CREATEENTITY

• - CREATES AN INSTANCE

• - ATTACHES TO THE CACHE

• ENTITYTYPE.CREATEENTITY

• - GET REFERENCE TO METADATA STORE

• - GET ENTITYTYPE FROM THE METADATA STORE

• - CREATE THE ENTITY FROM THE ENTITYTYPE

• - ADD THE ENTITY TO THE ENTITYMANAGER’S CACHE

CREATING NEW ENTITIES

• ENTITYMANAGER.REJECTCHANGES

• - REVERTS ALL ENTITIES RETRIEVED FROM THE SERVER TO THEIR ORIGINAL VALUES / UNCHANGED STATE

• - DETACHES AND RELEASES ANY ENTITIES THAT HAVE BEEN ADDED

• ENTITYASPECT.REJECTCHANGES

• - IF ENTITY RETRIEVED FROM SERVER, REVERTS STATE AND PROPERTY VALUES TO ORIGINAL

• - IF ENTITY WAS ADDED, DETACHES ENTITY FROM ENTITYMANAGER CACHE

REJECTING CHANGES

ENTITYASPECT.SETDELETED

• - ENTITY WILL NOT BE PART OF LOCAL QUERY RESULTS

• - BREEZE WILL SEND ENTITY INFO TO SERVER SIDE ON SAVECHANGES

• - ENTITY WILL BE REMOVED FROM THE CACHE AFTER SUCCESSFUL COMPLETION OF A SAVECHANGES CALL AND RELEASED BY BREEZE

DELETING ENTITIES

ENTITYMANAGER.SAVECHANGES NORMALLY CALLS “SAVECHANGES ”

• - ALL MODIFIED, ADDED, DELETED ENTITIES

• - ALL TYPES IN ONE BUNDLE

CAN TARGET SAVE METHODS WITH OTHER NAMES

• - SAVEOPTIONS PARAMETER TO SAVECHANGES , SET RESOURCENAME PROPERTY

CAN SEND SPECIFIC COLLECTIONS OF ENTITIES

• - PASS ENTITY ARRAY TO SAVECHANGES

NAMED SAVES

ENTITYASPECT.ENTITYSTATE PROPERTY

• UNCHANGED – AFTER BEING LOADED BY A QUERY OR AFTER SUCCESSFUL SAVECHANGES

• MODIFIED – PREVIOUSLY UNCHANGED ENTITY HAS A PROPERTY CHANGE

• ADDED – ENTITY HAS BEEN CREATED AND ADDED TO THE CACHE, BUT NOT SAVED TO BACK END

• DELETED – PREVIOUSLY UNCHANGED ENTITY IS MARKED FOR DELETION

• DETACHED

• - NEWLY CREATED ENTITY THAT HAS NOT BEEN ADDED TO THE CACHE

• - ADDED ENTITY THAT GETS MARKED FOR DELETION

• - DELETED ENTITY AFTER SAVECHANGES IS COMPLETE

• - ENTITIES THAT WERE IN THE CACHE WHEN ENTITYMANAGER.CLEAR IS CALLED

• - ENTITYMANAGER.DETACHENTITY CALLED

ENTITY STATES

ENTITYMANAGER.EXPORTENTITIES ([ ENTITYARRAY ])

• RETURNS STRING BUNDLE – SERIALIZED COPY OF THE ENTITY AND THEIR STATE INFORMATION

• IF NO PARAM , EXPORTS ENTIRE CACHE CONTENTS

• IF ARRAY PASSED IN, ONLY THOSE ENTITIES ARE EXPORTED

ENTITYMANAGER.IMPORTENTITIES (BUNDLE, [CONFIG ]) – STATIC

• CREATES A NEW ENTITYMANAGER INSTANCE, POPULATES ITS CACHE WITH THE BUNDLE, RETURNS IT

• OPTIONAL CONFIG ARGUMENT WITH MERGESTRATEGY TO OVERRIDE DEFAULT

ENTITYMANAGER.IMPORTENTITIES (BUNDLE, [CONFIG ]) – INSTANCE

• MERGES ENTITIES INTO EXISTING ENTITYMANAGER CACHE

• OPTIONAL CONFIG ARGUMENT WITH MERGESTRATEGY TO OVERRIDE DEFAULT

EXPORTING/IMPORTING ENTITIES

CLIENT AND SERVER SIDE SUPPORT

YOU ARE ABLE TO DEFINE CLIENT AND SERVER SIDE RULES

• - BECOME A PART OF METADATA FOR MODEL

ERRORS ASSOCIATED WITH ENTITIES

ENTITYASPECT

• - MANUAL VALIDATION

• - ACCESSING VALIDATION ERRORS

VALIDATION

ENTITIES ARE VALIDATED DURING SAVECHANGES

• SERVER LOGIC IS EXECUTED

• 403 STATUS CODE AND ENTITIES WITH VALIDATION ERRORS ATTACHED ARE THROWN

• ERRORS ARE ASSOCIATED WITH ENTITIES IN THE CACHE

VALIDATION ON THE SERVER

EACH ENTITY CONTAINS COLLECTION OF VALIDATIONERROR OBJECTS

• PROPERTYNAME

• PROPERTY

• ERRORMESSAGE

• CONTEXT

• ISSERVERERROR

• KEY

• VALIDATOR

DISPLAYING VALIDATION ERRORS

SOME VALIDATION RULES ARE CREATED AUTOMATICALLY BASED ON METADATA

• - DATA TYPES: NUMERIC TYPES, BOOL , BYTE, DATE, DURATION, GUID , STRING

• - REQUIRED, STRINGLENGTH

OTHER RULES CAN BE ADDED ON THE CLIENT SIDE

RULES ARE CHECKED

• - WHEN PROPERTIES CHANGE

• - WHEN YOU ADD/ATTACH AN ENTITY TO THE CACHE

• - WHEN YOU TRY TO SAVECHANGES

• - WHEN ENTITIES ARE LOADED INTO CACHE FROM A QUERY (OFF BY DEFAULT)

• - CONFIGURABLE – ENTITYMANAGER.VALIDATIONPROPERTIES

AUTOMATIC VALIDATION

THERE ARE SEVERAL VALIDATION RULES, DEFINED INSIDE VALIDATOR CLASS

• - DATA TYPES, REGULAR EXPRESSIONS, PHONE, EMAIL, CREDITCARD, URL

VALIDATOR ALLOWS YOU TO:

• - REGISTER CUSTOM VALIDATION RULES

• - MANUALLY VALIDATE

• - MANAGE ERROR MESSAGE TEMPLATES

BUILT IN CLIENT SIDE VALIDATION RULES

ANY JS LIBRARY

BEST (IF WE NEED DATA BINDING ADVANTAGE):

• KNOCKOUT, ANGULAR ETC.

WORKS WELL WITH REQUIRE.JS FOR MODULE DEPENDENCY CHECKING

BREEZE AND OTHER JS LIBRARIES/TOOLS

• HTTP://WWW.BREEZEJS.COM/

• HTTP://WWW.BREEZEJS.COM/PREVIOUS-RELEASE-NOTES

• HTTP://WWW.BREEZEJS.COM/DOCUMENTATION/RELEASE-NOTES

• HTTP://BRIANNOYES.NET/2013/02/16/CONSUMING-AN-ASP-NET-WEB-API-ODATA-SERVICE-WITH-BREEZE/

• HTTP://WWW.BREEZEJS.COM/SITES/ALL/APIDOCS/CLASSES/ENTITYMANAGER.HTML

• HTTP://WWW.BREEZEJS.COM/DOCUMENTATION/METADATA

• HTTP://WWW.BREEZEJS.COM/DOCUMENTATION/WEB-API-ROUTING

• HTTP://WWW.BREEZEJS.COM/DOCUMENTATION/WEB-API-CONTROLLER

• HTTP://WWW.BREEZEJS.COM/SAMPLES/NODB

• HTTP://WWW.BREEZEJS.COM/DOCUMENTATION/NHIBERNATE

• HTTP://WWW.BREEZEJS.COM/DOCUMENTATION/ENTITYMANAGER-AND-CACHING

• HTTP://WWW.BREEZEJS.COM/SITES/ALL/APIDOCS/CLASSES/ENTITYASPECT.HTML

• HTTP://WWW.BREEZEJS.COM/DOCUMENTATION/EXPORTIMPORT

• HTTP://WWW.BREEZEJS.COM/SITES/ALL/APIDOCS/CLASSES/MERGESTRATEGY.HTML

• HTTP://WWW.BREEZEJS.COM/SITES/ALL/APIDOCS/CLASSES/VALIDATIONERROR.HTML

• HTTP://WWW.BREEZEJS.COM/DOCUMENTATION/TESTING-BREEZE-APPLICATION

LINKS

NOW WATCH LIVE VIDEO

OF THIS PRESENTATION

AT:

HTTPS://

YOUTU.BE/KGSHQZD6SLM