© 2011 IBM Corporation March 25, 2022 IBM Informix – Genero Genero Overview <<Speaker Name Here>> <<For questions about this presentation contact Speaker Name [email protected]>>
© 2011 IBM CorporationApril 18, 2023
IBM Informix – GeneroGenero Overview
<<Speaker Name Here>><<For questions about this presentation contact Speaker Name [email protected]>>
© 2011 IBM Corporation2
History – Informix 4GL penetration
Data Management Solutions
Classic Tools: 4GL Family
• Perfect choice for character based OLTP applications and batch job processing– Superior reporting capabilities
– Easily manages the most complex business logic
– Char-based HW still prevalent in the customer base
• Works with all Classic Servers & IDS
• 52% of our customer base have 4GL applications Four million active Informix-4GL users today!
© 2011 IBM Corporation5
The business problemBe responsive to change
‘It is not thestrongestof the species that survives
nor the the most intelligent,but the one most
responsive to change’
Charles DarwinThe Origin of Species, 1859
© 2011 IBM Corporation6
Value propositionBe responsive to change
Intelligent Business Applications Infrastructure− Rapid development− Flexible deployment− Scalable performance− Reliability, maintainability
© 2011 IBM Corporation7
Rapid developmentMeasuring developer productivity
Institute of Social Security Services for Civil Servants www.issste.gob.mx
* Carnegie Mellon University - Capability Maturity Model – Guidelines fo Improving the Software Process www.sei.cmu.edu/cmm
(LOC/Hr - Lines of code per hour)
Observed productivity using CMM* Level 5
Language Productivity LOC/hr Error Rate
11,98
6,72
5,68
5,14
3,03 %
12,15 %
18,73 %
26,59 %
© 2011 IBM Corporation8
Rapid developmentCreate modular, readable business services
99.9% i4GL compatible Recompile and run ‘out of the box’ Modernized with syntax extensions
FUNCTION wizard() ... defines OPEN WINDOW formwizard WITH FORM "formwizard" ... init arrays DIALOG ATTRIBUTES(UNBUFFERED) INPUT BY NAME currtable DISPLAY ARRAY afields TO a.* DISPLAY ARRAY cfields TO c.* ON CHANGE currtable CALL on_change_currtable() ON ACTION right CALL right(DIALOG) ON ACTION allright CALL allright(DIALOG) ON ACTION left CALL left(DIALOG) ON ACTION allleft CALL allleft(DIALOG) ON ACTION prevwiz DISPLAY "prevwiz" EXIT DIALOG ON ACTION nextwiz DISPLAY "nextwiz" EXIT DIALOG ON ACTION cancel EXIT DIALOG AFTER DIALOG --we just show all chosen columns in the terminal FOR i=1 TO cfields.getLength() DISPLAY sfmt("table:%1,column:%2",cfields[i].ctable,cfields[i].ccol) END FOR END DIALOG CLOSE WINDOW formwizard END FUNCTION
© 2011 IBM Corporation9
Rapid developmentModernizing 4GL
GUI paradigm− Multiple Dialogs− Drag ‘n’ Drop− Tree View− Rich Text− Multiple Selects− Etc…
Web Services Modules Java interface
© 2011 IBM Corporation10
Rapid developmentMultiple dialogs
A wizard with multiple dialogs
−New dialog clause−All dialogs are active−User clicks on any dialog−More intuitive for user−Widgets now
superfluous−Code shorter, faster−Total code 33% shorter
• dialog logic > 50% shorter
© 2011 IBM Corporation11
Rapid developmentMultiple dialogs
A wizard with multiple dialogs – code snippet
FUNCTION wizard() ... defines OPEN WINDOW formwizard WITH FORM "formwizard" ... init arrays DIALOG ATTRIBUTES(UNBUFFERED) INPUT BY NAME currtable DISPLAY ARRAY afields TO a.* DISPLAY ARRAY cfields TO c.* ON CHANGE currtable CALL on_change_currtable() ON ACTION right CALL right(DIALOG) ON ACTION allright CALL allright(DIALOG) ON ACTION left CALL left(DIALOG) ON ACTION allleft CALL allleft(DIALOG) ON ACTION prevwiz DISPLAY "prevwiz" EXIT DIALOG ON ACTION nextwiz DISPLAY "nextwiz" EXIT DIALOG ON ACTION cancel EXIT DIALOG AFTER DIALOG --we just show all chosen columns in the terminal FOR i=1 TO cfields.getLength() DISPLAY sfmt("table:%1,column:%2",cfields[i].ctable,cfields[i].ccol) END FOR END DIALOG CLOSE WINDOW formwizard END FUNCTION
© 2011 IBM Corporation12
Drag order 3 @ 4kg, drop on truck 3 w/ 16kg remaining
Language enhancementsDrag & drop
© 2011 IBM Corporation13
Order dispatch app with drag‘n’drop – code snippet
DEFINE dnd ui.DragDrop...DIALOG ...DISPLAY ARRAY arr_source TO sr1.* ...... -- Detect start drag ON DRAG_START(dnd) -- dnd is the D&D handler object CALL dnd.setOperation("move") -- Move is the default operation CALL dnd.addPossibleOperation("copy") -- User can toggle to copy if needed CALL dnd.setMimeType("text/plain") CALL dnd.setBuffer(arr_source[arr_curr()].ident) ...END DISPLAY ...DISPLAY ARRAY arr_target TO sr2.* ...... -- Detect mouse entering this list ON DRAG_ENTER(dnd) IF ok_to_drop THEN CALL dnd.setOperation("move") -- allow drop here ELSE CALL dnd.setOperation(NULL) -- deny drop here END IF ... -- Detect drop event ON DROP(dnd) LET arr_target[dnd.getLocationRow()].ident == dnd.getBuffer() ...END DISPLAY …
Language enhancementsDrag & drop
© 2011 IBM Corporation17
Language enhancementsBuilt in Methods
CALL ui.DIALOG.setSelectionMode(“location_sr”, 1)
© 2011 IBM Corporation19
Flexible deploymentIntegrate with existing IT landscape
Agnostic Dynamic Virtual Machine (DVM) Abstract layers
− Presentation− Code− Data− Network
Dynamically loadable drivers Thin client, n-tier, server-centric Written in ‘C’
© 2011 IBM Corporation20
Flexible deploymentIntegrate with existing IT landscape
Configure rather than code
MobileMACOSX
ASCII
Windows Linux
Abstract UserInterface
XML
HTML
Desktop model SaaS model Mobile model
© 2011 IBM Corporation21
Flexible deploymentIntegrate with existing IT landscape
Presentation independant code
MobileMACOSX
ASCII
Windows Linux
Abstract UserInterface
XML
HTML/AJAX
FUNCTION wizard() ... defines OPEN WINDOW formwizard WITH FORM "formwizard" ... init arrays DIALOG ATTRIBUTES(UNBUFFERED) INPUT BY NAME currtable DISPLAY ARRAY afields TO a.* DISPLAY ARRAY cfields TO c.*
© 2011 IBM Corporation22
Flexible deploymentAbstract User Interface – an XML representation of the user interface
Abstract User Interface (AUI) tree− A logical UI map
© 2011 IBM Corporation23
Flexible deploymentAbstract User Interface – an XML representation of the user interface
AUI is a logical UI map
© 2011 IBM Corporation24
Flexible deploymentSynchronized XML trees – a scalable architecture
AUI tree syncronized between server & client Thin client, low graphics traffic
GDC
Web Server
GDCGenero
Desktop
Client
Genero
Web
Client
GASWeb Server
Genero
Desktop
Client
Genero
Web
Client
© 2011 IBM Corporation25
Flexible deploymentSynchronized XML trees
Network integration with 3rd party applications Open standards (W3C for XML, SOAP, WSDL, UDDI)
fglccgi
Web Server
gasd
Application Server
Web ServiceDVMs
WSDL request
Web Service request
© 2011 IBM Corporation26
Flexible deploymentSecure network access – several deployment strategies
Using ssh
Server
Genero
Desktop
Client
© 2011 IBM Corporation27
Flexible deploymentSecure network access – several deployment strategies
Using http(s)
Web Server
GAS
Genero
Desktop
Client
Genero
Web
Client
Server
© 2011 IBM Corporation28
Flexible deploymentGenero desktop client
Genero desktop client
Nokia ‘Qt’ based
MobileMACOSX
ASCII
Windows Linux
Abstract UserInterface
XML
HTML/AJAX
© 2011 IBM Corporation32
Flexible deploymentGenero Desktop Client – Picture flow DISPLAY ARRAY attribute
© 2011 IBM Corporation33
Flexible deploymentGenero Web client
Genero Web Client (GWC)
Supports all browsers− XML ‘Snippets’− RIA
∙ Silverlight, Ajax, XUL, − WAP− Infinite customization
WindowsMobile
MACOSX
ASCII
Windows Linux
Abstract UserInterface
XML
HTML
© 2011 IBM Corporation34
Flexible deploymentScalable, highly available architecture
GAS architecture – GAS Engine
• core reusable component• scalable• highly available
− GAS Connector • pluggable for target application server
− IIS & CGI-based Web servers− J2EE web servers
– GAS Engine/GAS Connector i/f:• GAS Engine Interface – informs GAS Engine of pending HTTP
requests• GAS Container Interface – informs GAS Connector of response
for pending HTTP request
© 2011 IBM Corporation35
Flexible deploymentGenero Web Client – architecture
Genero Web Client (GWC) Supports all browsers
− XML ‘Snippets’− RIA
• Silverlight, Ajax, XUL− WAP− Infinite customization
Abstract User
Interface
RenderingEngine
MAINMark-up
TEMPLATE
Mark-upSNIPPET
TEMPLATE
ResultingMark-up
PAGE
DVM
© 2011 IBM Corporation36
Flexible deploymentGenero Web Client – MS® Silverlight®
GWC for MS® Silverlight®
– A powerful development platform for Rich Internet Applications
– Based on XAML and C#– Runs in & outside the browser– Desktop user experience via Web– Optimize application deployment:– Zero installation– Cloud compatible– A sandbox secures the client side
Abstract User
Interface
RenderingEngine
MAINMark-up
TEMPLATE
Mark-upSNIPPET
TEMPLATE
ResultingMark-up
PAGE
DVM
© 2011 IBM Corporation37
Flexible deploymentGenero Web Client – Apple® iPad® & iPhone®
Two GWC methods to support iPhone− Safari Mobile & Ajax snippets− Dedicated iPhone snippets for native rendering
© 2011 IBM Corporation38
Flexible deployment Web components
Enrich applications with existing commercial or free Web Components:− Charts, maps, agendas− Display dynamic values− Input values− Execute actions
Create new widgets Web components run on:
− GDC (Desktop)− GWC Ajax (Web)
© 2011 IBM Corporation39
Flexible deploymentWeb components
Embed reusable Web Components into forms– Via urls– HTML, HTML+, DHTML,– Flash ®,– Java,– Silverlight,– Set attributes & .4ST styles.
Define ‘place holders’ in (.per) forms like TextEdit
DVM sets/gets the component value as a formfield
© 2011 IBM Corporation40
Unified Javascript® API allows Web Component interaction with the Genero dialog structure:− Gets associated value− Sets associated value− Executes actions− Manages ‘the focus’
Flexible deploymentWeb components
Client(Component Container)
Boolean SetData (DATA)-Boolean SetFocus ()-
Boolean Action (actionName)-
Component
-void onDATA (data)-Void onFocus (polarity)
Javascriptbridge
© 2011 IBM Corporation41
Flexible deploymentDatabase agnostic
Open Database Interface
Multi-vendor Embedded SQL Switch rapidly
Sybase
MAIN DEFINE p_num INTEGER DATABASE stores DECLARE c1 CURSOR FOR SELECT name, address, cdate
FROM customer WHERE custid = p_num OPEN c1 ...
END MAIN
© 2011 IBM Corporation42
Flexible deploymentOperating system agnostic
One binary fits all Compile once Deploy anywhere Reduce life cycle
costs
© 2011 IBM Corporation43
Scalable performanceAutonomous services connect via Web services
SOA Integration Scales to ‘000s of
concurrent users on a single server
IMPORT xml
FUNCTION saveOrder(order)
DEFINE order RECORD LIKE order.*
DEFINE doc xml.DomDocument
DEFINE frag xml.DomNode
LET doc = Xml.DomDocument.Create()
LET frag = doc.createDocumentFragment()
CALL xml.Serializer.VariableToXML(order,frag)
CALL doc.appendDocumentNode(frag)
CALL doc.saveToFile("Order.xml")
END FUNCTION
© 2011 IBM Corporation44
Web ServicesAutonomous services connect via Web services
Genero Web Services (GWS)− Interoperability in SOAs
• Compliant with latest standards (WS-I, Document Style Service)• Communication with Java, MS.Net…
− Web Services integrated in the language• Ease of use• Ease of deployment (Service location repository)
− Security• HTTPS, HTTP Authenticate, XMLSecurity, Proxy, Certificates
− Development tools• Generation of Server and Client from WSDL
− fglwsdl command line tool− Generates code for all services types
• RPC/Encoded, RPC/Literal, Doc/Literal
© 2011 IBM Corporation46
DB Meta schema Design FormsEdit code Create Reports
Debug apps Manage Projects Files & Dirs Team work (SCM) Diff
App Generator SOA & WS HelpProfiler
Overview Business application modeling