Consultor Eletrônico



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..