dataEvent_record_AfterInsertRow
Function called after inserting row.
Syntax
PUBLIC FUNCTION dataEvent_record_AfterInsertRow( 
   errNo INTEGER, 
   errMsg STRING, 
   uniqueKey record-type)
   RETURNS (INTEGER, STRING)
The function has these parameters:
errNo. This is anSQLCA.SQLCODEerror.errMsg. This is theSQLERRMESSAGEmessage.uniqueKey. This is aRECORDtype defined in the BAM-generated common file (my_entity_common.4gl). It includes the unique key fields from the schema of the database table.
- An integer specifying the 
SQLCA.SQLCODEerror number. Codes are defined as constants in the libdbappSql and libdbappCore files in the libdbapp library. If the code is a negative number, an SQL error has occurred. The errors that are relevant in this function are shown in the table.Table 1. SQLCA.SQLCODE Description Constant Value Success ERROR_SUCCESS0 Failure ERROR_FAILURE-1 Concurrent access failure ERROR_CONCURRENT_ACCESS_FAILURE-2 Concurrent access not found ERROR_CONCURRENT_ACCESS_NOTFOUND-3  - A string with the 
SQLERRMESSAGEerror message. 
Usage
When you select the After Insert Row property for the creation of the event, a function shell is created. Enter your code in the function.
This function is called after inserting a row in the database. Use this function to perform some operation, typically a SQL operation, on another table. For example, you may need to record details about the inserted row of data in a log table.
Example: After Insert Row
This example uses the After Insert Row code event for the Account table in the OfficeStore demo.
In the example a row of data is written to a log table
                with a call to the function writeDataToLog.
writeDataToLog function
                references two parameters:- The record that stores the row of data from the account table.
 - The operation type of the code event function in a reference to the relevant
                            
libdbappUIconstant. 
# AccountForm.4gl
-- import user-defined functions
IMPORT FGL myAccountFunc 
PUBLIC FUNCTION dataEvent_recAccount_AfterInsertRow(errNo INTEGER, errMsg STRING, 
                uniqueKey recAccount_br_uk_type)
    RETURNS (INTEGER, STRING)
    DEFINE log RECORD LIKE log.*
    DEFINE l_data RECORD LIKE account.*  
    
    DISPLAY "dataEvent_recAccount_AfterInsertRow (Row scope) is raised"
    
    SELECT * INTO l_data.* FROM account WHERE @userid = uniqueKey.account_userid
    CALL myAccountFunc.writeDataToLog(l_data,libdbappUI.C_ACTION_INSERT) RETURNING errNo
    IF errNo = libdbappCore.ERROR_FAILURE THEN
       LET errMsg = " - AfterInsertRow failed to insert log " 
    END IF
    DISPLAY "dataEvent_recAccount_AfterInsertRow (Row scope) is exited"
    RETURN errNo, errMsg
END FUNCTION
writeDataToLog
In this section there is an example of the function writeDataToLog
                called to write data to a log table. 
- an "id" field that is auto incremented
 - a "date" timestamp field to record the date and time of the operation
 - a "type" field to record the operation (Update/Insert/Delete)
 - a "data" field to record a copy of all field values from the account table
 
All functions that you would reuse across forms and
                    applications would reside in a module you create. To use these functions in your
                    project, you would import your module into the entity module (for example,
                        AccountForm.4gl) using the IMPORT FGL
                    statement.
# MyAccountFunc.4gl
IMPORT FGL libdbappCore
FUNCTION writeDataToLog(dataRec RECORD LIKE account.*, opType INTEGER) 
  RETURNS (INTEGER)
  
  DEFINE errNo INTEGER
  DEFINE recLog RECORD LIKE log.*
  DEFINE t TEXT   
  
  LOCATE t IN MEMORY  
  LET recLog.id = NULL
  LET recLog.date = CURRENT  
  LET recLog.type = opType
  LET t = SFMT("id = %1 email = %2 firstname = %3 lastname = %4  acstatus = %5  addr1 = %6  
               addr2= %7 city = %8  state = %9 zip = %10 country = %11 phone = %12",
               dataRec.userid, dataRec.email, dataRec.firstname, dataRec.lastname,
               dataRec.acstatus, dataRec.addr1, dataRec.addr2, dataRec.city, dataRec.state,
               dataRec.zip, dataRec.country, dataRec.phone)  
  LET recLog.data = t
  TRY
     INSERT INTO log VALUES (recLog.*)
  CATCH
     DISPLAY "SQL ERROR: ", sqlca.sqlcode
     LET errNo = libdbappCore.ERROR_FAILURE
  END TRY
  RETURN errNo
 
END FUNCTION