Consultor Eletrônico



Kbase 20602: Accessing Browse Columns in Row-Display Trigger without error 4477
Autor   Progress Software Corporation - Progress
Acesso   Público
Publicação   15/10/2008
Status: Verified

GOAL:

Provide a way to access browse and browse column attributes from inside a ROW-DISPLAY trigger without causing the Error 4477.

GOAL:

How to avoid error 4477:

<attribute> cannot be set within a ROW-DISPLAY trigger for <browse-widget>. (4477)

from a row-display trigger.

FIX:

The following example demonstrates the use of a temp-table to move through the columns of a browse in a row-display trigger to set the FGCOLOR and BGCOLOR attributes. Add the following code sections to the window containing the browse.

/* Definitions Section */
DEFINE TEMP-TABLE ttBrws NO-UNDO
FIELD BrwsHdl AS HANDLE
FIELD BrwsName AS CHARACTER
INDEX BrwsHdl IS PRIMARY UNIQUE BrwsHdl.

DEFINE TEMP-TABLE ttCol NO-UNDO
FIELD BrwsHdl AS HANDLE
FIELD ColHdl AS HANDLE
FIELD ColName AS CHARACTER
FIELD ColWidth AS DECIMAL
FIELD ColFormat AS CHARACTER
FIELD ColDatTyp AS CHARACTER
FIELD ColLabel AS CHARACTER
INDEX BrwsCol IS PRIMARY UNIQUE BrwsHdl ColHdl.

DEFINE VARIABLE iBGColor AS INTEGER NO-UNDO INIT 15.
DEFINE VARIABLE iFGColor AS INTEGER NO-UNDO INIT 1.

/* Main Block */
/* Before Enable_UI */
RUN GetColInfo.

/* Procedure Definitions Section */
PROCEDURE GetColInfo:
DEFINE VARIABLE hBrws AS HANDLE NO-UNDO.
DEFINE VARIABLE hCol AS HANDLE NO-UNDO.

ASSIGN hBrws = BROWSE {&BROWSE-NAME}:HANDLE
hCol = hBrws:FIRST-COLUMN.

CREATE ttBrws.
ASSIGN
ttBrws.BrwsHdl = BROWSE {&BROWSE-NAME}:HANDLE
ttBrws.BrwsName = ttBrws.BrwsHdl:NAME.

DO WHILE VALID-HANDLE(hCol):
IF NOT CAN-FIND(FIRST ttCol WHERE
ttCol.BrwsHdl = hBrws AND
ttCol.ColHdl = hCol) THEN
DO:
CREATE ttCol.
ASSIGN
ttCol.BrwsHdl = hBrws
ttCol.ColHdl = hCol
ttCol.ColName = hCol:NAME
ttCol.ColWidth = hCol:WIDTH
ttCol.ColFormat = hCol:FORMAT
ttCol.ColDatTyp = hCol:DATA-TYPE
ttCol.ColLabel = hCol:LABEL.
END.
hCol = hCol:NEXT-COLUMN.
END.
END PROCEDURE.

PROCEDURE rowDisplay:
DEFINE INPUT PARAMETER phBrwsHdl AS HANDLE NO-UNDO.
DEFINE INPUT PARAMETER pcColList AS CHARACTER NO-UNDO.

FOR EACH ttCol NO-LOCK WHERE ttCol.BrwsHdl = phBrwsHdl:
IF CAN-DO(pcColList,ttCol.ColName) OR pcColList = "*" THEN
ASSIGN
ttCol.ColHdl:BGCOLOR = iBGColor
ttCol.ColHdl:FGCOLOR = iFGColor.
END.

END PROCEDURE.

/* Triggers Section */
ON ROW-DISPLAY OF BROWSE {&BROWSE-NAME}:
RUN rowDisplay ( INPUT SELF, INPUT "*" ).
END.