project QadFinancials > class BCubeDaemonQueue > method CreateFRWCubeDaemonQueue

Description

This method will create DaemonQueue records


Parameters


oiReturnStatusoutputintegerReturn status of the method.


Internal usage


QadFinancials
method BCubeDaemonProcessor.LoadExternalWork


program code (program6/bcubedaemonqueue.p)

/* ===================================== */
/* Start with a clean and empty instance */
/* ===================================== */
<M-40 run ClearData  (output viFcReturnSuper (oiReturnStatus)) in BCubeDaemonQueue>
if viFcReturnSuper <> 0
then oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then return.

/* ============================== */
/* Find the FRWCube Daemon-record */
/* ============================== */
<Q-54 run DaemonPrim (all) (Read) (NoCache)
   (input {&CUBEDAEMON}, (DaemonName)
    input ?, (DaemonId)
    output dataset tqDaemonPrim) in BBaseDaemon>
find tqDaemonPrim where
     tqDaemonPrim.tcDaemonName = {&CUBEDAEMON}
     no-lock no-error.
if not available tqDaemonPrim
then do:
    assign vcCubeDaemonQueueMsg = trim(#T-48'Cube daemon record does not exist.':100(307844977)T-48#)
           oiReturnStatus       = -3.
    <M-49 run SetMessage
       (input  vcCubeDaemonQueueMsg (icMessage), 
        input  '':U (icArguments), 
        input  '':U (icFieldName), 
        input  {&CUBEDAEMON} (icFieldValue), 
        input  'E':U (icType), 
        input  2 (iiSeverity), 
        input  '':U (icRowid), 
        input  'qadfin-912594':U (icFcMsgNumber), 
        input  '' (icFcExplanation), 
        input  '' (icFcIdentification), 
        input  '' (icFcContext), 
        output viFcReturnSuper (oiReturnStatus)) in BCubeDaemonQueue>       
    return.
end. /* find tqDaemonPrim where */

/* ============================================== */
/* Get the next 100 QFRWCube records              */
/* ============================================== */
assign viNbrRecordsToRead = viCountErrorQueues + 100.

<Q-30 run QFRWCubeByCompanyIDRowID (firstviNbrRecordsToRead) (Read) (NoCache)
   (input ?, (CompanyId)
    input ?, (DaemonId)
    output dataset tqQFRWCubeByCompanyIDRowID) in BQFRWCube>

/* Start the Persistence Layer for BQposting */
if can-find (first tqQFRWCubeByCompanyIDRowID) and 
                   vhPerstistenceLayerHandleLocal = ?
then do:
    <M-15 run StartPersistence
       (output vhPerstistenceLayerHandleLocal (ohPersistence), 
        output viFcReturnSuper (oiReturnStatus)) in BCubeDaemonQueue>
end. /* IF can-find (first tqQPostingLineByCompanyIDROWID) and .. */

/* ============================================== */
/* Create the corresponding fcDaemonQueue records */
/* ============================================== */      
assign viCount = 0.
       viCountErrorQueues = 0.
       
for each tqQFRWCubeByCompanyIDRowID no-lock:

    assign viCountErrorQueues = viCountErrorQueues + 1.

    /* if DaemonQueue not correct filled, skip it */
    if tqQFRWCubeByCompanyIDRowID.tiQFRWCube_ID = 0 or 
       tqQFRWCubeByCompanyIDRowID.tiQFRWCube_ID = ? or 
       tqQFRWCubeByCompanyIDRowID.tiCompany_ID  = 0 or
       tqQFRWCubeByCompanyIDRowID.tiCompany_ID  = ?
    then next.
    
    /* if DaemonQueue already exists, skip it */    
    if tqQFRWCubeByCompanyIDRowID.tiDaemonQueueId <> 0 and 
       tqQFRWCubeByCompanyIDRowID.tiDaemonQueueId <> ? and 
       tqQFRWCubeByCompanyIDRowID.tiDaemonId = tqDaemonPrim.tiDaemonId
    then next.

    /* if qRecord is still locked, then skip it */
    assign vcRowID = ?.
    if vhPerstistenceLayerHandleLocal <> ?
    then do :        
          assign vcRowID = entry (1,tqQFRWCubeByCompanyIDRowID.tc_rowid).
          if vcRowID <> '' and vcRowID <> ?
          then do :
             assign vhFcComponent = vhPerstistenceLayerHandleLocal.
             if <M-53 RecordIsLocked
                   (input  'QFRWCube':U (icTableName), 
                    input  vcRowID (icRecordRowid)) in Progress> = true
             then next.
         end. /* IF vcRowID <> '' and vcRowID <> ? */
     end. /* IF vhPerstistenceLayerHandleLocal <> ? */
     
     assign viCountErrorQueues = viCountErrorQueues - 1.
      
    <M-4 run AddDetailLine
       (input  'fcDaemonQueue':U (icTable), 
        input  ? (icParentRowid), 
        output oiReturnStatus (oiReturnStatus)) in BCubeDaemonQueue>                      
    if oiReturnStatus <> 0
    then leave.

    assign tfcDaemonQueue.DaemonId                  = tqDaemonPrim.tiDaemonId
           tfcDaemonQueue.DaemonQueueStatus         = {&DAEMONQUEUESTATUS-WAITING}
           tfcDaemonQueue.DaemonQueuePriority       = 1
           tfcDaemonQueue.DaemonQueueRef            = string(tqQFRWCubeByCompanyIDRowID.tiQFRWCube_ID)
           tfcDaemonQueue.DaemonQueueRefDescription = trim(tqQFRWCubeByCompanyIDRowID.tcQFRWCubeInfo) + ' ((':U + trim(string(tqQFRWCubeByCompanyIDRowID.tiCompany_ID)) + '))':U
           tfcDaemonQueue.DaemonQueueReqStartDate   = ?
           tfcDaemonQueue.DaemonQueueReqStartTime   = 0.

    /* Just process first 100 records  */
    assign viCount = viCount + 1.
    if viCount > 100
    then leave.
    
end.
   
if oiReturnStatus < 0
then return.

if viCount > 0
then do :

    /* ===================================================================== */
    /* Run Validate Component BCubeDaemonQueue  - note this is a void method */
    /* ==================================================================== */
    <M-55 run ValidateBC  (output viFcReturnSuper (oiReturnStatus)) in BCubeDaemonQueue>
    if viFcReturnSuper < 0 or (viFcReturnSuper > 0 and oiReturnStatus = 0)
    then assign oiReturnStatus = viFcReturnSuper.   
    if oiReturnStatus < 0
    then return.    
    
    /* ==================== */
    /* Run Addition Updates */
    /* ==================== */
    <M-27 run AdditionalUpdates  (output viFcReturnSuper (oiReturnStatus)) in BCubeDaemonQueue>
    if viFcReturnSuper < 0 or (viFcReturnSuper > 0 and oiReturnStatus = 0)
    then assign oiReturnStatus = viFcReturnSuper.        
    if oiReturnStatus < 0
    then return.    
    
    /* ============================================================== */
    /* Run Datasave for BCubeDaemonQueue                           */
    /* ============================================================== */
    <M-96 run DataSave  (output viFcReturnSuper (oiReturnStatus)) in BCubeDaemonQueue>
    if viFcReturnSuper < 0 or (viFcReturnSuper > 0 and oiReturnStatus = 0)
    then assign oiReturnstatus = viFcReturnSuper.        
    if oiReturnStatus < 0
    then return.   
 
end. /* if viCount */