/*
Test case for Kladkul
*/
DEF VAR tt AS HANDLE NO-UNDO.
DEF VAR btt AS HANDLE NO-UNDO.
DEF VAR ttquery AS HANDLE NO-UNDO.
DEF VAR ctable AS CHAR NO-UNDO.
DEF VAR btable AS HANDLE NO-UNDO.
DEF VAR rrow AS ROWID NO-UNDO. /* optional */
/*
Creating temp-table
*/
ctable = "customer".
CREATE BUFFER btable FOR TABLE ctable.
CREATE TEMP-TABLE tt.
tt:CREATE-LIKE(btable).
tt:ADD-NEW-FIELD("Rowid","rowid"). /* this is optional, but comes in handy in some cases */
tt:TEMP-TABLE-PREPARE("temp").
btt = tt:DEFAULT-BUFFER-HANDLE.
/*
Populating temp-table
*/
CREATE QUERY ttquery.
ttquery:SET-BUFFERS(btable).
ttquery:QUERY-PREPARE(SUBSTITUTE("for each &1",ctable)).
ttquery:QUERY-OPEN.
ttquery:GET-FIRST(NO-LOCK).
DO WHILE NOT ttquery:QUERY-OFF-END:
btt:BUFFER-CREATE.
btt:BUFFER-COPY(btable).
btt:BUFFER-FIELD("rowid"):BUFFER-VALUE = btable:ROWID. /* again optional, you create a unique handle to the original table buffer */
ttquery:GET-NEXT(NO-LOCK).
END.
ttquery:QUERY-CLOSE.
DELETE OBJECT ttquery.
/*
Now you have a populated temp-table for the table customer.
You can access the data in the tt with a new query or just do a dynamic find.
Query:
*/
CREATE QUERY ttquery.
ttquery:SET-BUFFERS(btt).
ttquery:QUERY-PREPARE("for each temp").
ttquery:QUERY-OPEN.
ttquery:GET-FIRST(NO-LOCK).
DO WHILE NOT ttquery:QUERY-OFF-END:
IF btt:BUFFER-FIELD("Name"):BUFFER-VALUE MATCHES "*Kl*" THEN
MESSAGE "Name: " + btt:BUFFER-FIELD("Name"):BUFFER-VALUE SKIP
"Customer: " + btt:BUFFER-FIELD("Custnum"):BUFFER-VALUE VIEW-AS ALERT-BOX.
ttquery:GET-NEXT(NO-LOCK).
END.
/*
If you're not going to use the query anymore be sure to clean it up.
*/
ttquery:QUERY-CLOSE.
DELETE OBJECT ttquery.
/*
You can of course also do a find on the table instead of querying, for example if you're sure that the find will return one result:
*/
btt:FIND-UNIQUE(SUBSTITUTE("where name matches &1",QUOTER("*Kl*"))) NO-ERROR.
IF btt:AVAILABLE THEN MESSAGE "Name: " + btt:BUFFER-FIELD("Name"):BUFFER-VALUE SKIP
"Customer: " + btt:BUFFER-FIELD("Custnum"):BUFFER-VALUE VIEW-AS ALERT-BOX.
IF NOT btt:AVAILABLE THEN
DO:
IF btt:AMBIGUOUS THEN MESSAGE "More than one record found with the given unique constraint" VIEW-AS ALERT-BOX ERROR.
ELSE MESSAGE "Record not found!" VIEW-AS ALERT-BOX ERROR.
RETURN.
END.
/*
Optional: you can find the original buffer-handle by using a find on the rowid
*/
IF btt:AVAILABLE THEN
DO:
btt:BUFFER-FIELD("Name"):BUFFER-VALUE = "Progress test case".
rrow = btt:BUFFER-FIELD("rowid"):BUFFER-VALUE.
btable:FIND-BY-ROWID(rrow).
MESSAGE "New Name :" + btt:BUFFER-FIELD("Name"):BUFFER-VALUE SKIP
"Original Name: " + btable:BUFFER-FIELD("Name"):BUFFER-VALUE SKIP
"Are you sure you want to accept the changes?" VIEW-AS ALERT-BOX QUESTION UPDATE lOk AS LOGICAL.
/* BE AWARE!!!! It's just a testcase but with the following you actually make changes to the original table!!
IF lOk THEN
DO TRANSACTION:
btable:DISABLE-LOAD-TRIGGERS(YES).
btable:BUFFER-FIELD("Name"):BUFFER-VALUE = btt:BUFFER-FIELD("Name"):BUFFER-VALUE.
END.
*/
END.