project BLF > class BReportDaemonProcessor > method PerformWorkItem

Description

This is the method that contains the call to the specific method in the appropriate class to perform the request.
This method should be extended on the specific daemon level.
In order to have a proper logging of the errors/warnings you get from the business method that is used for processing the work, you need to fill in tPassMessages temp-table parameter, as a copy of tFcMessages from the called business component.


Parameters


iiDaemonQueueIdinputintegerID of the daemon queue record that indicates the work that needs to be done.
olSuccessoutputlogicalWas the operation successful?
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


unused


program code (program/breportdaemonprocessor.p)

<ANCESTOR-CODE>

/* ================================================================= */
/* Convert DaemonQueue ID into Report Request ID.                    */
/* ================================================================= */
<Q-1 run GetDaemonQueueInfo (all) (Read) (NoCache)
   (input iiDaemonQueueId, (DaemonQueueId)
    output dataset tqGetDaemonQueueInfo) in BBaseDaemonQueue >
find first tqGetDaemonQueueInfo where tqGetDaemonQueueInfo.tiDaemonQueueId = iiDaemonQueueId no-error.
if not available tqGetDaemonQueueInfo
then do:
    <M-36 run SetMessage
       (input  trim(#T-32'Daemon queue record not found with id $1.':255(998716609)T-32#) (icMessage), 
        input  string(iiDaemonQueueId) (icArguments), 
        input  '' (icFieldName), 
        input  '' (icFieldValue), 
        input  'D' (icType), 
        input  3 (iiSeverity), 
        input  '' (icRowid), 
        input  'BLF-359632':U (icFcMsgNumber), 
        input  '' (icFcExplanation), 
        input  '' (icFcIdentification), 
        input  '' (icFcContext), 
        output viFcReturnSuper (oiReturnStatus)) in BReportDaemonProcessor>

    oiReturnStatus = -3.
    return.
end.

/* ================================================================= */
/* Retrieve the entire report request.                               */
/* ================================================================= */
<I-3 {bFcStartAndOpenInstance
     &CLASS              = "BReportRequest"}>
<M-4 run apiGetRequest
   (input  integer (tqGetDaemonQueueInfo.tcDaemonQueueRef) (iiRequestID), 
    output dReportRQ (BReportRequest), 
    output viLocalReturn (oiReturnStatus)) in BReportRequest>
<I-5 {bFcCloseAndStopInstance
     &CLASS           = "BReportRequest"}>
if viLocalReturn <> 0
then oiReturnStatus = viLocalReturn.
if viLocalReturn < 0
then return.

find first tReportRQ where
           tReportRQ.RptRequest_ID = int(tqGetDaemonQueueInfo.tcDaemonQueueRef)
           no-error.

if not available tReportRQ
then do:
    assign oiReturnStatus = -3.
    return.
end.

/* ================================================================= */
/* Retrieve the Company to use.                                      */
/* ================================================================= */
find first tReportRQ7Context where
           tReportRQ7Context.tc_ParentRowid = tReportRQ.tc_Rowid and
           tReportRQ7Context.RptRequestContextProperty = "CompanyCode"
           no-error.
if available tReportRQ7Context
then vcCompanyCodeToUse = tReportRQ7Context.RptRequestContextValue.

if vcCompanyCodeToUse = ""
or vcCompanyCodeToUse = ?
or vcCompanyCodeToUse = vcCompanyCode
then viCompanyIdToUse = viCompanyId.
else do:
    <Q-82 run CompanyByAll (all) (Read) (NoCache)
       (input ?, (CompanyId)
        input vcCompanyCodeToUse, (CompanyCode)
        input ?, (CompanyIsActive)
        output dataset tqCompanyByAll) in BCompany>
        
    find first tqCompanyByAll no-error.
    if not available tqCompanyByAll
    then do:
        <M-88 run SetMessage
           (input  trim(#T-97'Unknown Company':40(8912)T-97#) (icMessage), 
            input  '' (icArguments), 
            input  '' (icFieldName), 
            input  '' (icFieldValue), 
            input  'E':U (icType), 
            input  3 (iiSeverity), 
            input  '' (icRowid), 
            input  'blf-702156':U (icFcMsgNumber), 
            input  '' (icFcExplanation), 
            input  '' (icFcIdentification), 
            input  '' (icFcContext), 
            output viFcReturnSuper (oiReturnStatus)) in BReportDaemonProcessor>
        assign oiReturnStatus = -3.
        return.
    end.
        
    viCompanyIdToUse = tqCompanyByAll.tiCompany_ID.
end.

<M-93 run SwitchSessionCy
   (input  '' (icCompanyCode), 
    input  viCompanyIdToUse (iiCompanyId), 
    output viLocalReturn (oiReturnStatus)) in BReportDaemonProcessor>
if viLocalReturn <> 0
then oiReturnStatus = viLocalReturn.
if viLocalReturn < 0
then return.

/* ================================================================= */
/* Resolve variables in report filter.                               */
/* ================================================================= */
    <I-15 {bFcOpenInstance
         &CLASS           = "Session"}>
        <M-17 run GetFilterVariables
           (output tReportFilterVariable (tFilterVariable), 
            output viLocalReturn (oiReturnStatus)) in Session>
    <I-18 {bFcCloseInstance
         &CLASS           = "Session"}>
    if viLocalReturn <> 0
    then oiReturnStatus = viLocalReturn.
    if viLocalReturn < 0
    then return.
    
    for each tReportFilterVariable,
        each tReportRQ2Filter where
             tReportRQ2Filter.tc_ParentRowid = tReportRQ.tc_Rowid
             on error undo, throw:
        if index(tReportRQ2Filter.RptRequestFilterIniValue1,tReportFilterVariable.tcFilterVariableName) > 0
        then tReportRQ2Filter.RptRequestFilterIniValue1 = replace(tReportRQ2Filter.RptRequestFilterIniValue1,
                                                                  tReportFilterVariable.tcFilterVariableName,
                                                                  tReportFilterVariable.tcFilterVariableValue).
        if index(tReportRQ2Filter.RptRequestFilterIniValue2,tReportFilterVariable.tcFilterVariableName) > 0
        then tReportRQ2Filter.RptRequestFilterIniValue2 = replace(tReportRQ2Filter.RptRequestFilterIniValue2,
                                                                  tReportFilterVariable.tcFilterVariableName,
                                                                  tReportFilterVariable.tcFilterVariableValue).
    end.
    
    empty temp-table tReportFilterVariable.

/* ================================================================= */
/* Run the report.                                                   */
/* ================================================================= */
empty temp-table tFilter.
empty temp-table tReportResultFieldCBF.

for each tReportRQ2Filter where tReportRQ2Filter.tc_ParentRowid = tReportRQ.tc_Rowid on error undo, throw:
    create tFilter.
    assign tFilter.tcBusinessFieldName = tReportRQ2Filter.RptRequestFilterBusField
           tFilter.tcDataType          = tReportRQ2Filter.RptRequestFilterDataType
           tFilter.tcOperator          = if tReportRQ2Filter.RptRequestFilterBusField matches "*_RANGE":U
                                         then ">=":U
                                         else tReportRQ2Filter.RptRequestFilterOperator
           tFilter.tcParameterValue    = tReportRQ2Filter.RptRequestFilterIniValue1.
           
    if tReportRQ2Filter.RptRequestFilterBusField matches "*_RANGE":U
    then do:
        create tFilter.
        assign tFilter.tcBusinessFieldName = tReportRQ2Filter.RptRequestFilterBusField
               tFilter.tcDataType          = tReportRQ2Filter.RptRequestFilterDataType
               tFilter.tcOperator          = "<=":U
               tFilter.tcParameterValue    = tReportRQ2Filter.RptRequestFilterIniValue2.
    end.
end.

for each tReportRQ1CBF where tReportRQ1CBF.tc_ParentRowid = tReportRQ.tc_Rowid on error undo, throw:
    create tReportResultFieldCBF.
    assign tReportResultFieldCBF.tcResultField = tReportRQ1CBF.RptRequestResultField
           tReportResultFieldCBF.tcCBF         = tReportRQ1CBF.RptRequestCBF.
end.

<M-6 run BusinessClassActions
   (input  tReportRQ.tcBusComponentCode (icClassShortname), 
    input  'START+OPEN' (icAction), 
    input  no (ilSubtransaction), 
    input-output vibreportOC (biClassOpenCount), 
    input-output vhbreportInst (bhClassInstanceHandle), 
    input-output vibreportID (biClassInstanceId), 
    input  '' (icDraftReference), 
    input  '' (icUserDefinedContext), 
    output viFcReturnSuper (oiReturnStatus)) in BReportDaemonProcessor>
if viFcReturnSuper <> 0
then oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then return.

<M-7 run ApiProcessReportLogic
   (input  tReportRQ.tcBusActivityCode (icReportName), 
    input  tReportRQ.tcLngCode (icLanguageCode), 
    input  tFilter (tFilter), 
    input  tReportResultFieldCBF (tResultFieldToCBF), 
    output vhReportData (ozReportData), 
    output viLocalReturn (oiReturnStatus)) in breport>

<M-8 run BusinessClassActions
   (input  tReportRQ.tcBusComponentCode (icClassShortname), 
    input  'CLOSE+STOP' (icAction), 
    input  no (ilSubtransaction), 
    input-output vibreportOC (biClassOpenCount), 
    input-output vhbreportInst (bhClassInstanceHandle), 
    input-output vibreportID (biClassInstanceId), 
    input  '' (icDraftReference), 
    output viFcReturnSuper (oiReturnStatus)) in BReportDaemonProcessor>

if viLocalReturn <> 0
then oiReturnStatus = viLocalReturn.
if viLocalReturn < 0
then return.

if viFcReturnSuper <> 0
then oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then return.

/* ================================================================= */
/* Add extra table to report dataset.                                */
/* ================================================================= */
create tReportSetting.
assign tReportSetting.tcRptFileName        = tReportRQ.RptRequestRptFileName
       tReportSetting.tcRptDateFormat      = tReportRQ.RptRequestDateFormat
       tReportSetting.tcRptDateSeparator   = tReportRQ.RptRequestDateSeparator
       tReportSetting.tcRptTimeFormat      = tReportRQ.RptRequestTimeFormat
       tReportSetting.tcRptTimeSeparator   = tReportRQ.RptRequestTimeSeparator
       tReportSetting.tcRptDecimalPoint    = tReportRQ.RptRequestDecimalPoint
       tReportSetting.tiRptTCDecimals      = tReportRQ.RptRequestTCDecimals
       tReportSetting.tiRptFilterPrintMode = tReportRQ.RptRequestFilterPrintMode
       tReportSetting.tlRptPagebreakMode   = tReportRQ.RptRequestPagebreakMode
       tReportSetting.tcRptSaveFolder      = tReportRQ.RptRequestSaveFolder
       tReportSetting.tcRptSaveFileName    = tReportRQ.RptRequestSaveFileName
       tReportSetting.tcRptMailSubject     = tReportRQ.RptRequestMailSubject
       tReportSetting.tcRptMailBody        = tReportRQ.RptRequestMailBody
       tReportSetting.tcRptMailTo          = tReportRQ.RptRequestMailTo
       tReportSetting.tcRptMailCC          = tReportRQ.RptRequestMailCC
       tReportSetting.tcRptMailBCC         = tReportRQ.RptRequestMailBCC
       tReportSetting.tcRptOutputFormat    = tReportRQ.RptRequestOutputFormat
       tReportSetting.tcRptPrinterName     = tReportRQ.tcRptPrinterName
       tReportSetting.tcGlobalSessionId    = vcSocketGlobalSessionID.

/* get mail-from address */
if  viUsrId <> 0
and viUsrId <> ?
then do:
    <Q-14 run UserById (all) (Read) (NoCache)
       (input viUsrId, (UsrId)
        output dataset tqUserById) in BUser >
    find first tqUserById no-error.
    if available tqUserById
    then tReportSetting.tcRptMailFrom = tqUserById.tcUsrMailAddress.
end.

/* resolve roles into e-mail addresses */
if can-find (first tReportRQ3Mail where tReportRQ3Mail.tc_ParentRowid = tReportRQ.tc_Rowid)
then do:
    assign vcNoEMailUsers = "".

    for each tReportRQ3Mail where tReportRQ3Mail.tc_ParentRowid = tReportRQ.tc_Rowid on error undo, throw:
        <Q-10 run UserByRoleId (all) (Read) (NoCache)
           (input tReportRQ3Mail.Role_ID, (RoleId)
            input yes, (UsrIsActive)
            input viCompanyId, (CompanyId)
            output dataset tqUserByRoleId) in BUser >

        for each tqUserByRoleId on error undo, throw:
            if tqUserByRoleId.tcUsrMailAddress = "" or
               tqUserByRoleId.tcUsrMailAddress = ?
            then do:
                if vcNoEMailUsers <> ""
                then assign vcNoEMailUsers = vcNoEMailUsers + ", ".

                assign vcNoEMailUsers = vcNoEMailUsers + tqUserByRoleId.tcUsrName.
                next.
            end.

            case tReportRQ3Mail.RptRequestMailType:
                when "TO"
                then if not can-do(tReportSetting.tcRptMailTo, tqUserByRoleId.tcUsrMailAddress)
                     then do:
                         if tReportSetting.tcRptMailTo <> ""
                         then assign tReportSetting.tcRptMailTo = tReportSetting.tcRptMailTo + ",".

                         assign tReportSetting.tcRptMailTo = tReportSetting.tcRptMailTo + tqUserByRoleId.tcUsrMailAddress.
                     end.

                when "CC"
                then if not can-do(tReportSetting.tcRptMailCC, tqUserByRoleId.tcUsrMailAddress)
                     then do:
                         if tReportSetting.tcRptMailCC <> ""
                         then assign tReportSetting.tcRptMailCC = tReportSetting.tcRptMailCC + ",".

                         assign tReportSetting.tcRptMailCC = tReportSetting.tcRptMailCC + tqUserByRoleId.tcUsrMailAddress.
                     end.

                when "BCC"
                then if not can-do(tReportSetting.tcRptMailBCC, tqUserByRoleId.tcUsrMailAddress)
                     then do:
                         if tReportSetting.tcRptMailBCC <> ""
                         then assign tReportSetting.tcRptMailBCC = tReportSetting.tcRptMailBCC + ",".

                         assign tReportSetting.tcRptMailBCC = tReportSetting.tcRptMailBCC + tqUserByRoleId.tcUsrMailAddress.
                     end.
            end case.
        end.
    end.
    
    <Q-11 run UserByRoleId  (Stop) in BUser >

    if vcNoEMailUsers <> ""
    then do:
        <M-66 run SetMessage
           (input  trim(#T-47'The following users did not receive an e-mail because their user profile does not contain an e-mail address:':255(118996082)T-47#) (icMessage), 
            input  '' (icArguments), 
            input  '' (icFieldName), 
            input  '' (icFieldValue), 
            input  'W' (icType), 
            input  4 (iiSeverity), 
            input  '' (icRowid), 
            input  'BLF-677710':U (icFcMsgNumber), 
            input  '' (icFcExplanation), 
            input  '' (icFcIdentification), 
            input  '' (icFcContext), 
            output viFcReturnSuper (oiReturnStatus)) in BReportDaemonProcessor>

        <M-44 run SetMessage
           (input  vcNoEMailUsers (icMessage), 
            input  '' (icArguments), 
            input  '' (icFieldName), 
            input  '' (icFieldValue), 
            input  'W' (icType), 
            input  4 (iiSeverity), 
            input  '' (icRowid), 
            input  'BLF-710182':U (icFcMsgNumber), 
            input  '' (icFcExplanation), 
            input  '' (icFcIdentification), 
            input  '' (icFcContext), 
            output viFcReturnSuper (oiReturnStatus)) in BReportDaemonProcessor>

        assign oiReturnStatus = 1.
    end.
end.

vhReportData:add-buffer (temp-table tReportSetting:default-buffer-handle).
vhReportData:write-xml ("memptr",vmReportData,?,?,?,true).
viSize = get-size(vmReportData).
set-size(vmSize) = 10.
put-string(vmSize,1) = string(viSize).

/* ================================================================= */
/* Connect to the .NET service and send back the data.               */
/* ================================================================= */
assign vlReportSuccessfull = no.
create socket vhSocketDNS no-error.

if error-status:error or
   error-status:num-messages > 0
then do:
    assign vcFcMaskList = "".

    do viFcCount1 = 1 to error-status:num-messages:
        if viFcCount1 > 1
        then assign vcFcMaskList = vcFcMaskList + chr(2).

        assign vcFcMaskList = vcFcMaskList + error-status:get-message(viFcCount1).
    end.

    <M-23 run SetMessage
       (input  trim(#T-25'Failed to create socket object.':255(998716605)T-25#) (icMessage), 
        input  '' (icArguments), 
        input  '' (icFieldName), 
        input  '' (icFieldValue), 
        input  'D' (icType), 
        input  3 (iiSeverity), 
        input  '' (icRowid), 
        input  'BLF-668336':U (icFcMsgNumber), 
        input  '' (icFcExplanation), 
        input  '' (icFcIdentification), 
        input  '' (icFcContext), 
        output viFcReturnSuper (oiReturnStatus)) in BReportDaemonProcessor>

    if vcFcMaskList <> ""
    then do viFcCount1 = 1 to num-entries(vcFcMaskList, chr(2)):
        <M-24 run SetMessage
           (input  entry(viFcCount1, vcFcMaskList, chr(2)) (icMessage), 
            input  '' (icArguments), 
            input  '' (icFieldName), 
            input  '' (icFieldValue), 
            input  'D' (icType), 
            input  3 (iiSeverity), 
            input  '' (icRowid), 
            input  'BLF-528994':U (icFcMsgNumber), 
            input  '' (icFcExplanation), 
            input  '' (icFcIdentification), 
            input  '' (icFcContext), 
            output viFcReturnSuper (oiReturnStatus)) in BReportDaemonProcessor>
    end.

    assign oiReturnStatus     = -3
           vlDaemonNeedsToEnd = true.

    return.
end.

assign vlFcOk = vhSocketDNS:set-read-response-procedure("ReportResponse") no-error.

if not vlFcOk         or
   error-status:error or
   error-status:num-messages > 0
then do:
    assign vcFcMaskList = "".

    do viFcCount1 = 1 to error-status:num-messages:
        if viFcCount1 > 1
        then assign vcFcMaskList = vcFcMaskList + chr(2).

        assign vcFcMaskList = vcFcMaskList + error-status:get-message(viFcCount1).
    end.

    <M-26 run SetMessage
       (input  trim(#T-28'Failed to set read response procedure on socket object.':255(998716606)T-28#) (icMessage), 
        input  '' (icArguments), 
        input  '' (icFieldName), 
        input  '' (icFieldValue), 
        input  'D' (icType), 
        input  3 (iiSeverity), 
        input  '' (icRowid), 
        input  'BLF-817955':U (icFcMsgNumber), 
        input  '' (icFcExplanation), 
        input  '' (icFcIdentification), 
        input  '' (icFcContext), 
        output viFcReturnSuper (oiReturnStatus)) in BReportDaemonProcessor>

    if vcFcMaskList <> ""
    then do viFcCount1 = 1 to num-entries(vcFcMaskList, chr(2)):
        <M-27 run SetMessage
           (input  entry(viFcCount1, vcFcMaskList, chr(2)) (icMessage), 
            input  '' (icArguments), 
            input  '' (icFieldName), 
            input  '' (icFieldValue), 
            input  'D' (icType), 
            input  3 (iiSeverity), 
            input  '' (icRowid), 
            input  'BLF-627060':U (icFcMsgNumber), 
            input  '' (icFcExplanation), 
            input  '' (icFcIdentification), 
            input  '' (icFcContext), 
            output viFcReturnSuper (oiReturnStatus)) in BReportDaemonProcessor>
    end.

    assign oiReturnStatus     = -3
           vlDaemonNeedsToEnd = true.

    return.
end.

assign vlFcOk = vhSocketDNS:connect("-H " + vcSocketHost + " -S " + string(viSocketPort)) no-error.

if not vlFcOk         or
   error-status:error or
   error-status:num-messages > 0
then do:
    assign vcFcMaskList = "".

    do viFcCount1 = 1 to error-status:num-messages:
        if viFcCount1 > 1
        then assign vcFcMaskList = vcFcMaskList + chr(2).

        assign vcFcMaskList = vcFcMaskList + error-status:get-message(viFcCount1).
    end.

    <M-31 run SetMessage
       (input  trim(#T-29'The system failed to connect to report server $1 using port $2.':255(998716607)T-29#) (icMessage), 
        input  vcSocketHost + chr(10) + string(viSocketPort) (icArguments), 
        input  '' (icFieldName), 
        input  '' (icFieldValue), 
        input  'D' (icType), 
        input  3 (iiSeverity), 
        input  '' (icRowid), 
        input  'BLF-670911':U (icFcMsgNumber), 
        input  '' (icFcExplanation), 
        input  '' (icFcIdentification), 
        input  '' (icFcContext), 
        output viFcReturnSuper (oiReturnStatus)) in BReportDaemonProcessor>

    if vcFcMaskList <> ""
    then do viFcCount1 = 1 to num-entries(vcFcMaskList, chr(2)):
        <M-30 run SetMessage
           (input  entry(viFcCount1, vcFcMaskList, chr(2)) (icMessage), 
            input  '' (icArguments), 
            input  '' (icFieldName), 
            input  '' (icFieldValue), 
            input  'S' (icType), 
            input  3 (iiSeverity), 
            input  '' (icRowid), 
            input  'BLF-372040':U (icFcMsgNumber), 
            input  '' (icFcExplanation), 
            input  '' (icFcIdentification), 
            input  '' (icFcContext), 
            output viFcReturnSuper (oiReturnStatus)) in BReportDaemonProcessor>
    end.

    assign oiReturnStatus     = -3
           vlDaemonNeedsToEnd = true.

    return.
end.

assign vlFcOk = vhSocketDNS:write(vmSize, 1, 10) no-error.

if not vlFcOk         or
   error-status:error or
   error-status:num-messages > 0
then do:
    assign vcFcMaskList = "".

    do viFcCount1 = 1 to error-status:num-messages:
        if viFcCount1 > 1
        then assign vcFcMaskList = vcFcMaskList + chr(2).

        assign vcFcMaskList = vcFcMaskList + error-status:get-message(viFcCount1).
    end.

    <M-34 run SetMessage
       (input  trim(#T-30'The system failed to write to socket object.':255(998716608)T-30#) (icMessage), 
        input  '' (icArguments), 
        input  '' (icFieldName), 
        input  '' (icFieldValue), 
        input  'S' (icType), 
        input  3 (iiSeverity), 
        input  '' (icRowid), 
        input  'BLF-243401':U (icFcMsgNumber), 
        input  '' (icFcExplanation), 
        input  '' (icFcIdentification), 
        input  '' (icFcContext), 
        output viFcReturnSuper (oiReturnStatus)) in BReportDaemonProcessor>

    if vcFcMaskList <> ""
    then do viFcCount1 = 1 to num-entries(vcFcMaskList, chr(2)):
        <M-33 run SetMessage
           (input  entry(viFcCount1, vcFcMaskList, chr(2)) (icMessage), 
            input  '' (icArguments), 
            input  '' (icFieldName), 
            input  '' (icFieldValue), 
            input  'S' (icType), 
            input  3 (iiSeverity), 
            input  '' (icRowid), 
            input  'BLF-668647':U (icFcMsgNumber), 
            input  '' (icFcExplanation), 
            input  '' (icFcIdentification), 
            input  '' (icFcContext), 
            output viFcReturnSuper (oiReturnStatus)) in BReportDaemonProcessor>
    end.

    assign oiReturnStatus     = -3
           vlDaemonNeedsToEnd = true.

    return.
end.

assign viBytesWritten        = 0
       viStart               = 1
       vlWriteToSocketFailed = false.

do while viBytesWritten < viSize:
    assign vlFcOk = vhSocketDNS:write(vmReportData, viStart, viSize - viBytesWritten) no-error.

    if not vlFcOk         or
       error-status:error or
       error-status:num-messages > 0
    then do:
        assign vlWriteToSocketFailed = true
               vcFcMaskList          = "".

        do viFcCount1 = 1 to error-status:num-messages:
            if viFcCount1 > 1
            then assign vcFcMaskList = vcFcMaskList + chr(2).
    
            assign vcFcMaskList = vcFcMaskList + error-status:get-message(viFcCount1).
        end.
    
        leave.
    end.

    assign viBytesWritten = viBytesWritten + vhSocketDNS:bytes-written
           viStart        = viBytesWritten + 1.
end.

if vlWriteToSocketFailed
then do:
    <M-22 run SetMessage
       (input  trim(#T-31'The system failed to write to socket object.':255(998716608)T-31#) (icMessage), 
        input  '' (icArguments), 
        input  '' (icFieldName), 
        input  '' (icFieldValue), 
        input  'S' (icType), 
        input  3 (iiSeverity), 
        input  '' (icRowid), 
        input  'BLF-657468':U (icFcMsgNumber), 
        input  '' (icFcExplanation), 
        input  '' (icFcIdentification), 
        input  '' (icFcContext), 
        output viFcReturnSuper (oiReturnStatus)) in BReportDaemonProcessor>

    if vcFcMaskList <> ""
    then do viFcCount1 = 1 to num-entries(vcFcMaskList, chr(2)):
        <M-35 run SetMessage
           (input  entry(viFcCount1, vcFcMaskList, chr(2)) (icMessage), 
            input  '' (icArguments), 
            input  '' (icFieldName), 
            input  '' (icFieldValue), 
            input  'S' (icType), 
            input  3 (iiSeverity), 
            input  '' (icRowid), 
            input  'BLF-300192':U (icFcMsgNumber), 
            input  '' (icFcExplanation), 
            input  '' (icFcIdentification), 
            input  '' (icFcContext), 
            output viFcReturnSuper (oiReturnStatus)) in BReportDaemonProcessor>
    end.

    assign oiReturnStatus     = -3
           vlDaemonNeedsToEnd = true
           olSuccess          = false.
end.
else do:
    wait-for read-response of vhSocketDNS pause 30 * 60.  /* Time-out = 30 minutes */
    olSuccess = vlReportSuccessfull.

    if not olSuccess
    then assign oiReturnStatus = -3.
end.

finally:

    /* ================================================================= */
    /* Clean up.                                                         */
    /* ================================================================= */
    if vhSocketDNS <> ?
    then do:
        vhSocketDNS:disconnect().
        delete object vhSocketDNS.
        vhSocketDNS = ?.
    end.
    if vhReportData <> ? then delete object vhReportData.
    set-size(vmReportData) = 0.
    set-size(vmSize) = 0.
    
    empty temp-table tReportResultFieldCBF.
    empty temp-table tReportRQ.
    empty temp-table tReportRQ1CBF.
    empty temp-table tReportRQ2Filter.
    empty temp-table tReportRQ3Mail.
    empty temp-table tReportRQ4Custom0.
    empty temp-table tReportRQ5Custom1.
    empty temp-table tReportRQ6Custom2.
    empty temp-table tReportRQ7Context.
    empty temp-table tReportRQ8Schedule.
    empty temp-table tReportSetting.
    empty temp-table tqGetDaemonQueueInfo.
    empty temp-table tqUserByRoleId.

end finally.