project BLF > class Transaction > method AddInstance

Description

Add an instance of a business component to the transaction.

PreCondition

This method is run from InitInstance, and should not be run from anywhere else.


Parameters


iiInstanceNrinputintegerInstance number
icClassinputcharacterClass shortname.
iiCompVersioninputintegerPublic version number of the component.
olFirstoutputlogicalIndicates if this is the first instance to be added to current transaction.
If it is, role-based security check will become mandatory.
If it is not, role-based security check is optional.
oiReturnStatusoutputinteger


Internal usage


BLF
method business.BusinessClassActions
method business.InitInstance


program code (program1/transaction.p)

olFirst = not can-find (first tInstances).

find first tLevels where
           tLevels.tiTransactionLevel = viTransactionLevel no-error.

/* Flag vlTransactionActive will be true when method CommitTransaction
   or AbortTransaction is running.
   At that time, no instances can be added or removed any more. */
if viTransactionLevel <= 0
or vlTransactionActive
or not available tLevels
then do:
    <M-1 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-415':U (icFcMsgNumber), 
           input  '' (icFcExplanation), 
           input  '' (icFcIdentification), 
           input  '' (icFcContext), 
           output viFcReturnSuper (oiReturnStatus)) in Transaction>
    assign oiReturnStatus = -3.
    return.
end.

/* Last added = last committed */
assign viFcCount1 = 0
       viFcCount2 = 0.
for each tInstances:
    if  tInstances.tiPriority > viFcCount1
    and tInstances.tiPriority < 9999
    then assign viFcCount1 = tInstances.tiPriority.
    Assign viFcCount2 = viFcCount2 + 1.
end.

If viFcCount2 + 1 > viFcMaxInstancesInTransaction
Then Do:
    Assign vcMsg = substitute(#T-19'You reached the maximum number of instances (&1) in an active transaction.':255(978292632)T-19# + " "
                 + #T-35'Try to limit the transaction itself, or contact your system administrator, to increase the value of MaximumInstancesInTransaction in the server.xml configuration file.':255(100994751)T-35#,viFcMaxInstancesInTransaction).
    <M-2 run SetMessage
       (input  vcMsg (icMessage), 
        input  '' (icArguments), 
        input  '' (icFieldName), 
        input  '' (icFieldValue), 
        input  'S':U (icType), 
        input  3 (iiSeverity), 
        input  '' (icRowid), 
        input  'BLF-416':U (icFcMsgNumber), 
        input  '' (icFcExplanation), 
        input  '' (icFcIdentification), 
        input  '' (icFcContext), 
        output viFcReturnSuper (oiReturnStatus)) in Transaction>
    assign oiReturnStatus = -3.
    return.
End.

find first tInstances where
           tInstances.tiInstanceNr = iiInstanceNr no-error.
if not available tInstances
then create tInstances.

assign tInstances.tiInstanceNr  = iiInstanceNr
       tInstances.tcInsName     = (if icClass begins "ins/":U
                                   then substring (icClass,10,length(icClass,"CHARACTER":U) - 11,"CHARACTER":U)
                                   else icClass)
       tInstances.tiTransactionCount = tLevels.tiTransactionCount
       tInstances.tiTransactionLevel = viTransactionLevel
       tInstances.tiPriority    = viFcCount1 + 1.