Using OpenEdge, Corticon, Rollbase and Node.js to create a

“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