project BLF > class Transaction > method AbortTransaction
Description
Abort current transaction level:
- stop all instances added in current level
- remove current level from the transaction
Parameters
ihParentInstance | input | handle | In case abort is run from a business class, the instance that initiates abort cannot be stopped. |
ocInstances | output | character | Comma separated list of instanceId's of the instances within the transaction. |
oiReturnStatus | output | integer | Return status of the method. |
Internal usage
BLF
QadFinancials
program code (program1/transaction.p)
find first tLevels where
tLevels.tiTransactionLevel = viTransactionLevel no-error.
if viTransactionLevel <= 0
or vlTransactionActive
or not available tLevels
then do:
<M-2 run SetMessage
(input 'No transaction active.':U (icMessage),
input '' (icArguments),
input '' (icFieldName),
input '' (icFieldValue),
input 'S':U (icType),
input 3 (iiSeverity),
input '' (icRowid),
input 'BLF-414':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in Transaction>
assign oiReturnStatus = -3.
return.
end.
assign vlTransactionActive = yes
ocInstances = ''.
if ihParentInstance <> ?
then run GetInstanceIdInPool (input ihParentInstance, output viParent).
/* Abort current transaction level + sublevels */
for each tInstances where
tInstances.tiTransactionCount >= tLevels.tiTransactionCount and
tInstances.tiInstanceNr <> viParent on error undo, throw:
assign vhDatabaseInst = tInstances.thInsHandle
viDatabaseId = tInstances.tiInstanceNr
vidatabaseOC = tInstances.tiOpenCount
vlTransactionOpen = yes
vcClassShortName = entry(1, tInstances.tcInsName)
ocInstances = ocInstances + (if ocInstances = '' then '' else ',') + string(tInstances.tiInstanceNr).
if num-entries(vcClassShortName, "[") = 1
then assign vcUserDefinedContext = "".
else assign vcUserDefinedContext = entry(1, entry(2, vcClassShortName, "["), "]")
vcClassShortName = entry(1, vcClassShortName, "[").
<M-1 run BusinessClassActions
(input vcClassShortName (icClassShortname),
input 'STOP':U (icAction),
input no (ilSubtransaction),
input-output vidatabaseOC (biClassOpenCount),
input-output vhdatabaseInst (bhClassInstanceHandle),
input-output vidatabaseId (biClassInstanceId),
input '' (icDraftReference),
input vcUserDefinedContext (icUserDefinedContext),
output viLocalReturn (oiReturnStatus)) in Transaction>
assign vlTransactionOpen = no.
if viLocalReturn <> 0
then assign oiReturnStatus = viLocalReturn.
if ihParentInstance <> ?
then run gipr_ResetInstance in ihParentInstance
(input vcClassShortName,
input tInstances.tiInstanceNr).
delete tInstances.
end.
assign viTransactionLevel = viTransactionLevel - 1
vlTransactionActive = no.