project QadFinancials > class BMultiCyProcessor > method ProcessRequestAsyncInit

Description

Runs a single business function over all entities in a single entity group. Each call will use the same parameter set.


Parameters


icBusinessClassShortNameinputcharacterName of the business component containing the business function to run.
icMethodNameinputcharacterName of the business function to run.
When not specified, default 'LoadAndUpdateInstanceData' will be used.
icCompanyGroupCodeinputcharactername of the entity group
icActivityCodeinputcharacterParameter values for the business function. The business function itself defines the implementation of this parameter.
izInstanceDatainputdataset-handleParameter values for the business function. The business function itself defines the implementation of this parameter.
icUnmanagedDatainputcharacterParameter values for the business function. The business function itself defines the implementation of this parameter.
ocNextCompanyCodeoutputcharacterCode of the next entity to be processed
oiNumberOfCompaniesInCyGroupoutputintegerNumber of the entities in the entity group
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


unused


program code (program1/bmulticyprocessor.p)

/* ================================================================= */
/* Input parametrs normalization                                     */
/* ================================================================= */
if icMethodName = "" or icMethodName = ? then assign icMethodName = "LoadAndUpdateInstanceData".


/* ================================================================= */
/* Store all data needed for asynchronous processing to component    */
/* (it is stored in component data as state data)                    */
/* ================================================================= */
assign vcAsyncBusinessClassShortName = icBusinessClassShortName
       vcAsyncMethodName             = icMethodName
       vcAsyncCompanyGroupCode       = icCompanyGroupCode
       vcAsyncActivityCode           = icActivityCode
       vcAsyncUnmanagedData          = icUnmanagedData
       vhAsyncInstanceData           = izInstanceData.

/* ================================================================= */
/* Store also content of dynamic dataset passed as input parameter   */
/* to this method. We need to keep it becuase it is required later.  */
/* And because component can be closed between execution, schema and */
/* and content is stored in the class instace temp table. Logically  */
/* it would be easiest to store in longchar, but it does not support */
/* state keeping. Therefore segmentation and temp table is used.     */
/* ================================================================= */

/* ================================================================= *
 * This block of the functionality is commented for the moment. To   *
 * don't store content of dataset as state, we are running this      *
 * component always in the LAN mode.                                 *
 * See MultiCyProcessorAdapter.ProcessRequestAsync                   *
 * ================================================================= */
/* 
izInstanceData:write-xml("LONGCHAR", 
                         vpAsyncInstanceData,
                         false,
                         ?,       /* default formating - utf-8    */
                         "",      /* no schema location file      */
                         true).   /* write schema location to xml */

<M-12 run ConvertLongCharToTempTable
   (input  vpAsyncInstanceData (ipLongText), 
    output tAsyncInstanceDataSerialized (tAsyncInstanceDataSerialized), 
    output viFcReturnSuper (oiReturnStatus)) in BMultiCyProcessor>
if viFcReturnSuper < 0 or viFcReturnSuper > 0 and oiReturnStatus = 0 then assign oiReturnStatus = viFcReturnSuper.
if oiReturnStatus < 0 then return.                          
*/

/* ================================================================= */
/* Store session variables                                           */
/* ================================================================= */
assign viSessionSavedID               = viSessionID
       viSessionSavedOC               = viSessionOC
       vhSessionSavedInst             = vhSessionInst
       vcAsyncCurrentCompanyCode      = vcCompanyCode
       viAsyncReturnStatus            = 0
       viAsyncCurrentCompReturnStatus = -98
       viNumberOfCompaniesInCyGroup   = 0
       viNumberOfCompaniesProcessed   = 0
       viSessionID                    = 0
       viSessionOC                    = 0
       vhSessionInst                  = ?.


/* ================================================================= */
/* Initiate some data used during execution                          */
/* ================================================================= */
empty temp-table tProcessErrors.

                                          
/* ================================================================= */
/* Validate input data.                                              */
/* ================================================================= */
if vcAsyncBusinessClassShortName = "" or
   vcAsyncBusinessClassShortName = ?  or
   vcAsyncCompanyGroupCode = ""       or
   vcAsyncCompanyGroupCode = ?
then do:
    assign vcMessage = #T-73'Input parameters do not contain valid values':255(999890914)T-73#
           vcContext = "vcAsyncBusinessClassShortName=&1|vcAsyncCompanyGroupCode=&2":U
           vcContext = replace(vcContext,"|":U, chr(2))
           vcContext = substitute(vcContext, vcAsyncBusinessClassShortName, vcAsyncCompanyGroupCode). 
    
    <M-55 run SetMessage
       (input  vcMessage (icMessage), 
        input  '':U (icArguments), 
        input  '':U (icFieldName), 
        input  '':U (icFieldValue), 
        input  'E':U (icType), 
        input  3 (iiSeverity), 
        input  '':U (icRowid), 
        input  'qadfin-656675':U (icFcMsgNumber), 
        input  '':U (icFcExplanation), 
        input  '':U (icFcIdentification), 
        input  vcContext (icFcContext), 
        output viFcReturnSuper (oiReturnStatus)) in BMultiCyProcessor>
    
    assign oiReturnStatus = -1.
    return.
end. /* icBusinessClassShortName = "" or icBusinessClassShortName = ? or icCompanyGroupCode = "" or icCompanyGroupCode = ? */

/* ================================================================= */
/* Validate Entity group and build temp-table with all entities of   */
/* the entity group where processing is done                         */
/* ================================================================= */
    if not can-find (CYGroup where CYGroup.CYGroupCode = vcAsyncCompanyGroupCode)
    then do:
        assign vcMessage = #T-86'Entity group &1 is not defined in the system.':255(249684263)T-86#
               vcMessage = substitute(vcMessage, vcAsyncCompanyGroupCode).
               
        <M-82 run SetMessage
           (input  vcMessage (icMessage), 
            input  '':U (icArguments), 
            input  '':U (icFieldName), 
            input  '':U (icFieldValue), 
            input  'E':U (icType), 
            input  3 (iiSeverity), 
            input  '':U (icRowid), 
            input  'qadfin-394871':U (icFcMsgNumber), 
            input  '':U (icFcExplanation), 
            input  '':U (icFcIdentification), 
            input  '':U (icFcContext), 
            output viFcReturnSuper (oiReturnStatus)) in BMultiCyProcessor>
        
        assign oiReturnStatus = -1.
        return.
    end. /* not vlFcOk */
    
    /* Get all entities of the entity group */
    <Q-11 run CyGroupCompanyByGrpCy (all) (Read) (NoCache)
       (input 0, (CompanyId)
        input 0, (GroupID)
        input vcAsyncCompanyGroupCode, (GroupCode)
        output dataset tqCyGroupCompanyByGrpCy) in BCompanyGroup>
        
    /* Current entity must be member of the selected entity group */
    if not can-find (first tqCyGroupCompanyByGrpCy where 
                           tqCyGroupCompanyByGrpCy.tcCompanyCode = vcAsyncCurrentCompanyCode)
    then do:
        assign vcMessage = #T-62'The current entity (&1) should belong to the specified entity-group (&2).':255(490312612)T-62#
               vcMessage = substitute(vcMessage, vcAsyncCurrentCompanyCode, icCompanyGroupCode).
        <M-10 run SetMessage
           (input  vcMessage (icMessage), 
            input  '' (icArguments), 
            input  '' (icFieldName), 
            input  '' (icFieldValue), 
            input  'E' (icType), 
            input  3 (iiSeverity), 
            input  '' (icRowid), 
            input  'qadfin-340751':U (icFcMsgNumber), 
            input  '' (icFcExplanation), 
            input  '' (icFcIdentification), 
            input  '' (icFcContext), 
            output viFcReturnSuper (oiReturnStatus)) in BMultiCyProcessor>
        oiReturnStatus = -1.
        return.
    end. /* not can-find (first tqCyGroupCompanyByGrpCy where tqCyGroupCompanyByGrpCy.tcCompanyCode = vcCompanyCode) */
    
    
    /* Build table of all entities where processing should be done */
    assign viNumberOfCompaniesInCyGroup = 0.
    empty temp-table tAsyncProcessCompanies.
    
    for each tqCyGroupCompanyByGrpCy where
             tqCyGroupCompanyByGrpCy.tcCyGroupCode = vcAsyncCompanyGroupCode:
        
        create tAsyncProcessCompanies.
        assign tAsyncProcessCompanies.tcCompanyCode = tqCyGroupCompanyByGrpCy.tcCompanyCode
               tAsyncProcessCompanies.tlIsProcessed = false.
               
        /* Count total number of the entities in the entity group */
        assign viNumberOfCompaniesInCyGroup = viNumberOfCompaniesInCyGroup + 1.
             
    end. /* for each tqCyGroupCompanyByGrpCy where */

finally:
    assign oiNumberOfCompaniesInCyGroup = viNumberOfCompaniesInCyGroup
           ocNextCompanyCode            = vcCompanyCode.                /* we are starting with the current entity */
end finally.