Consultor Eletrônico



Kbase 19096: 4GL/ABL: How to write a START-SEARCH Trigger for a Dynamic Browse?
Autor   Progress Software Corporation - Progress
Acesso   Público
Publicação   12/5/2008
Status: Verified

GOAL:

4GL/ABL: How to write a START-SEARCH Trigger for a Dynamic Browse?

GOAL:

How to sort the browse based on the selected column in ASCENDING or DESCENDING order?

FACT(s) (Environment):

Windows
Progress 9.X
OpenEdge 10.x

FIX:

The following 4GL/ABL procedure demonstrates how to use of the START-SEARCH trigger of a dynamic browse widget to sort by the selected browse column and how to make the eord order ASCENDING or DESCENDING:
/* Browse Handle */
DEFINE VARIABLE brHandle AS HANDLE NO-UNDO.
/* Query Handle */
DEFINE VARIABLE qrHandle AS HANDLE NO-UNDO.
/* Buffer Handle */
DEFINE VARIABLE buHandle AS HANDLE NO-UNDO.
/* Browse Column Handle */
DEFINE VARIABLE bcHandle AS HANDLE NO-UNDO.
/* Current Buffer Handle */
DEFINE VARIABLE cbHandle AS HANDLE NO-UNDO.
/* Previous Buffer Handle */
DEFINE VARIABLE pbHandle AS HANDLE NO-UNDO.
/* Counter */
DEFINE VARIABLE intVar AS INTEGER NO-UNDO.
/* Query String */
DEFINE VARIABLE qrString AS CHARACTER FORMAT "x(256)" NO-UNDO.
/* Name of the last sorted column */
DEFINE VARIABLE lcName AS CHARACTER NO-UNDO.
/* Direction of the sort */
DEFINE VARIABLE ascDesc AS CHARACTER NO-UNDO.
DEFINE FRAME xx WITH WIDTH 70 TITLE "Dynamic Browse Widget Demo"
11 DOWN THREE-D.
ASSIGN CURRENT-WINDOW:WIDTH = 71
CURRENT-WINDOW:HEIGHT = 12.
CREATE WIDGET-POOL "dynBuff" NO-ERROR.
CREATE BUFFER buHandle FOR TABLE "Customer" IN WIDGET-POOL "dynBuff".
CREATE QUERY qrHandle IN WIDGET-POOL "dynBuff".
ASSIGN qrString = "FOR EACH Customer".
qrHandle:SET-BUFFERS(buHandle).
qrHandle:QUERY-PREPARE(qrString).
qrHandle:QUERY-OPEN.
CREATE BROWSE brHandle IN WIDGET-POOL "dynBuff"
ASSIGN X = 15
Y = 20
WIDTH = 62
DOWN = 10
QUERY = qrHandle
FRAME = FRAME xx:HANDLE
READ-ONLY = FALSE
SENSITIVE = TRUE
FONT = 6
TRIGGERS:
ON START-SEARCH DO:
/* Clear the previous Query String and get the current
column handle */
ASSIGN qrString = ""
bcHandle = brHandle:CURRENT-COLUMN.
/* Decides whether to sort Ascending or Descending */
IF ascDesc = " DESCENDING " THEN
ASSIGN ascDesc = "".
ELSE
ASSIGN ascDesc = " DESCENDING ".
ASSIGN lcName = bcHandle:NAME.
/* In case the number of buffers has changed, this generic
code will always account for multiple buffers */
DO intVar = 1 TO qrHandle:NUM-BUFFERS:
cbHandle = qrHandle:GET-BUFFER-HANDLE(intVar).
IF intVar > 1 THEN
pbHandle = qrHandle:GET-BUFFER-HANDLE(intVar - 1).
IF qrString = "" THEN
ASSIGN qrString = "FOR EACH " + cbHandle:NAME.
ELSE
&nbs.p; ASSIGN qrString = qrString + ", EACH " + cbHandle:NAME +
" OF " + pbHandle:NAME.
END.
ASSIGN qrString = qrString + " NO-LOCK BY " + bcHandle:NAME +
ascDesc.
qrHandle:QUERY-PREPARE(qrString).
qrHandle:QUERY-OPEN.
APPLY "END-SEARCH" TO SELF.
END.
END TRIGGERS.
brHandle:ADD-LIKE-COLUMN("Customer.CustNum").
brHandle:ADD-LIKE-COLUMN("Customer.Name").
brHandle:ADD-LIKE-COLUMN("Customer.SalesRep").
VIEW FRAME xx.
WAIT-FOR CLOSE OF THIS-PROCEDURE.
DELETE WIDGET-POOL "dynBuff" NO-ERROR..