Stop! Don’t throw away that ADM2 code just yet… Jeff Ledbetter Product Architect, Roundtable Software.

Slides:



Advertisements
Similar presentations
PHP II Interacting with Database Data. The whole idea of a database-driven website is to enable the content of the site to reside in a database, and to.
Advertisements

IF statement (i) Single statement. IF ( logical expression ) statement Example: read(*,*) a if (a. lt. 0) a = -a write(*,*) a Or read(*,*) a if (a < 0)
PHP and MySQL Database. Connecting to MySQL Note: you need to make sure that you have MySQL software properly installed on your computer before you attempt.
OpenEdge® Object-oriented ABL
Progress OpenEdge BPM: An Application Revolution Demonstration OpenEdge 11.0 and Savvion 8.0 Shelley Chase, Software Architect, OpenEdge.
A5: Structured Error Handling in the ABL Phillip Malone Senior Technical Support Engineer.
DT211/3 Internet Application Development JSP: Processing User input.
DEV-14: Understanding and Programming for the AppServer™
Developing a 21 st Century Point of Service using the latest OpenEdge tools Brian Preece Business Computer Projects.
Web Development Challenges and How They are Solved in ps:eScript Matt Verrinder Progress Software UK Internet & Integration Technologies.
REST for any application
Coding with Identity Management & Security Part 2 of Identity Management with OpenEdge Peter Judge OpenEdge Development
Dataface API Essentials Steve Hannah Web Lite Solutions Corp.
Writing All Your Code In OpenEdge Architect Peter van Dam.
Identity Management Basics Part 1 of Identity Management with OpenEdge Peter Judge OpenEdge Development
WaveMaker Visual AJAX Studio 4.0 Training Studio Overview.
How Progress uses Progress Jordi Sastre IT Architect, Progress Software Corporation 10 June 2014.
Testing. What is Testing? Definition: exercising a program under controlled conditions and verifying the results Purpose is to detect program defects.
4-1 INTERNET DATABASE CONNECTOR Colorado Technical University IT420 Tim Peterson.
SOA-12: Integrate over the Web with OpenEdge® Web Services
Peter van Dam Dynamic WebClient Programming. Peter van Dam Progress fanatic since 1985 Version CHUI-GUI-Batch-WebSpeed-WebClient Founder.
SOA-2: OpenEdge® 10.1A Adapters for SonicMQ® New Install, New Architecture, and New APIs Cheryl LaBarge Senior Training Program Manager.
DEV-12: Object-oriented Programming in OpenEdge® ABL
ARCH-03: Implementing the OpenEdge™ Reference Architecture – Part 1 John Sadd Progress Fellow and OpenEdge Evangelist.
DEV-5: Introduction to WebSpeed ® Stephen Ferguson Sr. Training Program Manager.
ARCH-09: Transforming a Complex Application Apprise® is a registered trademark of Apprise Software, Inc. Transcendix SM is a service mark and trademark.
© Copyright 1992–2005 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. Tutorial 5 – Dental Payment Application: Introducing.
Presentation. Recap A multi layer architecture powered by Spring Framework, ExtJS, Spring Security and Hibernate. Taken advantage of Spring’s multi layer.
AppDynamics Ohio User Group. What is ExactTarget? Software as a Service Marketing 500 million s sent a day 200 million web transactions a day.
ARCH-4: The Presentation Layer in the OpenEdge® Reference Architecture Frank Beusenberg Senior Technical Consultant.
INT-5: Integrate over the Web with OpenEdge® Web Services
SOA-26: Extending Your Application with OpenEdge ® Web Services John Sadd OpenEdge Evangelist.
Catch Me If You Can P ractical Structured Error Handling Peter van Dam.
CS Class 05 Topics  Selection: switch statement Announcements  Read pages 74-83, ,
.  A multi layer architecture powered by Spring Framework, ExtJS, Spring Security and Hibernate.  Taken advantage of Spring’s multi layer injection.
AN OBJECT LESSON IN CLASSES “or how OO ABL solves everything.”
ARCH-07: Implementing the OpenEdge™ Reference Architecture – Part 2
ARCH-7: A Class-Based Implementation of the OpenEdge® Reference Architecture John Sadd Fellow and OpenEdge Evangelist Applied Technology.
ARCH-11: Building your Presentation with Classes John Sadd Fellow and OpenEdge Evangelist Sasha Kraljevic Principal TSE.
Dynamic Web File Maintenance  Reasons for development  Design Objectives  Development methods  Code examples  Demo.
DEV-3: Getting Started with OpenEdge® Architect – Part II David Lund Sr. Training Program Manager Mark Hanley Sr. Manager Development Tools.
A16: proDataSets in the Real World aka blood, sweat and tears revisited Miles Klettke Clever Fellow.
INNOV-7: Building a Richer UI for the Browser Chris Skeldon Senior Solution Consultant.
DEV-6: Advanced Object-Oriented Programming in the ABL Evan Bleicher Senior Development Manager Shelley Chase
Exceptions Chapter 16 This chapter explains: What as exception is Why they are useful Java exception facilities.
Smart customizations Microsoft Dynamics TM AX 4.0 Michael Fruergaard Pontoppidan Partner Productivity – Microsoft Dynamics AX TM Microsoft Corporation.
How to Test Methods Computer Science 3 Gerb Objective: Test methods properly.
A7: Architecting Your Application in OpenEdge ® 10 Mike Ormerod Applied Architect.
ARCH-7: Integrate this! SonicMQ® and the OpenEdge® Reference Architecture Christian Stiller Technical Architect.
Presentation.
DEV-5: Using ProDataSets™ in OpenEdge ® 10 Cheryl LaBarge Product Readiness.
Welcome to Azure App Services! Amie Seisay
ARCH-5: Service Interfaces in Practice Christian Stiller Technical Architect.
MOVE-15: Leveraging Business Entities, Data Access Objects and ProDataSets with a Progress Dynamics® or ADM2 GUI Peter Judge Principal Software Engineer.
MDD and BRM in a new OE backend framework Speed up softwaredevelopment, eliminate need for handwriten code Make rules editable for business-specialists.
Peter Judge A8: What’s New in Object-Oriented ABL Principal Software Engineer OpenEdge 10.1C and beyond.
1 © 2005 Cisco Systems, Inc. All rights reserved. Cisco Confidential Session Number Presentation_ID Unity Connection Provisioning API Matt Penning Unity.
Configuration Management, Integration, and Builds
DEV-25: You've Got a Problem, Here’s How to Find It
Indexer AKEEL AHMED.
Lesson Outcomes Be able to identify differentiate between types of error in programs Be able to interpret error messages and identify, locate.
COMP-10: Managing OpenEdge® Development with the Roundtable® TSMS
James Blankenship March , 2018
Lecture 1: Multi-tier Architecture Overview
ARCH-1: Application Architecture made Simple
ARCH-4: A Stateful Application in a Stateless World
DEV-11: Architecting Your Application in OpenEdge® 10
CSE 1020:Software Development
Chapter 11: Configuration Management, Integration, and Builds
Call Any Web Service from the Progress 4GL
Presentation transcript:

Stop! Don’t throw away that ADM2 code just yet… Jeff Ledbetter Product Architect, Roundtable Software

2 © 2015 Roundtable Software, Inc. Who do we think we are?  Roundtable TSMS Software Configuration Management for OpenEdge  Roundtable Team Basic version control built on Eclipse team API

3 © 2015 Roundtable Software, Inc. Who do we think we are?

4 © 2015 Roundtable Software, Inc. Future-proof.

5 © 2015 Roundtable Software, Inc. BL SDO UI DB ADM2

6 © 2015 Roundtable Software, Inc. BL SDO UI DB ADM2 Proxy

7 © 2015 Roundtable Software, Inc. BL SDO UI DB ADM2 Proxy ABL JAVA.NET

8 © 2015 Roundtable Software, Inc. Build It  Define your model RowObject temp-table  Build integration points serverSendRows serverCommit  Build proxy layer  Expand

9 /* getRowObject.p */ DEFINE INPUT-OUTPUT PARAMETER pcRowIdent AS CHARACTER NO-UNDO. DEFINE INPUT PARAMETER piRowsToReturn AS INTEGER NO-UNDO. DEFINE INPUT PARAMETER phSdo AS HANDLE NO-UNDO. DEFINE INPUT PARAMETER phTT AS HANDLE NO-UNDO. DEFINE VARIABLE hRowObj AS HANDLE NO-UNDO. /* handle of RowObject temp table */ DEFINE VARIABLE hRowObjQry AS HANDLE NO-UNDO. /* handle of RowObject temp table query */ DEFINE VARIABLE iRowsRet AS INTEGER NO-UNDO. RUN serverSendRows IN phSdo (INPUT ?, /* ? = use the 2nd parameter as starting point */ INPUT pcRowIdent, INPUT (IF pcRowident <> "FIRST":U AND pcRowIdent <> "LAST":U THEN TRUE ELSE FALSE), INPUT piRowsToReturn, OUTPUT iRowsRet, OUTPUT TABLE-HANDLE phTT). IF piRowsToReturn GT 0 THEN DO: IF iRowsRet LT piRowsToReturn THEN pcRowIdent = "". ELSE DO: phTT:DEFAULT-BUFFER-HANDLE:FIND-LAST(). pcRowIdent = phTT:DEFAULT-BUFFER-HANDLE:BUFFER-FIELD("rowIdent"):BUFFER-VALUE. END. ELSE pcRowIdent = "". RETURN.

10 /* GetCustomer.p - Fetch the Customer by name. */ DEFINE INPUT PARAMETER pcName AS CHARACTER NO-UNDO. DEFINE OUTPUT PARAMETER TABLE-HANDLE phTT. DEFINE VARIABLE cRowIdent AS CHARACTER NO-UNDO INITIAL "FIRST". DEFINE VARIABLE hSdo AS HANDLE NO-UNDO. DEFINE TEMP-TABLE ttCustomer {pug/sdoCustomer.i} {src/adm2/robjflds.i}. phTT = TEMP-TABLE ttCustomer:HANDLE. IF pcName = "" THEN DO: /* If no name is given, return an empty record. */ CREATE ttCustomer. RETURN. END. RUN pug/sdoCustomer.w PERSISTENT SET hSdo. /* Start SDO */ DYNAMIC-FUNCTION('selectName':U IN hSdo, pcName). /* Set Query */ RUN pug/getRowObject.p (INPUT-OUTPUT cRowIdent, 0, hSdo, phTT). /* Fetch data into our temp-table */ RETURN. FINALLY: RUN destroyObject IN hSdo NO-ERROR. DELETE OBJECT phTT NO-ERROR. END FINALLY.

11 /* GetCustomerSample.p */ DEFINE VARIABLE hTT AS HANDLE NO-UNDO. RUN pug/GetCustomer.p ("Roundtable Software", OUTPUT TABLE-HANDLE hTT). /* Prove it!*/ RUN pug/viewTempTable.w (hTT). RETURN. FINALLY: DELETE OBJECT hTT NO-ERROR. END FINALLY.

12 /* setRowObject.p */ DEFINE INPUT PARAMETER pcSdo AS CHARACTER NO-UNDO. DEFINE INPUT PARAMETER phTT AS HANDLE NO-UNDO. FUNCTION getRowMod RETURNS CHARACTER PRIVATE( ) FORWARD. DEFINE VARIABLE cMessages AS CHARACTER NO-UNDO. DEFINE VARIABLE cUndoIds AS CHARACTER NO-UNDO. DEFINE VARIABLE hSdo AS HANDLE NO-UNDO. DEFINE VARIABLE hRowObjUpd AS HANDLE NO-UNDO. DEFINE VARIABLE lSuccess AS LOGICAL NO-UNDO INITIAL TRUE. DEFINE VARIABLE lAdd AS LOGICAL NO-UNDO INITIAL NO. $UPDATE-ROW: DO ON ERROR UNDO, LEAVE: RUN create_update_record. RUN VALUE(pcSdo) PERSISTENT SET hSdo. RUN serverCommit IN hSdo(INPUT-OUTPUT TABLE-HANDLE hRowObjUpd, OUTPUT cMessages, OUTPUT cUndoIds). IF cMessages <> "" THEN LEAVE $UPDATE-ROW. IF getRowMod() = "A":U THEN RUN update_rowident. END. /* $UPDATE-ROW */

13 /* DeleteCustomerSample.p */ DEFINE VARIABLE cError AS CHARACTER NO-UNDO. DEFINE VARIABLE hBuf AS HANDLE NO-UNDO. DEFINE VARIABLE hTT AS HANDLE NO-UNDO. RUN pug/GetCustomer.p ("Roundtable Software", OUTPUT TABLE-HANDLE hTT). hBuf = hTT:DEFAULT-BUFFER-HANDLE. hBuf:FIND-FIRST(). hBuf::RowMod = "D". RUN pug/SetCustomer.p (INPUT-OUTPUT TABLE-HANDLE hTT, OUTPUT cError). IF cError <> "" THEN MESSAGE cError VIEW-AS ALERT-BOX ERROR. FINALLY: DELETE OBJECT hTT NO-ERROR. END FINALLY.

14 © 2015 Roundtable Software, Inc. BL SDO Proxy UI DB REST Web XML Mobile ABL JAVA.NET ADM2

15 /* GetCustomerJson.p */ DEFINE INPUT PARAMETER pcName AS CHARACTER NO-UNDO. DEFINE OUTPUT PARAMETER plcJson AS LONGCHAR NO-UNDO. DEFINE VARIABLE hTT AS HANDLE NO-UNDO. RUN pug/GetCustomer.p ("Roundtable Software", OUTPUT TABLE-HANDLE hTT). hTT:WRITE-JSON ("LONGCHAR", plcJson, FALSE). RETURN. FINALLY: DELETE OBJECT hTT NO-ERROR. END FINALLY.

16 © 2015 Roundtable Software, Inc. Sample Code ftp://ftp.roundtable-software.com/public

17 © 2015 Roundtable Software, Inc. Questions?