Using OpenEdge, Corticon, Rollbase and Node.js to create a
Download
Report
Transcript 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