Kbase 18961: ADM2. Procedure to implement Incremental Search on Browse Widget
Autor |
  Progress Software Corporation - Progress |
Acesso |
  Público |
Publicação |
  16/10/2008 |
|
Status: Unverified
GOAL:
How to implement an incremental search on a browse widget.
FACT(s) (Environment):
Progress 7.X
Progress 8.X
Progress 9.X
ADM2
FIX:
A radio-set allows shifting the search to be either numeric (customer number), or alphabetic (customer name).
DEFINE VARIABLE intVar AS INTEGER NO-UNDO.
DEFINE VARIABLE RADIO-SET-1 AS INTEGER
LABEL "Sort By/Search By"
VIEW-AS RADIO-SET VERTICAL
RADIO-BUTTONS "Customer Number",1,"Customer Name", 2 NO-UNDO.
DEFINE BUFFER Buff_Cust FOR CUSTOMER.
DEFINE VARIABLE FILL-IN-1 AS CHARACTER FORMAT "x(20)"
LABEL "Enter Search String"
VIEW-AS FILL-IN NO-UNDO.
DEFINE QUERY q_cust FOR Customer SCROLLING.
DEFINE BROWSE b_cust QUERY q_cust
DISPLAY Customer.Cust-Num
Customer.Name
WITH SIZE 50 BY 8.
DEFINE FRAME F-Main RADIO-SET-1 AT 1
FILL-IN-1 AT 30 SKIP(1)
b_cust AT 15
WITH CENTERED ROW 5 WIDTH 80.
MAIN-BLOCK:
DO:
ASSIGN SESSION:DATA-ENTRY-RETURN = FALSE.
OPEN QUERY q_cust FOR EACH CUSTOMER NO-LOCK.
ENABLE ALL WITH FRAME F-Main.
STATUS INPUT "Searching by Customer Number".
END.
ON VALUE-CHANGED OF RADIO-SET-1 IN FRAME F-Main DO:
CASE RADIO-SET-1:SCREEN-VALUE.
WHEN "1" THEN DO:
STATUS INPUT "Searching by Customer Number".
OPEN QUERY q_cust FOR EACH Customer
NO-LOCK BY Customer.Cust-Num.
END.
WHEN "2" THEN DO:
STATUS INPUT "Searching by Customer Name".
OPEN QUERY q_cust FOR EACH Customer
NO-LOCK BY Customer.Name.
END.
END.
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.
ON RETURN OF FILL-IN-1 IN FRAME F-Main DO:
RUN REPOSQUERY.
APPLY "ENTRY" TO FILL-IN-1 IN FRAME F-Main.
DO intVar = 1 TO LENGTH(FILL-IN-1:SCREEN-VALUE IN FRAME F-Main):
APPLY "CURSOR-RIGHT" TO FILL-IN-1 IN FRAME F-Main.
END.
END.
WAIT-FOR "ENDKEY","GO" OF THIS-PROCEDURE.
PROCEDURE REPOSQUERY:
IF RADIO-SET-1:SCREEN-VALUE IN FRAME F-Main = "2" THEN DO:
FIND FIRST Buff_Cust WHERE Buff_Cust.Name BEGINS
FILL-IN-1:SCREEN-VALUE IN FRAME F-Main
NO-LOCK NO-ERROR.
IF AVAILABLE Buff_Cust THEN DO:
REPOSITION q_cust TO RECID RECID(Buff_Cust).
END.
END.
IF RADIO-SET-1:SCREEN-VALUE IN FRAME F-Main = "1" THEN DO:
FIND FIRST Buff_Cust WHERE Buff_Cust.Cust-Num
>= INTEGER(FILL-IN-1:SCREEN-VALUE IN FRAME F-Main)
NO-LOCK NO-ERROR.
IF AVAILABLE Buff_Cust THEN DO:
REPOSITION q_cust TO RECID RECID(Buff_Cust).
END.
END.
END.