1 Overview
Clients invoke a catalogued transaction by sending the code of the transaction trx_code and the type of transaction ( trx_type ): Insert, Update, Delete or Execute along with the data required to perform the transaction. Note that the table is not sent by the client, this prevents SOAP clients from executing transacctions to arbitrary tables on the system.
wic_sqlc_trx_ins_head | |
---|---|
Label | Description |
Code | |
Type | Type of transaction. Valid types are Insert, Delete, Update, Execute
|
Table | The table on which the transaction will be performed |
Columns | |
Pre-XSQL Script | An XSQL-Script invoked before performing the transaction |
Post-XSQL Script | An XSQL-Script invoked after performing the transaction |
Validation statement | SQL sentence that when informed must return at least one row and be non zero, otherwise the transaction will not be performed. It is possible to reference field of the transaction using the ${field} notation. For instance: SELECT COUNT(*) FROM gcrm_consulh WHERE tercer = ${USER} AND rowid = ${rowid} AND estado == 'O' |
Information | |
Created by |
|
Date created |
|
Modified by |
|
Date updated |
|
2 Validation query
The field trx_sec
contains an SQL query that is executed before the transaction and allows to enforce further security to the transaction.
If the query does not return rows or returns a single row with a 0, then the transaction is not allowed to proceed. The query statement can contain references
to the transcation data using the notation ${fieldName}
.
3 Pre processing
Before the transction is performed, an xsql-script can be executed by informing the field before_xsql_code
. The script gets as arguments:
- The name of the table of the transaction
- A map with the values that will be used for the transaction. This map can be edited to prevent or add column values involved in the transaction
The XSQL-Script is executed in the same database SQL transaction, therefore if a rollback occurs inside the xsql script execution, the whole transaction will be rolled back. This can be used to implement complex validations.
<xsql-script name='fr_cajcobr_prv_insert'> <args> <arg name='p_table' type='string' /> <arg name='p_map' type='map' /> </args> <body> <set name='m_usercode'><system.user.getCode /></set> <select prefix='m_'> <columns> liqid </columns> <from table='gret_caja' /> <where> numtpv = <m_usercode /> AND revtpv = 0 </where> </select> <map.put name='p_map'><string>liqid</string><m_liqid/></map.put> <map.put name='p_map'><string>cantid</string>0</map.put> <map.put name='p_map'><string>impteo</string>0</map.put> <map.put name='p_map'><string>cobid</string>0</map.put> </body> </xsql-script>
4 Post processing
After the transaction is performed an XSQL-Script
can be excuted if the field xsql_code
is informed. The script receives as arguments:
- The name of the table of the transaction
- The rowid of the row affected by the transaction
- The type of transaction : Insert, Delete, Update, Execute
The XSQL-Script is executed in the same database SQL transaction, therefore if a rollback occurs inside the xsql script execution, the whole transaction will be rolled back
When trx_type
is of type Execute, then post processing xsql-script is not executed, only before_xsql_code script is executed
<xsql-script name='fr_parte_mail2sms'> <args> <arg name='p_table' type='string' /> <arg name='p_rowid' type='integer' /> <arg name='p_action' type='string' /> </args> <body> <select> <columns> par_id p_parid </columns> <from table='gaut_parte'> </from> <where> rowid = <p_rowid /> </where> </select> <if> <expr> <not> <select> <columns>COUNT(*)</columns> <from table='gaut_ordrepa'> <join table='gaut_parte'> <on>gaut_ordrepa.vped_docser = gaut_parte.vped_docser</on> </join> </from> <where> gaut_parte.par_id = <p_parid /> </where> </select> </not> </expr> <then> <return /> </then> </if> </body> </xsql-script>