project BLF > class BScanDaemonProcessor > 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/bscandaemonprocessor.p)

<ANCESTOR-CODE>
    
    
    /* ====================================== */
    /* State default output and return-status */
    /* ====================================== */
    assign olSuccess      = false
           oiReturnStatus = -98. 
                 
    /* ================================================= */
    /* Find the fcDaemonQueue ( = ScanDaemonQueue)       */
    /* ================================================= */
    <Q-1 run GetDaemonQueueInfo (all) (Read) (NoCache)
          (input iiDaemonQueueId, (DaemonQueueId)
           output dataset tqGetDaemonQueueInfo) in BBaseDaemonQueue >
    find tqGetDaemonQueueInfo where
         tqGetDaemonQueueInfo.tiDaemonQueueId = iiDaemonQueueId
         no-lock no-error.
    if not available tqGetDaemonQueueInfo
    then do:
        assign vcMsgScanPro   = trim(#T-5'Scan daemon queue record not found.':100(365)T-5#) + chr(10) +
                                trim(substitute('DaemonQueueID = &1.':U, trim(string(iiDaemonQueueId))))
               oiReturnStatus = -3.
        <M-2 run SetMessage
          (input  vcMsgScanPro (icMessage), 
           input  '':U (icArguments), 
           input  '':U (icFieldName), 
           input  '':U (icFieldValue), 
           input  'E':U (icType), 
           input  3 (iiSeverity), 
           input  '':U (icRowid), 
           input  'BLF-202':U (icFcMsgNumber), 
           input  '' (icFcExplanation), 
           input  '' (icFcIdentification), 
           input  '' (icFcContext), 
           output viFcReturnSuper (oiReturnStatus)) in BScanDaemonProcessor>
        return.                 
    end. /* if not avail tqGetDaemonQueueInfo */
    
    /* ============================================ */
    /* State the Company of the Daemon Queue record */
    /* ============================================ */
    assign vcCompanyIDForNewSession = trim(substring(tqGetDaemonQueueInfo.tcDaemonQueueRefDescription, index(tqGetDaemonQueueInfo.tcDaemonQueueRefDescription, '((':U) + 2,-1,"CHARACTER":U))      
           viCompanyIDForNewSession = integer(substring(vcCompanyIDForNewSession, 1, length(vcCompanyIDForNewSession,"CHARACTER":U) - 2,"CHARACTER":U)) no-error.
    if viCompanyIDForNewSession = 0 or 
       viCompanyIDForNewSession = ? or
       error-status:error 
    then do :
        assign vcMsgScanPro   = trim(#T-6'Internal Scan daemon error: unable to state the entity based on the queue information.':100(366)T-6#) + chr(10) +
                                trim(substitute("Queue-information = &1.":U, trim(tqGetDaemonQueueInfo.tcDaemonQueueRefDescription))) + chr(10) + 
                                trim(substitute("Company = &1.":U, string(viCompanyIDForNewSession))) + chr(10) + 
                                trim(substitute("Error-details = &1.":U, trim(ERROR-STATUS:GET-MESSAGE(1))))                
               oiReturnStatus = -3.
        <M-3 run SetMessage
          (input  vcMsgScanPro (icMessage), 
           input  '':U (icArguments), 
           input  '':U (icFieldName), 
           input  '':U (icFieldValue), 
           input  'E':U (icType), 
           input  3 (iiSeverity), 
           input  '':U (icRowid), 
           input  'BLF-203':U (icFcMsgNumber), 
           input  '' (icFcExplanation), 
           input  '' (icFcIdentification), 
           input  '' (icFcContext), 
           output viFcReturnSuper (oiReturnStatus)) in BScanDaemonProcessor>
        return.
    end. /* if error-status:error */
    assign vcScanComponent  = entry(1,tqGetDaemonQueueInfo.tcDaemonQueueRefDescription,"|":U)
           vcFileShortName  = entry(2,tqGetDaemonQueueInfo.tcDaemonQueueRefDescription,"|":U)
           vcFileFullName   = entry(3,tqGetDaemonQueueInfo.tcDaemonQueueRefDescription,"|":U)
           vcFileRenamed    = entry(4,tqGetDaemonQueueInfo.tcDaemonQueueRefDescription,"|":U)
           vcCreatorUsrLogin = entry(5,tqGetDaemonQueueInfo.tcDaemonQueueRefDescription,"|":U)
           no-error.
    if vcScanComponent = "":U or 
       vcScanComponent = ?    or
       vcFileShortName = "":U or 
       vcFileShortName = ?    or
       vcFileFullName  = "":U or 
       vcFileFullName  = ?    or
       vcFileRenamed   = "":U or 
       vcFileRenamed   = ?    or
       error-status:error 
    then do :
        assign vcMsgScanPro   = trim(#T-7'Internal Scan daemon error: unable to state the detailed data based on the queue information.':100(367)T-7#) + chr(10) +
                                trim(substitute("Queue-information = &1.":U, trim(tqGetDaemonQueueInfo.tcDaemonQueueRefDescription))) + chr(10) + 
                                trim(substitute("Component = &1.":U, vcScanComponent)) + chr(10) + 
                                trim(substitute("File short-name = &1.":U, vcFileShortName)) + chr(10) + 
                                trim(substitute("File full-name = &1.":U, vcFileFullName)) + chr(10) + 
                                trim(substitute("File renamed-name = &1.":U, vcFileRenamed)) + chr(10) + 
                                trim(substitute("Error-details = &1.":U, trim(ERROR-STATUS:GET-MESSAGE(1))))                
               oiReturnStatus = -3.
        <M-4 run SetMessage
          (input  vcMsgScanPro (icMessage), 
           input  '':U (icArguments), 
           input  '':U (icFieldName), 
           input  '':U (icFieldValue), 
           input  'E':U (icType), 
           input  3 (iiSeverity), 
           input  '':U (icRowid), 
           input  'BLF-204':U (icFcMsgNumber), 
           input  '' (icFcExplanation), 
           input  '' (icFcIdentification), 
           input  '' (icFcContext), 
           output viFcReturnSuper (oiReturnStatus)) in BScanDaemonProcessor>
        return.
    end. /* if error-status:error */
    
    /* ============================== */
    /* Process a Daemon Queue record  */
    /* ============================== */
    <M-17 run SwitchSessionCy
       (input  '' (icCompanyCode), 
        input  viCompanyIDForNewSession (iiCompanyId), 
        output viFcReturnSuper (oiReturnStatus)) in BScanDaemonProcessor>
    
    if viFcReturnSuper < 0
    then do:
        assign 
            oiReturnStatus = viFcReturnSuper
            olSuccess = false.
        return.
    end.    
    
    <M-96 run api/bscandaemonperfworkitem/apiprocesssinglescandaemonqueue.p
       (input  '' (icApiLogin), 
        input  '' (icApiPassword), 
        input  '' (icApiExtra), 
        input  viSessionID (iiApiSessionId), 
        input  vcScanComponent (icClassShortName), 
        input  vcFileShortName (icFileShortName), 
        input  vcFileFullName (icFileFullName), 
        input  vcFileRenamed (icFileRenamed), 
        input  vcCreatorUsrLogin (icCreatorUsrLogin), 
        output dataset tFcMessages (ozFcMessagesDS), 
        output viFcReturnSuper (oiReturnStatus))>

    if viFcReturnSuper < 0
    then assign olSuccess = false.
    else assign olSuccess = true.
    
    /* ====================================== */
    /* State return-status = OK               */
    /* ====================================== */
    if oiReturnStatus = -98
    then assign oiReturnStatus = 0.