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
icBusComponentCode | input | character | BusComponentCode; corresponds with BusComponent.BusComponentCode |
icObjectIdentifiers | input | character | comma seperated list |
icBusActivityCode | input | character | BusActivityCode; corresponds with BusActivity.BusActivityCode |
oiReturnStatus | output | integer | Return status of the method. |
Internal usage
BLF
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.