Download presentation
Presentation is loading. Please wait.
Published byΤάνις Κορνάρος Modified over 6 years ago
1
COMP-10: Managing OpenEdge® Development with the Roundtable® TSMS
OpenEdge Architect plug-in Jeff Ledbetter and Randall Harp Roundtable Product Architects Tugboat Software
2
THE FOLLOWING PRESENTATION HAS BEEN APPROVED FOR ALL AUDIENCES BY PROGRESS SOFTWARE CORPORATION
3
Agenda Trailer What, why and how Scene Selection
Introducing the Roundtable plug-in Directors Cut The vision and how we did it
4
Overview What is Roundtable® TSMS?
Roundtable is a team-oriented extension for the OpenEdge Studio and OpenEdge Architect development environments that provides Software Configuration Management and developer productivity tools.
5
Roundtable Why Roundtable? OpenEdge Database Repository Repository
Entire application, customizations, and change history are stored in the repository database Source code Documentation Schema Images Roundtable Repository
6
Why Roundtable? Overview of Development Life-cycle
Who is working on what? What object versions are checked-out? Why are these changes being made? When were these changes made?
7
Why Roundtable? Control of Development Processes
Which developers can make changes? What objects can they modify? Which processes can they perform? Where can the changes be made?
8
Why Roundtable? Productivity Tools Task Management Impact Analysis
Deployment Management Smart Compilation Schema Management
9
Agenda Trailer What, why and how Scene Selection
Introducing the Roundtable plug-in Directors Cut The vision and how we did it
10
Introducing the Roundtable Plug-in
Overview Written in Java™ Provided as additional views for OpenEdge perspectives Provides access to essential developer functionality Adheres to Roundtable SCM principals
11
Introducing the Roundtable Plug-in
Smart Compilation Impact Analysis Task Management Configurations Overview Version Control
12
Introducing the Roundtable Plug-in
Configurations View Displays a hierarchical tree of Configurations, Modules and Objects Available Tasks Configurations Modules Groups Objects
13
Introducing the Roundtable Plug-in
Tasks View Displays available work-in-process Tasks for the selected Configuration Selected Tasks Task Objects
14
Introducing the Roundtable Plug-in
Versions View Lists all versions of the selected object regardless of the Configuration in which they were created Assign previous versions to selected Configuration Extract committed versions for comparison
15
Introducing the Roundtable Plug-in
Version Ancestry View Lists version ancestry for the selected Object version Easily identify change history Product Module branch indicated by row color change
16
Introducing the Roundtable Plug-in
Xref View Shows all items referenced by the selected Object Shows actions taken on referenced item Shows type of referenced Object Captured automatically at compile time
17
Introducing the Roundtable Plug-in
Where-Used View Shows each Object that references the selected Object Shows how each Object is referenced Captured automatically at compile time
18
Introducing the Roundtable Plug-in
Demo Time
19
Agenda Trailer What, why and how Scene Selection
Introducing the Roundtable plug-in Directors Cut The vision and how we did it
20
Director’s Cut The Vision True Eclipse plug-in
Use existing architecture Adhere to SCM principals Easy migration path for existing customers Deliver on-time
21
Director’s Cut What We Had Distributed 4GL application
Developed using ADM2 Minimal time
22
Director’s Cut How We Did It
Created ABL Proxy Layer to leverage existing SDO functionality Created Java classes using ProxyGen Eclipse plug-in
23
Director’s Cut What We Had Distributed ADM2 application S e r v RTB
Repo ABL Client
24
Director’s Cut How We Did It ABL Proxy Layer Between Client and Server
RTB Repo Plug-in ABL Client
25
Director’s Cut ABL Proxy Sample
/* rtbGetObject - Proxy procedure to return object data */ DEFINE INPUT PARAMETER pcWspace AS CHARACTER NO-UNDO. DEFINE INPUT PARAMETER pcObjType AS CHARACTER NO-UNDO. DEFINE INPUT PARAMETER pcObject AS CHARACTER NO-UNDO. DEFINE OUTPUT PARAMETER TABLE-HANDLE phTT. DEFINE VARIABLE cRowIdent AS CHARACTER NO-UNDO. DEFINE VARIABLE hSdo AS HANDLE NO-UNDO. DEFINE TEMP-TABLE rtbObject {rtb/sdo/rtb_u_obj.i} {rtb/admtwo/robjflds.i}. phTT = TEMP-TABLE rtbObject:HANDLE. RUN rtb/sdo/rtb_u_obj.w PERSISTENT SET hSdo. Continued on next slide...
26
Director’s Cut ... continued from previous slide. DYNAMIC-FUNCTION('fnRtbSelectWorkspaceTypeObject':U IN hSdo, pcWspace, pcObjType, pcObject). cRowIdent = "FIRST":U. RUN rtb/p/rtb_getrowobject.p (INPUT-OUTPUT cRowIdent, INPUT 0, /* rows to batch */ INPUT hSdo, INPUT phTT). RUN destroyObject IN hSdo. RETURN.
27
Director’s Cut /* rtb_getrowobject.p – Retrieve data from rowObject temp-table */ 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. DEFINE VARIABLE hRowObjQry AS HANDLE NO-UNDO. 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 hRowObj). Continued on next slide...
28
Director’s Cut ... continued from previous slide. /* Open the query and copy the RowObject temp-table into our own temp-table */ CREATE QUERY hRowObjQry. hRowObjQry:SET-BUFFERS(hRowObj:DEFAULT-BUFFER-HANDLE). hRowObjQry:QUERY-PREPARE("for each RowObject"). hRowObjQry:QUERY-OPEN(). hRowObjQry:GET-FIRST(). DO WHILE NOT hRowObjQry:QUERY-OFF-END: phTT:DEFAULT-BUFFER-HANDLE:BUFFER-CREATE. phTT:DEFAULT-BUFFER-HANDLE: BUFFER-COPY(hRowObj:DEFAULT-BUFFER-HANDLE). hRowObjQry:GET-NEXT(). END. Continued on next slide...
29
Director’s Cut ... continued from previous slide. /* If we are batching records, we return the ROWID of the last record in the batch to make life easier on the client. This code checks to see if we got less rows than requested. If so, we can assume we are at the last batch so we just return a blank instead of a ROWID. */ IF piRowsToReturn GT 0 THEN DO: IF iRowsRet LT piRowsToReturn THEN pcRowIdent = "". ELSE DO: hRowObjQry:GET-LAST(). pcRowIdent = hRowObj:DEFAULT-BUFFER-HANDLE: BUFFER-FIELD("rowIdent"):BUFFER-VALUE. END. ELSE DELETE OBJECT hRowObj. DELETE OBJECT hRowObjQry. RETURN.
30
Any Questions? ?
31
Thank you for attending!
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.