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


ihParentInstanceinputhandleIn case abort is run from a business class, the instance that initiates abort cannot be stopped.
ocInstancesoutputcharacterComma separated list of instanceId's of the instances within the transaction.
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


BLF
method database.ExitInstance

QadFinancials
method BBankImportLineProcess.SaveAndProcess
method BCInvoiceAPMatching.CreateCInvoiceAPMatchingAllInOneTran
method BCInvoiceAPMatching.CreateCInvoiceAPMatchingOneInOneTran
method BCInvoiceJournalEntry.ApiStdMaintainTTV01
method BDInvoiceJournalEntry.ApiStdMaintainTT
method BDInvoiceMultiCy.UpdateDeductionDetailCy
method BDInvoiceMultiCy.UpdateDeductionDetailCyV01
method BERSProcessor.ERSProcessCreateBatchRequest
method BERSProcessor.ERSProcessFinish
method BERSProcessor.ERSProcessInit
method BGLCalendar.AdditionalUpdates
method BJournalEntryMultiCy.CreateMultiCyPostings
method BSelfBill.ApiCreateInvPrepayPayment
method BSharedSetMerge.MergeInit


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.