using 4gl super-widgets! - innov8 computer solutions · using 4gl super-widgets! ... • the only...

40
BP0550: Using 4GL Super-Widgets! StepUp AccountingHansdip Singh Bindra Phone: +1 (973) 361-4224 Fax: +1 (973) 537-6946 e-mail: [email protected] Web: www.innov8cs.com © 2002-2005. Innov8 Computer Solutions, LLC. Transforming Business Processes into Software…01

Upload: dangkhue

Post on 08-Nov-2018

243 views

Category:

Documents


1 download

TRANSCRIPT

BP0550: Using 4GL Super-Widgets!

StepUp Accounting™

Hansdip Singh BindraPhone: +1 (973) 361-4224 Fax: +1 (973) 537-6946e-mail: [email protected]

Web: www.innov8cs.com

© 2002-2005. Innov8 Computer Solutions, LLC. Transforming Business Processes into Software…™ 01

About Us:

• StepUp Accounting™• You do not have to Reinvent the Accounting Wheel• The ONLY “Web-Services Ready” Progress based G/L, A/R, A/P• Made just for ISV's and Consultants

• ProcessWare FrameWork™

• Consulting…• Progress 4GL / Database / GUI• WebSpeed• DWP and WebClient• Web-Services / Sonic / .Net / EAI• Experienced / High-Quality Off-Shore Services

© 2002-2005. Innov8 Computer Solutions, LLC. StepUp Accounting™ 02

“Super-Widgets”

• Browse-based Viewer

• Group Member Representation

• Drop-Down Browse

• Updateable Browse Enhancements

• Advanced Browsers

© 2002-2005. Innov8 Computer Solutions, LLC. Transforming Business Processes into Software…™ 03

Browse-based Viewer -Overview:

What is a Viewer?• Group of “display widgets” such as non-sensitive Fill-Ins stacked

below a main Browse

• Used in Inquiry or Information Retrieval applications

Why a Browse based Viewer?• Simple UI with uniform “Look and Feel”• Similar to ActiveX Grids with “Label” and “Value” cells• Takes up less area than stacked Fill-Ins• Customize Viewer colors/fonts at runtime

© 2002-2005. Innov8 Computer Solutions, LLC. StepUp Accounting™ 04

Browse-based Viewer - Comparison

Regular Viewer made up of Stacked Fill-Ins

Browse-based Viewer

** DEMO **

© 2002-2005. Innov8 Computer Solutions, LLC. Transforming Business Processes into Software…™ 05

Browse-based Viewer -Browse Properties:

Property Value Enabled NO Multiple-Selection YES No-Labels YES Open the Query YES Scrollbar-Vertical NO Separators YES

© 2002-2005. Innov8 Computer Solutions, LLC. StepUp Accounting™ 06

Browse-based Viewer -Temp-Table and Associated Buffers:

• Temp-Table based

• Example: “Static” Temp-Table and Browse widget for simplicity

• Can construct with “dynamic” Temp-Table and Browse widget

• Number of Buffers = Number of Rows in Viewer

/** Define Temp-Table for Browse based Viewer **/DEFINE TEMP-TABLE TempBrowseViewer NO-UNDO

FIELD LineNo AS INTEGERFIELD Label01 AS CHARACTERFIELD Value01 AS CHARACTERFIELD Label02 AS CHARACTERFIELD Value02 AS CHARACTERINDEX LineNo IS PRIMARY UNIQUE LineNo ASC.

/** Define Buffers for each Row of the Viewer **/DEFINE BUFFER TempBrowseViewer-Line01 FOR TempBrowseViewer.DEFINE BUFFER TempBrowseViewer-Line02 FOR TempBrowseViewer.DEFINE BUFFER TempBrowseViewer-Line03 FOR TempBrowseViewer.DEFINE BUFFER TempBrowseViewer-Line04 FOR TempBrowseViewer.DEFINE BUFFER TempBrowseViewer-Line05 FOR TempBrowseViewer.

© 2002-2005. Innov8 Computer Solutions, LLC. Transforming Business Processes into Software…™ 07

Browse-based Viewer -Free Form Query:

• Simple FOR EACH Query attaches Temp-Table to Viewer’s Browse• “Value” cells have default foreground/background colors• Easier readability than non-sensitive Fill-Ins with grayscale colors

TempBrowseViewer.Label01 FORMAT "X(15)":U COLUMN-BGCOLOR 8TempBrowseViewer.Value01 FORMAT "X(38)":U TempBrowseViewer.Label02 FORMAT "X(15)":U COLUMN-BGCOLOR 8TempBrowseViewer.Value02 FORMAT "X(38)":U.

© 2002-2005. Innov8 Computer Solutions, LLC. StepUp Accounting™ 08

Browse-based Viewer -TempViewerCreateProc:

• Creates Temp-Table Rows• Executed before Window or Dialog-Box is realized• Assigns data to “Label” cells• Uses all Associated Buffers• Buffers are locked in default “Update” mode• Buffers are updated in other Internal Procedures without Re-Finds

CREATE TempBrowseViewer-Line01.

ASSIGN TempBrowseViewer-Line01.LineNo = 1 TempBrowseViewer-Line01.Label01 = "Address 1:"TempBrowseViewer-Line01.Label02 = "Sales Agent:".

© 2002-2005. Innov8 Computer Solutions, LLC. Transforming Business Processes into Software…™ 09

Browse-based Viewer -TempViewerFillProc:

• Main Procedure for Viewer• Called from VALUE-CHANGED for main Browse, e.g. Customer List• Assigns data to “Value” cells

• One Input Parameter inType – Values “Assign/Initialize”

CASE inType:

WHEN "Assign":U THENASSIGN TempBrowseViewer-Line01.Value01 = Customer.Address

TempBrowseViewer-Line01.Value02 = Customer.Sales-Rep...

WHEN "Initialize":U THENASSIGN TempBrowseViewer-Line01.Value01 = ""

TempBrowseViewer-Line01.Value02 = ""...

END CASE.

© 2002-2005. Innov8 Computer Solutions, LLC. StepUp Accounting™ 10

Browse-based Viewer -TempViewerQueryProc:

• Re-opens Temp-Table Query associated with Viewer• Called from VALUE-CHANGED for main Browse• Executed after TempViewerFillProc• Contains simple FOR EACH on Temp-Table

/** If Customer is selected then Fill Browse based Viewer with Customerinformation, otherwise initialize the Viewer

**/

IF AVAILABLE Customer THENRUN TempBrowseViewerFillProc(INPUT "Assign":U).

ELSERUN TempBrowseViewerFillProc(INPUT "Initialize":U).

/** Refresh Browse based Viewer **/RUN TempBrowseViewerQueryProc.

© 2002-2005. Innov8 Computer Solutions, LLC. Transforming Business Processes into Software…™ 11

Browse-based Viewer -TempViewerDisplayProc:

• Central location for customizing color/font for “Value” cells• Change properties for a single cell without changing entire Column

IF TempBrowseViewer.LineNo = 3 THENDO:

/* If Balance exceeds Credit Limit - Red otherwise Green */IF AVAILABLE Customer AND

Customer.Balance > Customer.Credit-Limit THENASSIGN TempBrowseViewer.Value02:BGCOLOR IN BROWSE browseViewer = 12.

ELSEASSIGN TempBrowseViewer.Value02:BGCOLOR IN BROWSE browseViewer = 10.

END....

© 2002-2005. Innov8 Computer Solutions, LLC. StepUp Accounting™ 12

Group Member RepresentationOverview:

• Group/Members – Customers by Region – Users in Security Group

• “Left-to-Right” Method – “Left”: List of ALL Potential Members of Group– “Right”: Current SELECTED Members in Group

• Temp-Table Framework– Mandatory Logical Fields: MemberOfGroup and Removed– Indexes for mandatory Fields

© 2002-2005. Innov8 Computer Solutions, LLC. Transforming Business Processes into Software…™ 13

Group Member RepresentationUsage and Components:

** DEMO **

•“Left” Browse widget

•“Right” Browse widget

•Insert and Remove Buttons

•TempMember Temp-Table

•Internal ProceduresExample screen

© 2002-2005. Innov8 Computer Solutions, LLC. StepUp Accounting™ 14

Group Member RepresentationInternal Procedures:

• TempMemberFillProc– MemberOfGroup = YES, Removed = NO– White Background

• ItemAddProc– MemberOfGroup = NO, Removed = NO– Yellow Background

• ItemRemoveProc

• UpdateProc (Commit)

© 2002-2005. Innov8 Computer Solutions, LLC. Transforming Business Processes into Software…™ 15

Group Member RepresentationTempMemberFillProc:

FOR EACH CustomerGroupMember WHERECustomerGroupMember.CustomerGroup = CustomerGroup.CustomerGroupNO-LOCK:

FIND FIRST Customer WHERECustomer.Cust-Num = CustomerGroupMember.Cust-NumNO-LOCK NO-ERROR.

CREATE bufferTempMember.

BUFFER-COPY CustomerGroupMember EXCEPT CustomerGroupMember.CustomerGroup TO bufferTempMember.

ASSIGN bufferTempMember.Name = IF AVAILABLE bufferCustomer THENbufferCustomer.Name

ELSE"".

/** ADD EXISTING MEMBER - DO NOT MODIFY **/ASSIGN bufferTempMember.Removed = NO

bufferTempMember.MemberOfGroup = YES./** **/

RELEASE bufferTempMember.END. /* FOR EACH CustomerGroupName */

© 2002-2005. Innov8 Computer Solutions, LLC. StepUp Accounting™ 16

Group Member RepresentationItemAddProc:

FIND FIRST bufferTempMember WHEREbufferTempMember.Cust-Num = Customer.Cust-NumNO-ERROR.

IF NOT AVAILABLE bufferTempMember THENDO:

CREATE bufferTempMember.

ASSIGN bufferTempMember.Cust-Num = Customer.Cust-NumbufferTempMember.Name = Customer.Name

/** ADD NEW MEMBER IN SESSION - DO NOT MODIFY **/bufferTempMember.MemberOfGroup = NO

/** **/...

END./** ELSE – Simply Re-Activate Existing Member from TempMemberFillProc **/

...

/** ADD NEW MEMBER IN SESSION - DO NOT MODIFY **/ASSIGN bufferTempMember.Removed = NO/** **/

...

© 2002-2005. Innov8 Computer Solutions, LLC. Transforming Business Processes into Software…™ 17

Group Member RepresentationItemRemoveProc:

DEFINE INPUT PARAMETER inMemberOfGroup AS LOGICAL NO-UNDO.

IF inMemberOfGroup = YES THENDO:

/** CASE 1: Existing Member - MemberOfGroup = YES **/FIND CURRENT TempMember EXCLUSIVE-LOCK NO-ERROR.

IF AVAILABLE TempMember THENDO:

/** Set Removed = YES **/ASSIGN TempMember.Removed = YES.

FIND CURRENT TempMember NO-LOCK NO-ERROR.END.

/** Open Query where Removed = NO **/RUN TempMemberQueryProc(INPUT ?).

END.ELSE

DO: /** CASE 2: Member Added during Present Session – MemberOfGroup = NO **/FIND CURRENT TempMember EXCLUSIVE-LOCK NO-ERROR.

/** Delete Row from Temp-Table and Browse/Query **/DELETE TempMember.

browseTempMember:DELETE-CURRENT-ROW().END.

© 2002-2005. Innov8 Computer Solutions, LLC. StepUp Accounting™ 18

Group Member RepresentationUpdateProc (Commit):

ACTION MemberOfGroup Removed NEW Member NO NO EXISTING (Updated) Member YES NO DELETED Member YES YES

• “Right” Browse committed to Database

• Referential Integrity – Two Counters– numTotalUpdateMember – Number of Members to Commit– numUpdateMember – Number of Members actually Committed

© 2002-2005. Innov8 Computer Solutions, LLC. Transforming Business Processes into Software…™ 19

Drop-Down Button-List (Browse) -Overview:

Why?• Similar to Drop-Down Grids in Visual Basic or Delphi• “Data Aware” Combo-Box• Standard “Look and Feel”• “Black-Box” philosophy – Reusable• Replaces ActiveX Grids and SO Selection Browses

Advantages

• Performance – Reads data from data set as needed• Browse can be tied to Table, Temp-Table, and SDO• User’s focus remains on main Window

© 2002-2005. Innov8 Computer Solutions, LLC. StepUp Accounting™ 20

Drop-Down Button-List (Browse)

** DEMO **

© 2002-2005. Innov8 Computer Solutions, LLC. Transforming Business Processes into Software…™ 21

Drop-Down Button-List (Browse)Visual Layout/Setup:

• Browse (associated Query) defined in External (Frame) Procedure• Linked to main Window through CHOOSE of Down Arrow Button• API Driven – “Customizable”• External Procedure outputs three Values

Widget Width Height Row ColumnFill-In <varies> 1.00 <varies> <varies>Button 4.20 1.14 Fill-In Row – 0.05 Fill-In Column +

Fill-In WidthBrowse <varies> Normally 6 Fill-In Row + 1 (for Drop

Down) or Fill-In Row –Browse Height (for Drop Up)

Normally Fill-InColumn (Left-Edge)

All values in Characters

© 2002-2005. Innov8 Computer Solutions, LLC. StepUp Accounting™ 22

Drop-Down Button-List (Browse)API and Result Value:

RUN DropDownCustomer.p (INPUT {&WINDOW-NAME}:HANDLE, /* Parent Handle */INPUT scrCustomerName:ROW + 1, /* Row */INPUT scrCustomerName:COLUMN, /* Column */INPUT 1, /* Number of Locked Cols */INPUT "Double-Click to select Customer",/* ToolTip */INPUT YES, /* Reposition */INPUT SELF:HANDLE, /* Initial Widget - Focus */INPUT scrCustomerName, /* Position to Row Value */OUTPUT localValidResult, /* YES/NO */OUTPUT localWidgetHndl, /* Final Widget - Focus */OUTPUT localRowid). /* Result – Value */

• Valid Result = YES (Double-Click on Row): Process Result Value• Simple data-type (i.e. CHARACTER): ASSIGN to Fill-In • ROWID or multiple Fields: FIND appropriate data, then ASSIGN• Valid Result = NO (Click outside Browse): Provide Focus (or Default

Action) to Output Widget Handle

© 2002-2005. Innov8 Computer Solutions, LLC. Transforming Business Processes into Software…™ 23

Drop-Down Button-List (Browse)External Procedure – Overview:

• “Action” Object• Develop once, then Reuse• Save as .p, or .w (suppressed Window)

• Major Components– Fixed (Internal/Standard) Sections – Customizable Sections

• Fixed Sections: 4 Include Files (Require NO Modifications) • Customizable Sections: Modify for particular Application/Table(s)

© 2002-2005. Innov8 Computer Solutions, LLC. StepUp Accounting™ 24

Drop-Down Button-List (Browse)External Procedure – Fixed Sections:

DropDown-MainBlock.i• LEAVE Browse Frame CLOSE Procedure HIDE Browse• Informs PARENT Window that CHILD Drop Down Browse is Open• Input Parameters ASSIGN Browse Properties

– PARENT Window or Frame– ROW and COLUMN– TOOLTIP and HELP– NUM-LOCKED-COLUMNS, etc.

/** Set Parent for Browse Frame **/IF inWindowHndl:TYPE = "WINDOW":U THEN

ASSIGN inWindowHndl:PRIVATE-DATA = "<DropDownFileOpen>":UFRAME frameDropDown:PARENT = inWindowHndl.

ELSEASSIGN FRAME frameDropDown:FRAME = inWindowHndl.

© 2002-2005. Innov8 Computer Solutions, LLC. Transforming Business Processes into Software…™ 25

Drop-Down Button-List (Browse)External Procedure – Customizable Sections:DOUBLE-CLICK or DEFAULT-ACTION• SELECTED Row ASSIGN Result Value Valid Result = YES

• LEAVE Browse Frame CLOSE Procedure

/** Reposition will allow Scrolling Up and Down on Browse from Highlighted Row **/FIND FIRST Customer WHERE

Customer.Name >= inFillInValue NO-LOCK NO-ERROR.

ASSIGN localRowID = IF AVAILABLE Customer THENROWID(Customer)

ELSE?.

OPEN QUERY queryDropDown FOR EACH Customer NO-LOCK USE-INDEX Name INDEXED-REPOSITION.

IF localRowID <> ? THENREPOSITION queryDropDown TO ROWID localRowID.

OPEN and REPOSITION Query

© 2002-2005. Innov8 Computer Solutions, LLC. StepUp Accounting™ 26

Updateable Browse EnhancementsUpdateable Cell – Drop-Down Button-List (Browse):

** DEMO **

Focus in the Updateable Browse –Customer Name Cell

Drop-Down List (Browse) overlaying Updateable Browse

© 2002-2005. Innov8 Computer Solutions, LLC. Transforming Business Processes into Software…™ 27

Updateable Browse EnhancementsUpdateable Cell – Drop-Down Button-List (Browse):

Components• Updateable Browse widget• Example: Free-Form Query• Drop-Down Button-List (Browse)

– Fill-In Widget Editable Cell• Down-Arrow Button

– Placement – Visibility

© 2002-2005. Innov8 Computer Solutions, LLC. StepUp Accounting™ 28

Updateable Browse EnhancementsUpdateable Cell – Drop-Down Button-List (Browse):

Down Arrow Button – Placement and Visibility• Uses X,Y, WIDGET-HANDLE of Editable Cell

• Localized in Internal Procedure– Example: ButtonCustomerNamePlacementProc

• Execute Internal Procedure from two Events – SCROLL-NOTIFY of Updateable Browse– ENTRY of Editable Cell

• FOCUS in Editable Cell Button HIDDEN = NO• FOCUS in any other Widget Button HIDDEN = YES

© 2002-2005. Innov8 Computer Solutions, LLC. Transforming Business Processes into Software…™ 29

Updateable Browse EnhancementsUpdateable Cell – Drop-Down Button-List (Browse):

DO WITH FRAME {&FRAME-NAME}:/** Assign Widget Handle of the TempCustomerList.CustomerName Cell with Focus **/ASSIGN hndlCellCustomerName = TempCustomerList.CustomerName:HANDLE IN BROWSE

browseCustomerList.

/** If TempCustomerList.CustomerName Cell is horizontally not visible in the Browse Widget, then hide the Button, else set the Column position. **/

IF hndlCellCustomerName:X < 0 THEN ASSIGN buttonCustomerName:HIDDEN = YES.

ELSE ASSIGN buttonCustomerName:X = hndlCellCustomerName:X

+ browseCustomerList:X + hndlCellCustomerName:WIDTH-PIXELS- buttonCustomerName:WIDTH-PIXELS+ 3 /* Separator Pixels */.

/** If TempCustomerList.CustomerName Cell is vertically not visible in the Browse Widget, then hide the Button, else set the Row position. **/

IF hndlCellCustomerName:Y < 0 THEN ASSIGN buttonCustomerName:HIDDEN = YES.

ELSE ASSIGN buttonCustomerName:Y = hndlCellCustomerName:Y

+ browseCustomerList:Y.

/** If TempCustomerList.CustomerName Cell with Focus is visible in the Browse Widget then display and enable the Button. **/

IF AVAILABLE TempCustomerList THENDO:

IF hndlCellCustomerName:X >= 0 ANDhndlCellCustomerName:Y >= 0 THEN ASSIGN buttonCustomerName:HIDDEN = NO

buttonCustomerName:SENSITIVE = YES.END.

END.

ButtonCustomerNamePlacementProc

© 2002-2005. Innov8 Computer Solutions, LLC. StepUp Accounting™ 30

Updateable Browse EnhancementsDynamic Conversion of Updateable Cell to Non-Updateable Cell:

Functionality/Need• Entire editable Column, non-editable: READ-ONLY = YES

• Business Rules based• Examples:

– Price Items Matrix– User Security-based Field/Cell Level data entry

• Some cells (Rows) in Column are editable• Other cells in same Column are non-editable

© 2002-2005. Innov8 Computer Solutions, LLC. Transforming Business Processes into Software…™ 31

Updateable Browse EnhancementsDynamic Conversion of Updateable Cell to Non-Updateable Cell:

• City Column• Ranks 1 – 5 are editable cells• Ranks 6 – 10 are non-editable cells• Editable cells: Blue/White• Non-Editable cells: Black/Light Grey

Example screen

** DEMO **

© 2002-2005. Innov8 Computer Solutions, LLC. StepUp Accounting™ 32

Updateable Browse EnhancementsDynamic Conversion of Updateable Cell to Non-Updateable Cell:

ROW-DISPLAY• Manage Color combination for Editable/Non-Editable cells• Consistent “Look and Feel”

– Non-editable Columns– Non-editable cells in editable Column

IF TempCustomerList.Rank > 5 THENASSIGN TempCustomerList.City:FGCOLOR IN BROWSE browseCustomerList = 0

TempCustomerList.City:BGCOLOR IN BROWSE browseCustomerList = 8.

© 2002-2005. Innov8 Computer Solutions, LLC. Transforming Business Processes into Software…™ 33

Updateable Browse EnhancementsDynamic Conversion of Updateable Cell to Non-Updateable Cell:

VALUE-CHANGED• “Action” Event• Manage cell’s READ-ONLY (editable) attribute• Appropriate Updateable cell Non-Updateable • Does not convert entire COLUMN to Non-Updateable

IF TempCustomerList.Rank > 5 THENASSIGN TempCustomerList.City:READ-ONLY IN BROWSE browseCustomerList = YES.

ELSEASSIGN TempCustomerList.City:READ-ONLY IN BROWSE browseCustomerList = NO.

© 2002-2005. Innov8 Computer Solutions, LLC. StepUp Accounting™ 34

Advanced BrowsersOverview:

• Using Temp-Table Managers

• Working with Array Columns

• Positioning Multi-Select Browses

© 2002-2005. Innov8 Computer Solutions, LLC. Transforming Business Processes into Software…™ 35

Advanced BrowsersDemo of Sales Analysis System:

** DEMO **

SORT COLUMNARRAY ELEMENTS

SELECTED COLUMN

© 2002-2005. Innov8 Computer Solutions, LLC. StepUp Accounting™ 36

Advanced BrowsersUsing Temp-Table Managers:

• Temp-Table to Manage Column Handles• Load Handles ONCE only!• Dynamic Access/Modify Cell (Column) Attributes:

LABEL, FGCOLOR, VISIBLE, etc.• Avoid Compiler Errors and Limitations – Arrays

DEFINE TEMP-TABLE tempBrowseColumns NO-UNDOFIELD BrowseName AS CHARACTER FIELD ColumnHandle AS WIDGET-HANDLE EXTENT 51 /* NUM-COLUMNS */INDEX BrowseName IS PRIMARY UNIQUE BrowseName ASC.

/* WRONG – WILL NOT COMPILE */ASSIGN CustomerSales.SalesMonth[i]:BGCOLOR IN BROWSE browseMain = 12.

/* CORRECT – WILL COMPILE *//* We have assigned the Handles of each Column to the Array Elements in

tempBrowseColumns.ColumnHandle Field */ ASSIGN tempBrowseColumns.ColumnHandle[i]:BGCOLOR = 12.

© 2002-2005. Innov8 Computer Solutions, LLC. Transforming Business Processes into Software…™ 37

Advanced BrowsersWorking with Array Columns:

• CURRENT-COLUMN:NAME is always the “same”• How to differentiate which Array Element Column is

Selected?• CURRENT-COLUMN:TYPE is “FILL-IN” always!• Use CURRENT-COLUMN:INDEX (1…No. of Elements)• Now you can SORT or Manipulate Cells & Column

Headers for selected ColumnON START-SEARCH of browseMain DO ...

/* Validate Selected Column Handle, determine it is SalesMonth Array Field, and send Array Element Number to Sort Procedure */

IF VALID-HANDLE(browseMain:CURRENT-COLUMN) ANDbrowseMain:CURRENT-COLUMN:NAME = “SalesMonth” THEN

RUN SortColumnProc(INPUT browseMain:CURRENT-COLUMN:INDEX)...

© 2002-2005. Innov8 Computer Solutions, LLC. StepUp Accounting™ 38

Advanced BrowsersPositioning Multi-Select Browses:

• Multiple Selected Rows Multiple Bands of Blue• Position to a single Row One Blue Row. How?• Simple SET-REPOSITIONED-ROW will NOT work!

– Reposition OK– Will NOT Highlight One Blue Row (ONLY “- - -” Band)

/* Remove Bands of Blue from Multiple Selected Rows */IF browseMain:NUM-SELECTED-ROWS > 0 THEN

browseMain:DESELECT-ROWS().

/* Position Browser Query to desired Row */REPOSITION browseMain TO ROWID localRowid.

/* Visualize desired Row on Browse – put a “---” Band around the Row */browseMain:SET-REPOSITIONED-ROW(INTEGER(browseMain:HEIGHT-CHARS / 2),”CONDITIONAL”:U)

/* Highlight desired Row – One Blue Row */browseMain:SELECT-FOCUSED-ROW().

© 2002-2005. Innov8 Computer Solutions, LLC. Transforming Business Processes into Software…™ 39

Questions?Additional Information and Downloads…

http://www.innov8cs.com

StepUp Accounting™…You do not have to Reinvent the Accounting Wheel

…The ONLY “Web-Services Ready” Progress based G/L, A/R, A/P …Made just for ISV's and Consultants

© 2002-2005. Innov8 Computer Solutions, LLC. StepUp Accounting™ 40