Parameters
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.