project BLF > class Business Component > method ExitInstance

Description

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

Standard functionality in this method is
- Clean up instance data in the fcInstance table.
- Create or update a draft instance if applicable.

PreCondition

This method is executed when :
- A business instance is stopped (release object + delete instance data)
(icDraftReference = "" + viCurrentDraftInstanceId = 0)
- A business instance is saved as a draft (release object + create draft)
(icDraftReference <> "")
- A draft instance is stopped (release object, delete copy of draft, release original draft)
(icDraftReference = "" + viCurrentDraftInstanceId <> 0)

This method is NOT run when a business instance is only closed (release object + keep instance data).


Parameters


icDraftReferenceinputcharacterDescription for the draft instance.
This parameter will have a value when creating a draft instance.
icDraftFormNameinputcharacterThis parameter will have a value when creating a draft instance.
ilDraftIsSharedinputlogicalThis parameter will have a value when creating a draft instance.
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


unused


program code (program1/business.p)

if oiReturnStatus = 0
then oiReturnStatus = -98.

publish "Logging.DeleteInstance" (vcFcComponentName, viFcCurrentInstanceId).

if icDraftReference = ""
then do:
    /* ================================================================= */
    /* Delete normal instance data                                       */
    /* ================================================================= */
    if vlInstanceDataIsLoaded
    then do:
        <M-1 run StartPersistence (output vhFcComponent (ohPersistence), 
                           output viFcReturnSuper (oiReturnStatus)) in business>
        if viFcReturnSuper <> 0
        then oiReturnStatus = viFcReturnSuper.
        if viFcReturnSuper < 0
        then return.

        <M-14 run DeleteInstance
           (input  viFcCurrentInstanceId (iiInstanceID), 
            input  {&TARGETPROCEDURE} (ihClass), 
            input  vcFcComponentName (icClassName), 
            output viFcReturnSuper (oiReturnStatus)) in persistence>
        if viFcReturnSuper <> 0
        then oiReturnStatus = viFcReturnSuper.
        if viFcReturnSuper < 0
        then return.
    end.

    /* ================================================================= */
    /* When a draft instance was opened, release the draft instance      */
    /* ================================================================= */
    if viCurrentDraftInstanceId <> 0
    then do:
        <M-4 run StartPersistence (output vhFcComponent (ohPersistence), 
                           output viFcReturnSuper (oiReturnStatus)) in business>
        if viFcReturnSuper <> 0
        then oiReturnStatus = viFcReturnSuper.
        if viFcReturnSuper < 0
        then return.
        <M-10 run WriteDirect
           (input  'fcDraftInstance':U (icTableName), 
            input  'for each fcDraftInstance where fcDraftInstance.DraftInstance_ID = ':U + string (viCurrentDraftInstanceId) (icPrepare), 
            input  'IsInUse':U (icFieldList), 
            input  'l':U (icFieldListDataTypes), 
            input  'false':U (icAbsolute), 
            input  '' (icIncremental), 
            input  {&TARGETPROCEDURE} (ihClass), 
            input  vcUserLogin (icUserLogin), 
            output viFcReturnSuper (oiReturnStatus)) in persistence>
        if viFcReturnSuper <> 0
        then oiReturnStatus = viFcReturnSuper.
        if viFcReturnSuper < 0
        then return.
    end.
end.
else do:
    if viTransactionID <> 0
    then do:
        assign vlTransaction = yes
               viFcCount1    = 1.
        do while program-name(viFcCount1) <> ?:
            if program-name(viFcCount1) = "ExitInstance program/transaction.p":U
            then vlTransaction = no.
            viFcCount1 = viFcCount1 + 1.
        end.
    end.

    if vlTransaction
    then do:
        <M-6 run SetMessage
          (input  #T-12'Only single instances (not part of a transaction) can be saved as a draft ($1).':255(6)T-12# (icMessage), 
           input  vcFcComponentName (icArguments), 
           input  '' (icFieldName), 
           input  '' (icFieldValue), 
           input  'S':U (icType), 
           input  3 (iiSeverity), 
           input  '' (icRowid), 
           input  'BLF-258':U (icFcMsgNumber), 
           input  '' (icFcExplanation), 
           input  '' (icFcIdentification), 
           input  '' (icFcContext), 
           output viFcReturnSuper (oiReturnStatus)) in business>
        assign oiReturnStatus = -3.
        return.
    end.

    /* prepare SaveState */
    <I-13 {bFcRun
            &PROCEDURE  = "gipr_SaveStateDataItems"}>

    <M-7 run StartPersistence (output vhFcComponent (ohPersistence), 
                           output viFcReturnSuper (oiReturnStatus)) in business>
    if viFcReturnSuper <> 0
    then oiReturnStatus = viFcReturnSuper.
    if viFcReturnSuper < 0
    then return.

    /* ================================================================= */
    /* Create a draft.                                                   */
    /* ================================================================= */    
    <M-11 run CreateDraftInstance
       (input  viTransactionID (iiTransactionId), 
        input  viFcCurrentInstanceId (iiInstanceId), 
        input  (if vcDraftClass = '' or not vcFcComponentName = 'transaction':U then vcFcComponentName else vcDraftClass) (icBusiness), 
        input  vcActivityCode (icActivity), 
        input  icDraftReference (icReference), 
        input  vcUserLogin (icCreatedBy), 
        input  icDraftFormName (icFormName), 
        input  ilDraftIsShared (ilDraftIsShared), 
        input  viCompanyId (iiCompanyID), 
        input  vhFcStateDataSet (ihInstanceData), 
        input  viCurrentDraftInstanceId (iiOldInstanceId), 
        input  {&TARGETPROCEDURE} (ihClass), 
        output viFcReturnSuper (oiReturnStatus)) in persistence>
    if viFcReturnSuper <> 0
    then oiReturnStatus = viFcReturnSuper.
    if viFcReturnSuper < 0
    then return.

    assign viCurrentDraftInstanceId = 0.
end.

if oiReturnStatus = -98
then oiReturnStatus = 0.