PROCEDURE CheckChanged:
/* Temp buffers to place our before and after records into */
DEFINE BUFFER bBuffer1 FOR table-name.
DEFINE BUFFER bBuffer2 FOR table-name.
IF NOT(AVAILABLE(bBuffer1)) OR NOT(AVAILABLE(bBuffer2)) THEN
RETURN ERROR.
/* Handles for our two records */
DEFINE VARIABLE hBeforeHandle AS HANDLE NO-UNDO.
DEFINE VARIABLE hAfterHandle AS HANDLE NO-UNDO.
/* Output record displays to /dev/null */
IF OPSYS EQ "UNIX":U THEN
OUTPUT STREAM sNull TO /dev/null.
ELSE
OUTPUT STREAM sNull TO NUL.
DISPLAY STREAM sNull bBuffer1 WITH FRAME fBefore WIDTH 255.
DISPLAY STREAM sNull bBuffer2 WITH FRAME fAfter WIDTH 255.
OUTPUT STREAM sNull CLOSE.
ASSIGN
hBeforeHandle = FRAME fBefore:HANDLE /* Frame handle */
hBeforeHandle = hBeforeHandle:FIRST-CHILD /* Field group handle */
hBeforeHandle = hBeforeHandle:FIRST-CHILD /* First field's handle */
hAfterHandle = FRAME fAfter:HANDLE
hAfterHandle = hAfterHandle:FIRST-CHILD
hAfterHandle = hAfterHandle:FIRST-CHILD.
HandleLoop:
REPEAT:
IF hBeforeHandle:NAME NE ? THEN
DO:
/* Did our values change */
IF hBeforeHandle:SCREEN-VALUE NE hAfterHandle:SCREEN-VALUE THEN
DO:
END.
END.
/* Do we have any more fields to check? */
IF hBeforeHandle:NEXT-SIBLING EQ ? THEN
LEAVE HandleLoop.
/* If so, Get the next field */
ASSIGN
hBeforeHandle = hBeforeHandle:NEXT-SIBLING
hAfterHandle = hAfterHandle:NEXT-SIBLING.
END.
END PROCEDURE.