project BLF > class BBaseDaemonQueue > method SetWorkResult
Description
Set the status of a work item (daemonqueue record) according to the result of the processing.
Parameters
| ilKeepProcessedOKItems | input | logical | |
| ilSuccess | input | logical | The work on the item was successful? |
| iiDaemonQueueId | input | integer | ID of the daemonqueue record to be updated. |
| tResultMessages | input | temp-table | Result message |
| ocErrorMessage | output | character | Occasional error message when something goes wrong in the setting of the status. |
| oiReturnStatus | output | integer | Return status of the method. |
Internal usage
BLF
program code (program3/bbasedaemonqueue.p)
vlKeepProcessedOKItems = ilKeepProcessedOKItems.
/* ========================================================================== */
/* Make sure the instance we are working with is empty. */
/* ========================================================================== */
<M-5 run ClearData (output viFcReturnSuper (oiReturnStatus)) in BBaseDaemonQueue>
if viFcReturnSuper <> 0
then oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then do :
assign ocErrorMessage = trim(substitute(#T-7'Update daemon queue: unable to clear the current instance information (daemon queue ID: &1).':255(37)T-7#,string(iiDaemonQueueId))).
assign oiReturnStatus = -51.
return.
end.
<M-1 run DataLoad
(input '' (icRowids),
input string(iiDaemonQueueId) (icPkeys),
input '' (icObjectIds),
input '' (icFreeform),
input false (ilKeepPrevious),
output viFcReturnSuper (oiReturnStatus)) in BBaseDaemonQueue>
if viFcReturnSuper <> 0
then oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then do :
assign ocErrorMessage = trim(substitute(#T-12'Update daemon queue: unable to load the instance information (daemon queue ID: &1).':255(42)T-12#,string(iiDaemonQueueId))).
assign oiReturnStatus = -51.
return.
end.
/* Save date and time in UTC */
session:timezone = 0.
/* ========================================================================== */
/* Update the daemonqueue record, with the result. */
/* ========================================================================== */
find first tfcDaemonQueue no-error.
assign tfcDaemonQueue.DaemonQueueStatus = (if ilSuccess
then {&DAEMONQUEUESTATUS-PROCESSEDOK}
else {&DAEMONQUEUESTATUS-PROCESSEDERR})
tfcDaemonQueue.DaemonQueueEndDate = today
tfcDaemonQueue.DaemonQueueEndTime = TIME
tfcDaemonQueue.DaemonQueueLockedProcess = ?
tfcDaemonQueue.tc_Status = "C":U.
session:timezone = viTimeOffset.
/* ================================================================= */
/* Check if queue record should be deleted */
/* ================================================================= */
if ilSuccess
and vlKeepProcessedOKItems = no
then assign tfcDaemonQueue.tc_Status = "D":U.
if tfcDaemonQueue.tc_Status = "C":U
then do:
vcInformation = tfcDaemonQueue.DaemonQueueLog.
/* ========================================================================== */
/* Add detail message records */
/* ========================================================================== */
for each tResultMessages where tResultMessages.tcFcMessage <> "" and
tResultMessages.tcFcMessage <> ? on error undo, throw:
<M-6 run AddDetailLine (input 'fcDaemonQueueLog':U (icTable),
input tfcDaemonQueue.tc_Rowid (icParentRowid),
output viFcReturnSuper (oiReturnStatus)) in BBaseDaemonQueue>
session:timezone = 0.
vcNow = string(now).
session:timezone = viTimeOffset.
assign tfcDaemonQueueLog.DaemonQueueLogRowid = (if length(tResultMessages.tcFcRowid,"CHARACTER") > 20
then ""
else tResultMessages.tcFcRowid)
tfcDaemonQueueLog.DaemonQueueLogFieldName = tResultMessages.tcFcFieldName
tfcDaemonQueueLog.DaemonQueueLogFieldValue = tResultMessages.tcFcFieldValue
tfcDaemonQueueLog.DaemonQueueLog = "[":U + (if num-entries (vcNow,"+") = 2 then entry (1,vcNow,"+") else vcNow)
+ "] ":U + tfcDaemonQueue.DaemonQueueStatus
tfcDaemonQueueLog.DaemonQueueLogMessage = tResultMessages.tcFcMessage
tfcDaemonQueueLog.DaemonQueueLogSeverity = tResultMessages.tiFcSeverity
tfcDaemonQueueLog.DaemonQueueLogType = tResultMessages.tcFcType
tfcDaemonQueueLog.DaemonQueueLogFieldLabel = tResultMessages.tcFcFieldLabel
tfcDaemonQueueLog.DaemonQueueLogBusMethod = entry (1,tResultMessages.tcFcBusMethod,chr(10))
tfcDaemonQueueLog.DaemonQueueLogContext = tResultMessages.tcFcContext
tfcDaemonQueueLog.DaemonQueueLogExplanation = tResultMessages.tcFcExplanation
tfcDaemonQueueLog.DaemonQueueLogIdent = tResultMessages.tcFcIdentification
tfcDaemonQueueLog.DaemonQueueLogNumber = tResultMessages.tcFcMsgNumber.
/* Oracle does not allow over 4000 bytes in a string */
if length(vcInformation,"RAW") + length(tResultMessages.tcFcMessage,"RAW") < 3900
then assign vcInformation = vcInformation + chr(10) + tResultMessages.tcFcMessage.
else assign vlOver4Kbytes = true.
end.
if vlOver4Kbytes
then assign vcInformation = vcInformation + chr(10) + "...":U.
assign tfcDaemonQueue.DaemonQueueLog = vcInformation.
end.
<M-3 run ValidateBC (output viFcReturnSuper (oiReturnStatus)) in BBaseDaemonQueue>
if viFcReturnSuper <> 0
then oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then do :
assign ocErrorMessage = trim(substitute(#T-17'Update daemon queue: unable to validate the current instance information (daemon queue ID: &1).':255(43)T-17#,string(iiDaemonQueueId))).
assign oiReturnStatus = -51.
return.
end.
<M-4 run AdditionalUpdates (output viFcReturnSuper (oiReturnStatus)) in BBaseDaemonQueue>
if viFcReturnSuper <> 0
then oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then do :
assign ocErrorMessage = trim(substitute(#T-22'Update daemon queue: unable to validate (addition update) the current instance information (daemon queue ID: &1).':255(44)T-22#,string(iiDaemonQueueId))).
assign oiReturnStatus = -51.
return.
end.
<M-2 run DataSave (output viFcReturnSuper (oiReturnStatus)) in BBaseDaemonQueue>
if viFcReturnSuper <> 0
then oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then do :
assign ocErrorMessage = trim(substitute(#T-27'Update daemon queue: unable to write the current instance information to the database (daemon queue ID: &1).':255(45)T-27#,string(iiDaemonQueueId))).
assign oiReturnStatus = -51.
return.
end.
finally:
for each tFcMessages:
assign ocErrorMessage = ocErrorMessage + chr(10) +
(if tFcMessages.tcFcType = "W":U then trim(#T-28'Warning':100(38)t-28#) + "; ":U else trim(#T-29'Error':100(39)t-29#) + "; ":U) +
(if tFcMessages.tcFcMessage = ? then "?":U else tFcMessages.tcFcMessage) +
(if tFcMessages.tcFcFieldName = ? then "":U else " ":U + trim(#T-30'Field Name':100(40)T-30#) + "; ":U + tFcMessages.tcFcFieldName) +
(if tFcMessages.tcFcFieldValue = ? then "":U else " ":U + trim(#T-31'Field Value':100(41)T-31#) + "; ":U + tFcMessages.tcFcFieldValue).
end. /* for each */
end finally.