project QadFinancials > class BExpenseGLMatrix > method ApiGetExpenseGLAllPossibleComb


Parameters


tGetExpenseGLMatrixoutputtemp-table
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


unused


program code (program3/bexpenseglmatrix.p)

/* ================= */
/* clear temp-tables */
/* ================= */
empty temp-table tExpenseCodeItem.
empty temp-table tGetExpenseGLMatrix.
assign viRowid = -1.

/* =============================================================== */
/* search the shared set id that is linked to the currency company */
/* =============================================================== */
<Q-1 run LookupSharedSetForCompany (all) (Read) (NoCache)
          (input viCompanyId, (CompanyId)
           input 'GL':U, (SharedSetType)
           output dataset tqSharedSetForCompany) in BCompany >
find first tqSharedSetForCompany 
     no-lock no-error.
if not available tqSharedSetForCompany
then do:
    assign vcMessage      = trim(substitute(#T-5'The GL shared set is not defined for this entity (ID = &1).':255(23)t-5#,string(viCompanyId)))
           oiReturnStatus = -1.
    
    <M-2 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-1593':U (icFcMsgNumber), 
           input  '' (icFcExplanation), 
           input  '' (icFcIdentification), 
           input  '' (icFcContext), 
           output viFcReturnSuper (oiReturnStatus)) in BExpenseCode>
    return.
end.

/* ================================================== */
/* put all item expense code records in a temp table */
/* ================================================== */
<Q-3 run ExpenseCodeByCodeTypeAct (all) (Read) (NoCache)
          (input '':U, (ExpenseCode)
           input true, (ExpenseCodeIsActive)
           input '':U, (ExpenseCodeType)
           output dataset tqExpenseCodeByCodeTypeAct) in BExpenseCode >
for each tqExpenseCodeByCodeTypeAct where
         tqExpenseCodeByCodeTypeAct.tcExpenseCodeType = {&EXPENSECODETYPE-ITEM} :
    create tExpenseCodeItem.
    assign tExpenseCodeItem.tiItemExpenseCode_ID = tqExpenseCodeByCodeTypeAct.tiExpenseCode_ID
           tExpenseCodeItem.tcItemExpenseCode    = tqExpenseCodeByCodeTypeAct.tcExpenseCode.
end.

/* ======================================== */
/* Read all existing Matrix-records at once */
/* ======================================== */
<Q-4 run ExpenseGLMatrixByExpenseInfo (all) (Read) (NoCache)
          (input ?, (EmployeeExpenseCode)
           input ?, (EmployeeExpenseCode_ID)
           input ?, (ItemExpenseCode)
           input ?, (ItemExpenseCode_ID)
           input viCompanyId, (CompanyId)
           output dataset tqExpenseGLMatrixByExpenseInfo) in BExpenseGLMatrix >

/* ========================================================================================== */    
/* go through all employee expense code records and                                          */
/* create a temp-table record for each employee expense code -item epmloyee code combination */
/* ========================================================================================== */
for each tqExpenseCodeByCodeTypeAct where
         tqExpenseCodeByCodeTypeAct.tcExpenseCodeType = {&EXPENSECODETYPE-EMPLOYEE}
         no-lock :
    for each tExpenseCodeItem 
             no-lock
             by tExpenseCodeItem.tcItemExpenseCode :
        create tGetExpenseGLMatrix.
        assign tGetExpenseGLMatrix.ExpenseGLMatrix_ID     = 0
               tGetExpenseGLMatrix.SharedSet_ID           = tqSharedSetForCompany.tiSharedSet_ID
               tGetExpenseGLMatrix.EmployeeExpenseCode_ID = tqExpenseCodeByCodeTypeAct.tiExpenseCode_ID
               tGetExpenseGLMatrix.tcEmployeeExpenseCode  = tqExpenseCodeByCodeTypeAct.tcExpenseCode
               tGetExpenseGLMatrix.ItemExpenseCode_ID     = tExpenseCodeItem.tiItemExpenseCode_ID
               tGetExpenseGLMatrix.tcItemExpenseCode      = tExpenseCodeItem.tcItemExpenseCode
               tGetExpenseGLMatrix.tc_Status              = "":U
               tGetExpenseGLMatrix.tc_Rowid               = string(viRowid)
               viRowid                                    = viRowid - 1.
        find tqExpenseGLMatrixByExpenseInfo where 
             tqExpenseGLMatrixByExpenseInfo.tiEmployeeExpenseCode_ID  = tGetExpenseGLMatrix.EmployeeExpenseCode_ID and
             tqExpenseGLMatrixByExpenseInfo.tiItemExpenseCode_ID      = tGetExpenseGLMatrix.ItemExpenseCode_ID
             no-lock no-error.
        if available tqExpenseGLMatrixByExpenseInfo
        then assign tGetExpenseGLMatrix.ExpenseGLMatrix_ID  = tqExpenseGLMatrixByExpenseInfo.tiExpenseGLMatrix_ID
                    tGetExpenseGLMatrix.NoAnalysisGL_ID     = tqExpenseGLMatrixByExpenseInfo.tiNoAnalysisGL_ID
                    tGetExpenseGLMatrix.tcNoAnalysisGLCode  = tqExpenseGLMatrixByExpenseInfo.tcNoAnalysisGLCode
                    tGetExpenseGLMatrix.CostCentreGL_ID     = tqExpenseGLMatrixByExpenseInfo.tiCostCentreGL_ID
                    tGetExpenseGLMatrix.tcCostCentreGLCode  = tqExpenseGLMatrixByExpenseInfo.tcCostCentreGLCode
                    tGetExpenseGLMatrix.ProjectGL_ID        = tqExpenseGLMatrixByExpenseInfo.tiProjectGL_ID
                    tGetExpenseGLMatrix.tcProjectGLCode     = tqExpenseGLMatrixByExpenseInfo.tcProjectGLCode.
        else assign tGetExpenseGLMatrix.ExpenseGLMatrix_ID  = 0
                    tGetExpenseGLMatrix.NoAnalysisGL_ID     = 0
                    tGetExpenseGLMatrix.tcNoAnalysisGLCode  = "":U
                    tGetExpenseGLMatrix.CostCentreGL_ID     = 0
                    tGetExpenseGLMatrix.tcCostCentreGLCode  = "":U
                    tGetExpenseGLMatrix.ProjectGL_ID        = 0
                    tGetExpenseGLMatrix.tcProjectGLCode     = "":U.
    end. /* for each tExpenseCodeItem */
    /* ================================================================== */
    /* add blanco item expense code for each employee expense code record */
    /* ================================================================== */
    create tGetExpenseGLMatrix.
    assign tGetExpenseGLMatrix.ExpenseGLMatrix_ID     = 0
           tGetExpenseGLMatrix.SharedSet_ID           = tqSharedSetForCompany.tiSharedSet_ID
           tGetExpenseGLMatrix.EmployeeExpenseCode_ID = tqExpenseCodeByCodeTypeAct.tiExpenseCode_ID
           tGetExpenseGLMatrix.tcEmployeeExpenseCode  = tqExpenseCodeByCodeTypeAct.tcExpenseCode
           tGetExpenseGLMatrix.ItemExpenseCode_ID     = 0
           tGetExpenseGLMatrix.tcItemExpenseCode      = "":U
           tGetExpenseGLMatrix.tc_Status              = "":U
           tGetExpenseGLMatrix.tc_Rowid               = string(viRowid)
           viRowid                                    = viRowid - 1.
    find tqExpenseGLMatrixByExpenseInfo where 
         tqExpenseGLMatrixByExpenseInfo.tiEmployeeExpenseCode_ID  = tGetExpenseGLMatrix.EmployeeExpenseCode_ID and
         tqExpenseGLMatrixByExpenseInfo.tiItemExpenseCode_ID      = tGetExpenseGLMatrix.ItemExpenseCode_ID
         no-lock no-error.
    if available tqExpenseGLMatrixByExpenseInfo
    then assign tGetExpenseGLMatrix.ExpenseGLMatrix_ID  = tqExpenseGLMatrixByExpenseInfo.tiExpenseGLMatrix_ID
                tGetExpenseGLMatrix.NoAnalysisGL_ID     = tqExpenseGLMatrixByExpenseInfo.tiNoAnalysisGL_ID
                tGetExpenseGLMatrix.tcNoAnalysisGLCode  = tqExpenseGLMatrixByExpenseInfo.tcNoAnalysisGLCode
                tGetExpenseGLMatrix.CostCentreGL_ID     = tqExpenseGLMatrixByExpenseInfo.tiCostCentreGL_ID
                tGetExpenseGLMatrix.tcCostCentreGLCode  = tqExpenseGLMatrixByExpenseInfo.tcCostCentreGLCode
                tGetExpenseGLMatrix.ProjectGL_ID        = tqExpenseGLMatrixByExpenseInfo.tiProjectGL_ID
                tGetExpenseGLMatrix.tcProjectGLCode     = tqExpenseGLMatrixByExpenseInfo.tcProjectGLCode.
    else assign tGetExpenseGLMatrix.ExpenseGLMatrix_ID  = 0
                tGetExpenseGLMatrix.NoAnalysisGL_ID     = 0
                tGetExpenseGLMatrix.tcNoAnalysisGLCode  = "":U
                tGetExpenseGLMatrix.CostCentreGL_ID     = 0
                tGetExpenseGLMatrix.tcCostCentreGLCode  = "":U
                tGetExpenseGLMatrix.ProjectGL_ID        = 0
                tGetExpenseGLMatrix.tcProjectGLCode     = "":U.
end. /* for each tqExpenseCodeByCodeTypeAct where */


Sample code: how to call this method through RPCRequestService (QXtend Inbound)

define temp-table ttContext no-undo
    field propertyQualifier as character
    field propertyName as character
    field propertyValue as character
    index entityContext is primary unique
        propertyQualifier
        propertyName
    index propertyQualifier
        propertyQualifier.

define dataset dsContext for ttContext.

define variable vhContextDS as handle no-undo.
define variable vhExceptionDS as handle no-undo.
define variable vhServer as handle no-undo.
define variable vhInputDS as handle no-undo.
define variable vhInputOutputDS as handle no-undo.
define variable vhOutputDS as handle no-undo.
define variable vhParameter as handle no-undo.

/* Create context */
create ttContext.
assign ttContext.propertyName = "programName"
       ttContext.propertyValue = "BExpenseGLMatrix".
create ttContext.
assign ttContext.propertyName = "methodName"
       ttContext.propertyValue = "ApiGetExpenseGLAllPossibleComb".
create ttContext.
assign ttContext.propertyName = "applicationId"
       ttContext.propertyValue = "fin".
create ttContext.
assign ttContext.propertyName = "entity"
       ttContext.propertyValue = "1000".
create ttContext.
assign ttContext.propertyName = "userName"
       ttContext.propertyValue = "mfg".
create ttContext.
assign ttContext.propertyName = "password"
       ttContext.propertyValue = "".

/* Connect the AppServer */
create server vhServer.
vhServer:connect("-URL <appserver-url>").

if not vhServer:connected()
then do:
    message "Could not connect AppServer" view-as alert-box error title "Error".
    return.
end.

/* Run */
assign vhContextDS = dataset dsContext:handle.

run program/rpcrequestservice.p on vhServer
    (input-output dataset-handle vhContextDS by-reference,
           output dataset-handle vhExceptionDS,
     input        dataset-handle vhInputDS by-reference,
     input-output dataset-handle vhInputOutputDS by-reference,
           output dataset-handle vhOutputDS).

/* Handle output however you want, in this example, we dump it to xml */
if valid-handle(vhExceptionDS)
then vhExceptionDS:write-xml("file", "Exceptions.xml", true).

if valid-handle(vhOutputDS)
then vhOutputDS:write-xml("file", "Output.xml", true).

/* Cleanup */
vhServer:disconnect().
assign vhServer = ?.

if valid-handle(vhInputDS)
then delete object vhInputDS.

if valid-handle(vhOutputDS)
then delete object vhOutputDS.

if valid-handle(vhExceptionDS)
then delete object vhExceptionDS.