project BLF > class Transaction > method InitInstance

Description

This method can be extended with code to execute when an instance of a business class is started.

PreCondition

This method is executed when a new instance of the business class is started, or when a draft instance is opened (in that case a new instance is started which is a copy of the draft instance).


Parameters


oiReturnStatusoutputintegerReturn status of the method.


Internal usage


unused


program code (program1/transaction.p)

/* ================================================================= */
/* When opening a draft transaction instance, open every instance of */
/* business classes in the transaction and update                    */
/* session + transaction instance ID inside it.                      */
/* When starting a new instance, this table will be empty,           */
/* and nothing will be done.                                         */
/* ================================================================= */

<M-5 run StartCacher
   (output vhFcComponent (ohCacher), 
    output viFcReturnSuper (oiReturnStatus)) in Transaction>
<M-4 run GetIntegerValueFromSession
   (input  viSessionID (iiSessionId), 
    input  'MaxInstancesInTransaction':U (icDataItemName), 
    output viFcMaxInstancesInTransaction (oiValue), 
    output viFcReturnSuper (oiReturnStatus)) in Cacher> 
<M-42 run GetIntegerValueFromSession
   (input  viSessionID (iiSessionId), 
    input  'TimeOffset' (icDataItemName), 
    output viTimeOffset (oiValue), 
    output viFcReturnSuper (oiReturnStatus)) in Cacher>
session:timezone = viTimeOffset.

for each tInstances by tInstances.tiInstanceNr descending on error undo, throw:

    assign vhDatabaseInst   = ?
           viDatabaseId     = tInstances.tiInstanceNr
           vcClassShortName = entry(1, tInstances.tcInsName).

    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  'OPEN':U (icAction), 
        input  no (ilSubtransaction), 
        input-output tInstances.tiOpenCount (biClassOpenCount), 
        input-output vhDatabaseInst (bhClassInstanceHandle), 
        input-output viDatabaseId (biClassInstanceId), 
        input  '' (icDraftReference), 
        input  vcUserDefinedContext (icUserDefinedContext), 
        output viFcReturnSuper (oiReturnStatus)) in Transaction>                               
    if viFcReturnSuper <> 0
    then oiReturnStatus = viFcReturnSuper.
    if viFcReturnSuper < 0
    then return.

    <M-2 run SetPublicData (input  'viTransactionID':U (icDataList), 
                        input  string (viFcCurrentInstanceId) (icValueList), 
                        output viFcReturnSuper (oiReturnStatus)) in database>

    <M-3 run BusinessClassActions
       (input  vcClassShortName (icClassShortname), 
        input  'CLOSE':U (icAction), 
        input  no (ilSubtransaction), 
        input-output tInstances.tiOpenCount (biClassOpenCount), 
        input-output vhDatabaseInst (bhClassInstanceHandle), 
        input-output viDatabaseId (biClassInstanceId), 
        input  '' (icDraftReference), 
        input  vcUserDefinedContext (icUserDefinedContext), 
        output viFcReturnSuper (oiReturnStatus)) in Transaction>                        
    if viFcReturnSuper <> 0
    then oiReturnStatus = viFcReturnSuper.
    if viFcReturnSuper < 0
    then return.

    assign tInstances.tiInstanceNr = vidatabaseID.
end.