Kbase 19152: 4GL. Procedure to Implement Column-Search on Dynamic Browse
Autor |
  Progress Software Corporation - Progress |
Acesso |
  Público |
Publicação |
  15/10/2008 |
|
Status: Verified
GOAL:
Two methods of implementing incremental column-searching for a Dynamic Browse Widget.
FACT(s) (Environment):
Progress 9.1x
FIX:
The Dynamic Browse Widget functionality is available in Progress version 9.1A and higher.
Run the sample procedure below against the Sports2000 Database and select either:
1) "Open Query" to re-open the query after each keystroke and limit the number of records in the query's resultSet.
OR
2) "Reposition Query" to simply reposition the cursor to the first matching record in the browse.
/* sample procedure */
DEFINE VARIABLE quer1 AS HANDLE NO-UNDO.
DEFINE VARIABLE quer2 AS HANDLE NO-UNDO.
DEFINE VARIABLE buff1 AS HANDLE NO-UNDO.
DEFINE VARIABLE buff2 AS HANDLE NO-UNDO.
DEFINE VARIABLE brws1 AS HANDLE NO-UNDO.
DEFINE VARIABLE hfrm1 AS HANDLE NO-UNDO.
DEFINE VARIABLE srcString AS CHARACTER NO-UNDO.
DEFINE VARIABLE byClause AS CHARACTER NO-UNDO.
DEFINE VARIABLE bName AS CHARACTER NO-UNDO INITIAL "Customer".
DEFINE VARIABLE lKey AS CHARACTER NO-UNDO.
DEFINE VARIABLE bField AS CHARACTER NO-UNDO INITIAL "Customer.Name".
DEFINE VARIABLE srcMode AS INTEGER VIEW-AS RADIO-SET
RADIO-BUTTONS "Re-Open Query", 1, "Reposition query", 2
HORIZONTAL LABEL " Select Search Mode" NO-UNDO.
CREATE WIDGET-POOL "myPool" NO-ERROR.
DEFINE FRAME xx srcMode WITH CENTERED ROW 2.
ON VALUE-CHANGED OF srcMode IN FRAME xx DO:
ASSIGN srcString = "FOR EACH " + bName + " NO-LOCK "
byClause = "BY " + bField.
ASSIGN lKey = "" NO-ERROR.
RUN openQuery ( INPUT quer1, INPUT srcString + byClause).
APPLY "ENTRY":U TO brws1.
brws1:SELECT-FOCUSED-ROW() NO-ERROR.
END.
MAIN-BLOCK:
DO ON ERROR UNDO, RETRY:
ON CLOSE OF THIS-PROCEDURE DO:
IF NOT THIS-PROCEDURE:PERSISTENT THEN
DELETE WIDGET-POOL "myPool" NO-ERROR.
END.
CREATE FRAME hfrm1 IN WIDGET-POOL "myPool" NO-ERROR
ASSIGN X = 2
Y = 100
CENTERED = TRUE
WIDTH-CHARS = 63.25
HEIGHT-CHARS = 9.25.
CREATE QUERY quer1 IN WIDGET-POOL "myPool" NO-ERROR.
CREATE QUERY quer2 IN WIDGET-POOL "myPool" NO-ERROR.
CREATE BUFFER buff1 FOR TABLE bName
IN WIDGET-POOL "myPool" NO-ERROR.
CREATE BUFFER buff2 FOR TABLE bName
IN WIDGET-POOL "myPool" NO-ERROR.
quer1:SET-BUFFERS(buff1) NO-ERROR.
quer2:SET-BUFFERS(buff2) NO-ERROR.
ASSIGN srcString = "FOR EACH " + bName + " NO-LOCK "
byClause = "BY " + bField NO-ERROR.
CREATE BROWSE brws1 IN WIDGET-POOL "myPool" NO-ERROR
ASSIGN X = 2
Y = 2
WIDTH = 62.25
DOWN = 10
FRAME = hfrm1
QUERY = quer1
READ-ONLY = TRUE
SENSITIVE = TRUE
TRIGGERS:
ON ANY-PRINTABLE DO:
ASSIGN lKey = lKey + CHR(LASTKEY) NO-ERROR.
RUN reOpenQuery ( INPUT lKey ).
RETURN NO-APPLY.
END.
ON BACKSPACE DO:
ASSIGN lKey = SUBSTRING(lKey,1,LENGTH(lKey) - 1) NO-ERROR.
RUN reOpenQuery ( INPUT lKey ).
RETURN NO-APPLY.
END.
END TRIGGERS.
brws1:ADD-LIKE-COLUMN("Customer.Name") NO-ERROR.
brws1:ADD-LIKE-COLUMN("Customer.CreditLimit") NO-ERROR.
brws1:ADD-LIKE-COLUMN("Customer.Balance") NO-ERROR.
RUN openQuery ( INPUT quer1, INPUT srcString + byClause ).
ENABLE ALL WITH FRAME xx.
VIEW hfrm1.
APPLY "ENTRY" TO brws1.
brws1:SELECT-FOCUSED-ROW() NO-ERROR.
END.
WAIT-FOR CLOSE OF THIS-PROCEDURE.
PROCEDURE openQuery:
DEFINE INPUT PARAMETER qHand AS HANDLE NO-UNDO.
DEFINE INPUT PARAMETER srcString AS CHARACTER NO-UNDO.
qHand:QUERY-PREPARE(srcString) NO-ERROR.
qHand:QUERY-OPEN NO-ERROR.
END PROCEDURE.
PROCEDURE repositionQuery:
DEFINE INPUT PARAMETER rowHolder AS ROWID NO-UNDO.
quer1:REPOSITION-TO-ROWID(rowHolder) NO-ERROR.
END PROCEDURE.
PROCEDURE reOpenQuery:
DEFINE INPUT PARAMETER lKey AS CHARACTER NO-UNDO.
DEFINE VARIABLE rowHolder AS ROWID NO-UNDO.
IF srcMode:SCREEN-VALUE IN FRAME xx = "1":U THEN DO:
ASSIGN srcString = "FOR EACH " + bName + " WHERE " + bField +
" BEGINS ~"" +
lKey .+ "~" " + byClause NO-ERROR.
RUN openQuery ( INPUT quer1, INPUT srcString).
END.
ELSE IF srcMode:SCREEN-VALUE IN FRAME xx = "2":U THEN DO:
ASSIGN srcString = "FOR EACH " + bName + " WHERE " + bField +
"BEGINS ~"" +
lKey + "~" " + byClause NO-ERROR.
RUN openQuery ( INPUT quer2, INPUT srcString).
quer2:GET-FIRST NO-ERROR.
ASSIGN rowHolder = buff2:ROWID NO-ERROR.
RUN repositionQuery ( INPUT rowHolder ).
END.
END PROCEDURE.
.