External Master Data in Alfresco: Integrating and Keeping Metadata Consistent Across Multiple Systems Oksana Kurysheva @aviriel Alexey Vasyukov @avasyukov
Who are we? Oksana Kurysheva @aviriel Project Manager / Trainer / Queen of the bees ITD Systems / Order of the Bee Alexey Vasyukov @avasyukov Chief Architect / Alvex Product Manager ITD Systems
Questions for the next 39 minutes 1 2 3 4 What is Master Data? Storing Master Data in Alfresco External Master Data Complicated cases 5 Conclusion
1 2 3 4 What is Master Data? Storing Master Data in Alfresco External Master Data Complicated cases 5 Conclusion
What is Master Data?
Master data management is an integration between Alfresco and a complex set of third-party systems, that you are to meet when trying to use Alfresco in the wild.
1 2 What is Master Data? Storing Master Data in Alfresco 3.1 3.2 Out of the box implementation Data-list based implementation 3 4 Integrating Alfresco with external Master Data Complicated cases 5 Conclusion
Constraints in the content model
Constraints in the content model + - Users can select a value from the list. Master data changes quite frequently. Business users do not like the idea to call IT every time they need new option in the drop-down list.
1 What is Master Data? 2 Storing Master Data in Alfresco 3.1 3.2 Out of the box implementation Data-list based implementation 3 4 Integrating Alfresco with external Master Data Complicated cases 5 Conclusion
Data-list based implementation (1/5) Simple solution Several extensions to do it: Tony Parzgnat implementation https://github.com/parzgnat/alfresco-value-assistance Angel Borroy implementation https://github.com/keensoft/alfresco-datalist-constraints Alvex releases older 2.1
Data-list based implementation (2/5) <appearance> <field id= dm:color > <control template= /form-controls/dynamic-dropdown.ftl > <control-param name= picklistname >Color</controlparam> </control> </field> </appearance>
Data-list based implementation (3/5)
Data-list based implementation (4/5) Solves basic issue quickly Business users can edit constraints in browser!
Data-list based implementation (5/5) - Updating a list of values Share-Tier Performance Permissions No native constraint Still no sync with external Master Data
1 2 3 What is Master Data? Storing Master Data in Alfresco External Master Data 3.1 3.2 The Good The Bad 4 Complicated cases 5 Conclusion
External Master Data Assumptions: Master data is in 3rd party systems. These systems have remote APIs. Let's query them for reference data.
Architectural Choice Share Tier vs Repo Tier
Architectural Choice: Share-tier
Architectural Choice: Share-tier <field id= alvexdt:contract > <control template= /alvex-masterdata-select.ftl > <control-param name= url > http://www.alvexsoftware.com/files/contacts_sample.json </control-param> <control-param name= path ></control-param> <control-param name= label >contactcompany</control-param> <control-param name= value >contactcompany</control-param> </control> </field>
Architectural Choice: Repo Tier
Architectural Choice: Repo Tier <constraint name="alvexdt:docstatus" type="com.alvexcore.repo.masterdata.masterdataconstraint"> <parameter name="datasourcename"> <value>test</value> </parameter> </constraint>
1 What is Master Data? 2 Storing Master Data in Alfresco 3 External Master Data 3.1 3.2 The Good The Bad 4 Complicated cases 5 Conclusion
External Master Data Quite obvious idea becomes tricky: Live data vs Cached data Performance and bottlenecks Changes in reference data
Dilemma: Live Data vs Cached Data Live Data Always actual Cached Data May be outdated Simple implementation Complex implementation Slow network Fast Service is unavailable? Always available
Performance Constraint is expected to be extremely fast Just reading field with list constraint with N values causes N+1 call to Constraint class. Caching of classifiers in Repo is not enough.
Changes in Reference Data Processing Updates Update items Processing Deletion Leave old value in existing fields Add new data Allow creating new data from Alfresco Migrate existing fields to the new one
Implementation Details (1/5)
Implementation Details (2/5)
Implementation Details (3/5)
Implementation Details (4/5)
Implementation Details (5/5)
Changes in Reference Data Processing Updates Update items Processing Deletion Leave old value in existing fields Add new data Allow creating new data from Alfresco Migrate existing fields to the new one
External Master Data: Demo
2 3 4 Storing Master Data in Alfresco External Master Data Complicated cases 4.1 4.2 Handling Tree-Like Structures Constraints Inter-Dependencies 4.3 One-To-Many Relations 5 Conclusion
Complicated Cases Reference data is complex IRL: Tree-like hierarchies Inter-dependencies of constraints One-to-many mapping (one master data object to many content object properties)
Handing Tree-Like Structures
Handing Tree-Like Structures Jean Barmash implementation (2008) https://forums.alfresco.com/comment/80963#co mment-80963
Constraints Inter-Dependencies
One-To-Many Relations
1 2 3 4 What is Master Data? Storing Master Data in Alfresco External Master Data Complicated cases 5 Conclusion
Fear and Loathing Under The Hood
Getting forms
Getting forms
Validations on Node Create/Edit
Validations on Node Create/Edit
Fear and Loathing Under The Hood: Summary Overloaded components: /api/formdefinition MasterDataAwareScriptFormService MasterDataAwareIntegrityChecker MasterDataAwarePropertiesIntegrityEvent
Roadmap Completely solve Complicated Cases Extract Master Data from Alvex to a separate extension
Resources GitHub Repo: https://github.com/itdsystems/alvex Contacts: @aviriel & @avasyukov & @alvexsoftware ping@itdhq.com