Consultor Eletrônico



Kbase P8373: How to implement an incremental search on a character browse
Autor   Progress Software Corporation - Progress
Acesso   Público
Publicação   3/11/2003
Status: Unverified

GOAL:

How to implement an incremental search on a character browse widget?

FIX:

The following code performs an incremental search on a character browse widget using the ANY-PRINTABLE event trigger of a FILL-IN field widget:

DEFINE VARIABLE FILL-IN-1 AS CHARACTER FORMAT "x(20)"
LABEL "Enter Search String"
VIEW-AS FILL-IN NO-UNDO.

DEFINE QUERY qCustomer FOR Customer SCROLLING.
DEFINE BROWSE bCustomer QUERY qCustomer
DISPLAY
Customer.Cust-Num
Customer.Name
WITH SIZE 50 BY 8.

DEFINE FRAME F-Main
FILL-IN-1 AT 30 SKIP(1)
bCustomer AT 15
WITH CENTERED ROW 5 WIDTH 80.

MAIN-BLOCK:

DO:
OPEN QUERY qCustomer FOR EACH CUSTOMER NO-LOCK.
ENABLE ALL WITH FRAME F-Main.
END.

ON ANY-PRINTABLE OF FILL-IN-1 IN FRAME F-Main DO:
ASSIGN SELF:SCREEN-VALUE IN FRAME F-Main = SELF:SCREEN-VALUE IN FRAME F-Main + CHR(LASTKEY).
RUN REPOSQUERY.
APPLY "CURSOR-RIGHT":U TO FILL-IN-1 IN FRAME F-Main.
RETURN NO-APPLY.
END.

WAIT-FOR "ENDKEY","GO" OF THIS-PROCEDURE.

PROCEDURE REPOSQUERY:
FIND FIRST Customer WHERE Customer.Name BEGINS FILL-IN-1:SCREEN-VALUE IN FRAME F-Main NO-LOCK NO-ERROR.
IF AVAILABLE Customer THEN DO:
REPOSITION qCustomer TO RECID RECID(Customer).
END.
END PROCEDURE.

Note that the above may be also implemented using the VALUE-CHANGED event trigger of the FILL-IN field widget instead of its ANY-PRINTABLE trigger:

ON VALUE-CHANGED OF FILL-IN-1 IN FRAME F-Main DO:
RUN REPOSQUERY.
END.