“Using OpenEdge, Corticon, Rollbase and Node.js to create a dynamic, rule- and modeldriven Web-UI” Mike Liewehr AKIOMA Software Agenda The Idea The Solution Technical overview Architecture explained on a live sample Detailed technical explanation Q&A 2 The Idea “Building web based configuration forms for self service sales of complex products without coding” 3 The Idea Build complex, web based configuration forms without coding Examples: …Car configurator …custom-built machines …Online Insurance Enrollment Technically these are all similar 4 The previous Solution Creating Data Structure (Database, etc.) Design and coding of the web-based configuration forms Definition and coding of the configuration rules (logic) Time-to-Market of 6-12 months Enormous costs for development Example Short Term Plans Applicant Spouse Health Dental Gender? Male Female Children Tobacco use? Yes No Pregnant? Yes No If „male“ dont ask for pregnancy AKIOMA.Config! Short Term Plans Configuration Form Applicant Gender? Male Female Tobacco use? Yes No Rules Pregnant? Yes No Spouse Children Health Dental Data Structure AKIOMA.Config! Short Term Plans Applicant Spouse Health Dental Gender? Male Female Children Tobacco use? Yes No Pregnant? Yes No Rules Live Demo 10 Requirements and challenges Challenges that came up when building the solution… Data definitions vary greatly (cars, machines, people, policies…) • Need a way to define data definition by end-user Complex rules, that are fully customer driven • Allow to define complex rules without coding Rich Browser-based UI • UI has to be very flexible and dynamic, support for rich components Performance! • UI has to adapt in real-time 11 Technology stack used Challenges that came up when building the solution… …and the Products to solve them: Data definitions vary greatly (cars, machines, people, insurance…) • Progress Rollbase Complex rules, that are fully customer driven • Progress Corticon Rich UI which has to be very flexible and dynamic • AKIOMA HTML5-Client Performance! -> UI has to adapt in realtime • Node.JS / Socket.IO / node4Progress / ABL 12 Technical details Node.js Corticon Rulesengine • Socket.IO • Node4Progress • • Server Rulesheet Vocabulary OpenEdge Appserver • • screenDS AKIOMA UIConnector Client Webbrowser • • • • HTML5 JavaScript SWAT UI Socket.IO 13 Detailed explanation Build some stuff to see how everything works together 14 Technical details Server Corticon Rules Engine - Rule Sheet Vocabular OE Appserver - ScreenDS AKIOMA UI Connector 8 Node.js - Socket.IO Node4Progress A B C D 1 42 3 4 - HTML 5 JavaScript SWAT UI Socket.IO Client 15 Introduction to Node & Node4Progress About Node Server side javascript engine Lightweight, scalable and fast Implements non-blocking programming model using callback procedures Allows you to build web applications with features that cannot be accomplsihed any other way Hot technology Microsoft is going Node, Progress is going Node, everybody is going Node 16 Introduction to Node & Node4Progress About node4progress Bridge for accessing business logic on appserver directly from Node Developed by Frank Hilhorst from Progressive Consulting Open Source Small foot print (4MB) Fast Easy to install Npm install node4progress Communicates with appserver through Java OpenClient 17 Node4Progress Features and characteristics Supports 2 methods for calling an appserver procedure Calling a handler Dynamic appserver call Employs dataset object modelled after Progress ProDataset 18 Converting output parameters of an Appserver procedure into a JSON structure {"output":{ "OutputParametes-1" : ".....", "OutputParametes-2" : ".....", "dsCustomer" : {...}, “ErrMsg" : "" }, "error": "“ } Root level output tag contains output parameters from appserver procedure Root level error tag contains error message if execution of appserver procedure failed 19 Calling a handler var node4progress = require("node4progress")(null); var handler = "handlers/CustomerHandler.p"; var inputPars = "NumCustomersToPull=2"; node4progress.callHandler(handler, inputPars, function(err,result){ console.log(result); }); 20 Approach to calling any appserver procedure dynamically Define appserver procedure to call Node4progress.setAppSvrProc(....); Define each parameter Node4progress.setParameter(......); Define callback procedure Invoke appserver procedure Node4progress.invoke(callback); 21 Node.js / Socket.IO Why we used Node.js Node.js required for Socket.IO Easy to use messaging from server to client (browser) Shields us from browser incompatabilities Fast 22 Corticon Why we used Corticon Complex rules without any coding Easy integration with OpenEdge Very good API Fast 23 Rollbase Why we used Rollbase Can create apps very rapidly Integration with OpenEdge API available Easily create / change data structure (no coding, no DBA) 24 wishlist Access to all functionality through APIs 1 common Repository for all Progress Products 1 Visual Design Tool Native node.js integration (like Edge.js) Further integration of Progress Products Web-ui and Multitenancy for all products 25 Summary Progress offers great products Combined they provide even more value The whole is more than the sum of its parts Node.JS is here to stay and provides great value for Progress partners 26 Questions? Questions? 27