project BLF > class BBaseDaemonQueue > method SetWorkResult

Description

Set the status of a work item (daemonqueue record) according to the result of the processing.


Parameters


ilKeepProcessedOKItemsinputlogical
ilSuccessinputlogicalThe work on the item was successful?
iiDaemonQueueIdinputintegerID of the daemonqueue record to be updated.
tResultMessagesinputtemp-tableResult message
ocErrorMessageoutputcharacterOccasional error message when something goes wrong in the setting of the status.
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


BLF
method BBaseDaemonProcessor.SetWorkResult


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.