Kbase P17641: How to get the calculated field values from a regular browse
Autor |
  Progress Software Corporation - Progress |
Acesso |
  Público |
Publicação |
  30/01/2003 |
|
Status: Unverified
GOAL:
How to get the calculated field values from a regular browse widget?
FIX:
The sample code below runs against the sports2000 database and its main goal is to navigate between the browse rows showing the calculated field's screen value.
DEFINE VARIABLE vcCalcFld AS CHARACTER LABEL "State":U NO-UNDO.
DEFINE VARIABLE vhBrowseCurCol AS HANDLE NO-UNDO.
DEFINE VARIABLE viCounter AS INTEGER NO-UNDO.
DEFINE VARIABLE vhWinHdl AS WIDGET-HANDLE NO-UNDO.
DEFINE BUTTON btnCalcFldVal
LABEL "Calculated Field Value"
SIZE 40 BY 1.14.
DEFINE QUERY BROWSE-1 FOR
Customer SCROLLING.
DEFINE BROWSE BROWSE-1
QUERY BROWSE-1 NO-LOCK DISPLAY
Customer.Name FORMAT "x(30)":U
Customer.Contact FORMAT "x(30)":U
Customer.Phone FORMAT "x(20)":U
Customer.City FORMAT "x(25)":U
CAPS (customer.state) @ vcCalcFld WIDTH 49.6
WITH NO-ROW-MARKERS SEPARATORS SIZE 133 BY 5.48 EXPANDABLE.
DEFINE FRAME DEFAULT-FRAME
BROWSE-1 AT ROW 1.71 COL 3
btnCalcFldVal AT ROW 7.67 COL 43
WITH 1 DOWN NO-BOX KEEP-TAB-ORDER OVERLAY
SIDE-LABELS NO-UNDERLINE THREE-D
AT COL 1 ROW 1
SIZE 136.6 BY 8.05.
IF SESSION:DISPLAY-TYPE = "GUI":U THEN
CREATE WINDOW vhWinHdl ASSIGN
HIDDEN = YES
TITLE = "Calculated Field Window"
HEIGHT = 8
WIDTH = 136.4
MAX-HEIGHT = 16
MAX-WIDTH = 156.8
VIRTUAL-HEIGHT = 16
VIRTUAL-WIDTH = 156.8
RESIZE = yes
SCROLL-BARS = no
STATUS-AREA = no
BGCOLOR = ?
FGCOLOR = ?
KEEP-FRAME-Z-ORDER = yes
THREE-D = yes
MESSAGE-AREA = no
SENSITIVE = yes.
ELSE
ASSIGN vhWinHdl = CURRENT-WINDOW.
IF SESSION:DISPLAY-TYPE = "GUI":U AND VALID-HANDLE(vhWinHdl) THEN
vhWinHdl:HIDDEN = no.
ON END-ERROR OF vhWinHdl OR
ENDKEY OF vhWinHdl ANYWHERE
DO:
IF THIS-PROCEDURE:PERSISTENT THEN RETURN NO-APPLY.
END.
ON WINDOW-CLOSE OF vhWinHdl
DO:
APPLY "CLOSE":U TO THIS-PROCEDURE.
RETURN NO-APPLY.
END.
ON CHOOSE OF btnCalcFldVal IN FRAME DEFAULT-FRAME
DO:
DO viCounter = 1 TO BROWSE BROWSE-1:MAX-DATA-GUESS:
MESSAGE "Calculated field value: " vhBrowseCurCol:SCREEN-VALUE
VIEW-AS ALERT-BOX INFO BUTTONS OK.
BROWSE BROWSE-1:SELECT-NEXT-ROW().
END.
END.
ASSIGN CURRENT-WINDOW = vhWinHdl
THIS-PROCEDURE:CURRENT-WINDOW = vhWinHdl.
ON CLOSE OF THIS-PROCEDURE
RUN disable_UI.
PAUSE 0 BEFORE-HIDE.
MAIN-BLOCK:
DO ON ERROR UNDO MAIN-BLOCK, LEAVE MAIN-BLOCK
ON END-KEY UNDO MAIN-BLOCK, LEAVE MAIN-BLOCK:
RUN enable_UI.
ASSIGN vhBrowseCurCol = BROWSE BROWSE-1:FIRST-COLUMN.
DO WHILE VALID-HANDLE(vhBrowseCurCol):
IF vhBrowseCurCol:NAME = "vcCalcFld":U THEN
LEAVE.
ASSIGN vhBrowseCurCol = vhBrowseCurCol:NEXT-COLUMN.
END.
IF NOT THIS-PROCEDURE:PERSISTENT THEN
WAIT-FOR CLOSE OF THIS-PROCEDURE.
END.
PROCEDURE disable_UI :
IF SESSION:DISPLAY-TYPE = "GUI":U AND VALID-HANDLE(vhWinHdl)
THEN DELETE WIDGET vhWinHdl.
IF THIS-PROCEDURE:PERSISTENT THEN DELETE PROCEDURE THIS-PROCEDURE.
END PROCEDURE.
PROCEDURE enable_UI :
ENABLE BROWSE-1 btnCalcFldVal
WITH FRAME DEFAULT-FRAME IN WINDOW vhWinHdl.
OPEN QUERY BROWSE-1 FOR EACH Customer NO-LOCK INDEXED-REPOSITION.
VIEW vhWinHdl.
END PROCEDURE.