AFTER INSERT block
The AFTER INSERT
block of INPUT ARRAY
is
executed when the creation of a new row is validated. In this
block, you can for example implement SQL to insert a new row
in the database table.
The AFTER INSERT
block is executed afterthe AFTER
FIELD
block and before the AFTER ROW
block.
When called in this block, DIALOG.getCurrentRow()
/ arr_curr()
returns the index of the newly-created row.
When the user appends a new row at the end of the list, then moves
UP to another row or validates the dialog, the AFTER INSERT
block
is only executed if at least one field was edited. If no data entry
is detected, the dialog automatically removes the new appended row
and thus does not trigger the AFTER INSERT
block.
When executing a NEXT FIELD
in the AFTER
INSERT
block, the dialog will keep the focus in the
list and stay in the current row. Use this behavior to implement
row input validation and prevent the user from leaving the list or
moving to another row. However, this will not cancel the row
insertion and will not invoke the BEFORE INSERT
/ AFTER
INSERT
triggers again. The only way to keep the focus
in the current row after the row was inserted is to execute a NEXT
FIELD
in the AFTER ROW
block.
In this example, the AFTER INSERT
block inserts
a new row in the database and cancels the operation if the SQL command
fails:
INPUT ARRAY p_items FROM s_items.*
...
AFTER INSERT
WHENEVER ERROR CONTINUE
INSERT INTO items VALUES ( p_items[DIALOG.getCurrentRow("s_items")].* )
WHENEVER ERROR STOP
IF SQLCA.SQLCODE<>0 THEN
ERROR SQLERRMESSAGE
CANCEL INSERT
END IF