Kbase P1086: 4GL. How to Disable/Enable Columns in a Dynamic Browse
Autor |
  Progress Software Corporation - Progress |
Acesso |
  Público |
Publicação |
  10/15/2008 |
|
Status: Verified
GOAL:
How to Disable or Enable Columns in a Dynamic Browse with 4GL
FIX:
Sample program of how to disable or enable a Column in a Dynamic Browser.
CURRENT-WINDOW:HEIGHT-CHARS = 18.
CURRENT-WINDOW:WIDTH-CHARS = 132.
DEFINE BUTTON bQuit LABEL "&Quit" AUTO-ENDKEY.
DEFINE BUTTON bCreate LABEL "&Create Browse".
DEFINE BUTTON bEnableCity LABEL "Enable City".
DEFINE BUTTON bDisableCity LABEL "Disable City".
DEFINE VARIABLE Browse-Hndl AS WIDGET-HANDLE.
DEFINE VARIABLE bufFieldHandle AS WIDGET-HANDLE.
DEFINE VARIABLE qh AS WIDGET-HANDLE.
DEFINE VARIABLE bh AS WIDGET-HANDLE.
/*Names of the fields to be added and enabled*/
DEFINE VARIABLE cFields AS CHARACTER INITIAL "city,state,country,postalcode" NO-UNDO.
CREATE BUFFER bh FOR TABLE "Customer".
CREATE QUERY qh.
qh:SET-BUFFERS(bh).
DEFINE FRAME F1
skip(13)
bcreate
bQuit
bEnableCity
bDisableCity
WITH SIZE 132 BY 18 THREE-D NO-LABELS.
ON 'choose':U OF bEnableCity
DO:
DEFINE VARIABLE h AS HANDLE NO-UNDO.
h = Browse-Hndl:GET-BROWSE-COLUMN(3).
h:READ-ONLY = false.
h:READ-ONLY.
MESSAGE h:LABEL SKIP h:READ-ONLY
VIEW-AS ALERT-BOX INFO BUTTONS OK.
END.
ON 'choose':U OF bDisableCity
DO:
DEFINE VARIABLE h AS HANDLE NO-UNDO.
h = Browse-Hndl:GET-BROWSE-COLUMN(3).
h:READ-ONLY = TRUE.
h:READ-ONLY.
MESSAGE h:LABEL SKIP h:READ-ONLY
VIEW-AS ALERT-BOX INFO BUTTONS OK.
END.
ON CHOOSE OF bCreate
DO:
DEFINE VARIABLE iFields AS INTEGER NO-UNDO.
DEFINE VARIABLE Field-hdl AS WIDGET-HANDLE NO-UNDO.
CREATE BROWSE Browse-Hndl
ASSIGN
FRAME = FRAME F1:HANDLE
QUERY = qh
TITLE = " "
X = 2
Y = 2
WIDTH = 130
DOWN = 12
VISIBLE = TRUE
SENSITIVE = TRUE
READ-ONLY = NO /*the property READ ONLY 'MUST' be set to false
in an updateable dynamic browse*/
COLUMN-SCROLLING = TRUE
SEPARATORS = YES
TRIGGERS:
ON 'ROW-LEAVE':U PERSISTENT RUN brRowLeave.
END TRIGGERS.
qh:QUERY-PREPARE("for each customer NO-LOCK":U).
qh:QUERY-OPEN.
/*Adding the fields custnum and Name, these fields will be not
enabled*/
Browse-Hndl:ADD-LIKE-COLUMN(bh:BUFFER-FIELD(1),1).
Browse-Hndl:ADD-LIKE-COLUMN(bh:BUFFER-FIELD(3),2).
/*Fields that will be enabled*/
DO iFields = 1 TO NUM-ENTRIES(cFields):
Field-hdl =
Browse-Hndl:ADD-LIKE-COLUMN(bh:BUFFER-FIELD(ENTRY(iFields, cFields))).
field-hdl:READ-ONLY = FALSE. /*Field updateable */
END.
END.
/*Trigger ROW-LEAVE of dynamic browse*/
PROCEDURE brRowLeave.
DEFINE VARIABLE iNumColumns AS INTEGER NO-UNDO.
DEFINE VARIABLE brws-col-hdl AS WIDGET-HANDLE NO-UNDO.
DEFINE VARIABLE buff-field-hdl AS WIDGET-HANDLE NO-UNDO.
IF browse-hndl:CURRENT-ROW-MODIFIED
THEN DO:
REPEAT iNumColumns = 3 TO browse-hndl:NUM-COLUMNS:
brws-col-hdl = browse-hndl:GET-BROWSE-COLUMN(iNumColumns).
/*Get column handle according to column number*/
IF brws-col-hdl:MODIFIED
THEN DO:
buff-field-hdl = brws-col-hdl:BUFFER-FIELD.
DO TRANSACTION:
qh:GET-CURRENT(EXCLUSIVE-LOCK).
IF buff-field-hdl NE ? THEN
buff-field-hdl:BUFFER-VALUE =
brws-col-hdl:SCREEN-VALUE.
bh:BUFFER-RELEASE().
END.
END.
END.
END.
END PROCEDURE.
ON CHOOSE OF bQuit
DO:
APPLY "window-close" TO CURRENT-WINDOW.
END.
ENABLE ALL WITH FRAME F1.
WA.IT-FOR CLOSE OF CURRENT-WINDOW..