project BLF > class BWorkObject > method UpdateWorkobjectStatus

Description

Update the status of a workobject when the object is opened from the inbox and the required activity is completed.


Parameters


icBusComponentCodeinputcharacterBusComponentCode; corresponds with BusComponent.BusComponentCode
icObjectIdentifiersinputcharactercomma seperated list
icBusActivityCodeinputcharacterBusActivityCode; corresponds with BusActivity.BusActivityCode
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


BLF
method database.UpdateWorkobject
method BWorkObject.UpdateWorkObjectFromUI


program code (program1/bworkobject.p)

/* ========================== */
/* Load al required instances */
/* ========================== */
<M-1 run DataLoadByObjectID (input  icBusComponentCode (icBusComponentCode), 
                             input  icObjectIdentifiers (icObjectIdentifiers), 
                             output oiReturnStatus (oiReturnStatus)) in BWorkObject>
if oiReturnStatus <> 0
then return.
    
/* ================================================== */
/* Get the Activity 'ReturnToSender' of the component */
/* ================================================== */
<Q-11 run BusActivityByLabeslCodesIDs (all) (Read) (NoCache)
          (input ?, (BusComponentID)
           input icBusComponentCode, (BusComponentCode)
           input ?, (BusComponentLabel)
           input ?, (BusActivityID)
           input 'ReturnToSender':U, (BusActivityCode)
           input ?, (BusActivityLabel)
           output dataset tqBusActivityByLabeslCodesIDs) in BBusinessComponent >
find first tqBusActivityByLabeslCodesIDs where 
           tqBusActivityByLabeslCodesIDs.tcBusActivityCode   = 'ReturnToSender':U and 
           tqBusActivityByLabeslCodesIDs.tcBusComponentCode  = icBusComponentCode
           no-lock no-error.
if available tqBusActivityByLabeslCodesIDs
then assign viBusActivityIDReturnToSender    = tqBusActivityByLabeslCodesIDs.tiBusActivity_ID
            vcBusActivityCodeReturnToSender  = tqBusActivityByLabeslCodesIDs.tcBusActivityCode.
else assign viBusActivityIDReturnToSender    = 0
            vcBusActivityCodeReturnToSender  = "":U.

if icBusActivityCode <> ""
then do:
    /* =================================== */
    /* Convert the ActCode into the ActID  */
    /* =================================== */
    <Q-12 run BusActivityByLabeslCodesIDs (all) (Read) (NoCache)
          (input ?, (BusComponentID)
           input icBusComponentCode, (BusComponentCode)
           input ?, (BusComponentLabel)
           input ?, (BusActivityID)
           input icBusActivityCode, (BusActivityCode)
           input ?, (BusActivityLabel)
           output dataset tqBusActivityByLabeslCodesIDs) in BBusinessComponent >
    find first tqBusActivityByLabeslCodesIDs where 
               tqBusActivityByLabeslCodesIDs.tcBusActivityCode   = icBusActivityCode and 
               tqBusActivityByLabeslCodesIDs.tcBusComponentCode  = icBusComponentCode
               no-lock no-error.
    if available tqBusActivityByLabeslCodesIDs
    then assign viBusActivityID = tqBusActivityByLabeslCodesIDs.tiBusActivity_ID.
    else do :
        assign vcMessage      = trim(substitute(#T-13'Business activity could not be found based on the code of the business class (&1) and the code of the business activity (&2).':255(486)T-13#,icBusComponentCode,icBusActivityCode))
               oiReturnStatus = -3.
        <M-5 run SetMessage
          (input  vcMessage (icMessage), 
           input  '':U (icArguments), 
           input  '':U (icFieldName), 
           input  '':U (icFieldValue), 
           input  'E':U (icType), 
           input  3 (iiSeverity), 
           input  '':U (icRowid), 
           input  'BLF-279':U (icFcMsgNumber), 
           input  '' (icFcExplanation), 
           input  '' (icFcIdentification), 
           input  '' (icFcContext), 
           output viFcReturnSuper (oiReturnStatus)) in BWorkObject>
        Return.
    end. /* if not available tqBusComponentPrim */
end.

/* ==================== */
/* Go through instances */
/* ==================== */
for each tWorkObject:
    
    if viBusActivityID <> 0
    and viBusActivityID <> tWorkObject.BusActivity_ID
    then next.
    
    /* ================================================================= */
    /* Update properties                                                 */
    /* ================================================================= */
    <Q-15 run UserPrim (all) (Read) (NoCache)
       (input tWorkObject.CreatorUsr_ID, (UsrId)
        input '', (UsrLogin)
        output dataset tqUserPrim) in BUser >

    Find First tqUserPrim Where 
               tqUserPrim.tiUsr_ID = tWorkObject.CreatorUsr_ID No-error.

    if tWorkObject.WorkObjectIsReturnToSender And
       Available tqUserPrim
    then do :

        /* ================ */
        /* Return to sender */
        /* ================ */       
        vaMyUuid = GENERATE-UUID.
        assign tWorkObject.WorkObjectIsInternalCtrl    = yes
               tWorkObject.WorkObjectIsExternalCtrl    = no
               tWorkObject.WorkObjectIsReturnToSender  = no
               tWorkObject.WorkObjectExternalRef       = GUID(vaMyUuid)
               tWorkObject.BusActivity_ID              = viBusActivityIDReturnToSender
               tWorkObject.tcBusActivityCode           = vcBusActivityCodeReturnToSender
               tWorkObject.Usr_ID                      = tWorkObject.CreatorUsr_ID
               tWorkObject.tcUsrLogin                  = tqUserPrim.tcUsrLogin
               tWorkObject.tc_Status                   = "C":U
               tWorkObject.Role_ID                     = 0
               tWorkObject.tcRoleName                  = '':U.

    end. /* if tWorkObject.WorkObjectIsReturnToSender */
    
    /* =============================== */
    /* Remove the object from workflow */
    /* =============================== */
    else assign tWorkObject.tc_Status = "D":U.
    
end. /* for each tWorkObject where */

/* ============================ */
/* Validations, AddUpd and Save */         
/* ============================ */
<M-6 run ValidateBC (output viFcReturnSuper (oiReturnStatus)) in BWorkObject>
if viFcReturnSuper < 0 or (viFcReturnSuper > 0 and oiReturnStatus = 0)
then assign oiReturnStatus = viFcReturnSuper.
if oiReturnStatus < 0 then return.

<M-7 run AdditionalUpdates (output viFcReturnSuper (oiReturnStatus)) in BWorkObject>
if viFcReturnSuper < 0 or (viFcReturnSuper > 0 and oiReturnStatus = 0)
then assign oiReturnStatus = viFcReturnSuper.
if oiReturnStatus < 0 then return.

<M-8 run DataSave (output viFcReturnSuper (oiReturnStatus)) in BWorkObject>
if viFcReturnSuper < 0 or (viFcReturnSuper > 0 and oiReturnStatus = 0)
then assign oiReturnStatus = viFcReturnSuper.
if oiReturnStatus < 0 then return.