project QadFinancials > class BDivision > method ApiSelectDivisionCOAMask

API query

Description

Query procedure to get Sub-accounts with respect of defined COA Masks


Parameters


tFilterinputtemp-table
tqApiSelectDivisionCOAMaskoutputtemp-table
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


unused


program code (program6/bdivision.p)

define buffer bDivisionForCOAMaskRangeSelect for tqDivisionForCOAMaskRangeSelect.

/* ====================================================================================== *
 * Method:     ApiSelectDivisionCOAMask                                                   *
 * Desc:       This method is used to retrieve all Sub-accounts which fits entered        *
 *             filtering criteria and also there is valid COA Mask for this Sub-account   *
 * -------------------------------------------------------------------------------------- *
 * Input parameters: Sub-account                                                          *
 *                   Description                                                          *
 *                   Active                                                               *
 *                   BudgetGroup                                                          *
 *                   Sub-Account COA Mask                                                 *
 * ====================================================================================== */

assign oiReturnStatus = -98
       viLocalReturn  = 0.

QUERY_BLOCK:
do on error undo, return:
    empty temp-table tqApiSelectDivisionCOAMask.

    /* Get COA Mask definition from Domain */                                                                 
    assign vhFcComponent = vhCacher.
    <M-2 run GetLogicalValueFromSession
       (input  viSessionID (iiSessionId), 
        input  {&COAMASK-ISMASKDIV} (icDataItemName), 
        output vlCOAMaskDiv (olValue), 
        output viFcReturnSuper (oiReturnStatus)) in Cacher>
    if viFcReturnSuper <> 0 then assign viLocalReturn = viFcReturnSuper.
    if viFcReturnSuper <  0 then leave QUERY_BLOCK.
    
    assign vhFcComponent = vhCacher.
    <M-3 run GetLogicalValueFromSession
       (input  viSessionID (iiSessionId), 
        input  {&COAMASK-ISMASKDIVALL} (icDataItemName), 
        output vlCOAMaskDivAll (olValue), 
        output viFcReturnSuper (oiReturnStatus)) in Cacher>
    if viFcReturnSuper <> 0 then assign viLocalReturn = viFcReturnSuper.
    if viFcReturnSuper <  0 then leave QUERY_BLOCK.


    assign vhFcComponent = vhCacher.
    <M-6 run GetIntegerValueFromSession
       (input  viSessionID (iiSessionId), 
        input  'SharedSetForSUBACCOUNTCOAMASK':U (icDataItemName), 
        output viCOAMaskDivSharedSetId (oiValue), 
        output viFcReturnSuper (oiReturnStatus)) in Cacher>
    if viFcReturnSuper <> 0 then assign viLocalReturn = viFcReturnSuper.
    if viFcReturnSuper <  0 then leave QUERY_BLOCK.

    assign vhFcComponent = vhCacher.
    <M-9 run GetIntegerValueFromSession
       (input  viSessionID (iiSessionId), 
        input  'SharedSetForGL':U (icDataItemName), 
        output viGLSharedSetId (oiValue), 
        output viFcReturnSuper (oiReturnStatus)) in Cacher>
    if viFcReturnSuper <> 0 then assign viLocalReturn = viFcReturnSuper.
    if viFcReturnSuper <  0 then leave QUERY_BLOCK.
    
    
    /* Get values of filtering parameters */
    <M-1 run SelectDivisionCOAMaskFilter
       (input-output vcDivisionEq (bcDivisionEq), 
        input-output vcDivisionNotEq (bcDivisionNotEq), 
        input-output vcDivisionFrom (bcDivisionFrom), 
        input-output vcDivisionTo (bcDivisionTo), 
        input-output vcDivisionMatches (bcDivisionContains), 
        input-output vcDivisionDescEq (bcDivisionDescEq), 
        input-output vcDivisionDescNotEq (bcDivisionDescNotEq), 
        input-output vcDivisionDescFrom (bcDivisionDescFrom), 
        input-output vcDivisionDescTo (bcDivisionDescTo), 
        input-output vcDivisionDescMatches (bcDivisionDescContains), 
        input-output vlActive (blActive), 
        input-output vcBudgetGroupEq (bcBudgetGroupEq), 
        input-output vcBudgetGroupNotEq (bcBudgetGroupNotEq), 
        input-output vcBudgetGroupFrom (bcBudgetGroupFrom), 
        input-output vcBudgetGroupTo (bcBudgetGroupTo), 
        input-output vcBudgetGroupMatches (bcBudgetGroupContains), 
        input-output vcGLCode (bcGLCode), 
        output viFcReturnSuper (oiReturnStatus)) in BDivision>
    if viFcReturnSuper <> 0 then assign viLocalReturn = viFcReturnSuper.
    if viFcReturnSuper <  0 then leave QUERY_BLOCK.

    
    /* Start building of resulting data set */
    assign viSeq = 1.


    /* if COA Mask Sub-account is activated filter on COA mask */
    if vlCOAMaskDiv     and
       vcGLCode <> ?    and
       vcGLCode <> "":U
    then do:
        /* Get those divisions which fist's entered GL account */
        <Q-8 run DivisionForCOAMaskRangeSelect (all) (Read) (NoCache)
           (input viCompanyId, (CompanyId)
            input vcDivisionEq, (DivisionCodeEqual)
            input vcDivisionNotEq, (DivisionCodeNotEqual)
            input vcDivisionTo, (DivisionCodeTo)
            input vcDivisionFrom, (DivisionCodeFrom)
            input vcDivisionMatches, (DivisionCodeMatches)
            input viCOAMaskDivSharedSetId, (COAMaskDivSharedSetId)
            input vcDivisionDescEq, (DivisionDescEq)
            input vcDivisionDescNotEq, (DivisionDescNotEq)
            input vcDivisionDescFrom, (DivisionDescFrom)
            input vcDivisionDescTo, (DivisionDescTo)
            input vcDivisionDescMatches, (DivisionDescMatches)
            input vcBudgetGroupEq, (BudgetGroupEq)
            input vcBudgetGroupNotEq, (BudgetGroupNotEq)
            input vcBudgetGroupFrom, (BudgetGroupFrom)
            input vcBudgetGroupTo, (BudgetGroupTo)
            input vcBudgetGroupMatches, (BudgetGroupMatches)
            input vcGLCode, (GLCode)
            input viGLSharedSetId, (GLSharedSetId)
            input vlActive, (DivisionIsActive)
            output dataset tqDivisionForCOAMaskRangeSelect) in BDivision >

        for each tqDivisionForCOAMaskRangeSelect 
            group by tqDivisionForCOAMaskRangeSelect.tcDivisionCode:

            if first-of(tqDivisionForCOAMaskRangeSelect.tcDivisionCode) and
               not can-find(first bDivisionForCOAMaskRangeSelect where
                                  bDivisionForCOAMaskRangeSelect.tiDivision_ID       = tqDivisionForCOAMaskRangeSelect.tiDivision_ID and 
                                  bDivisionForCOAMaskRangeSelect.tlCOAMaskDivGLIsNeg = true)
            then do:
                create tqApiSelectDivisionCOAMask.
                assign tqApiSelectDivisionCOAMask.tiDivision_ID         = tqDivisionForCOAMaskRangeSelect.tiDivision_ID
                       tqApiSelectDivisionCOAMask.tcDivisionCode        = tqDivisionForCOAMaskRangeSelect.tcDivisionCode
                       tqApiSelectDivisionCOAMask.tcDivisionDescription = tqDivisionForCOAMaskRangeSelect.tcDivisionDescription
                       tqApiSelectDivisionCOAMask.tlDivisionIsActive    = tqDivisionForCOAMaskRangeSelect.tlDivisionIsActive
                       tqApiSelectDivisionCOAMask.tcBudgetGroupCode     = tqDivisionForCOAMaskRangeSelect.tcBudgetGroupCode
                       tqApiSelectDivisionCOAMask.tc_Rowid              = string(viSeq)
                       tqApiSelectDivisionCOAMask.ti_Sequence           = viSeq
                       viSeq                                            = viSeq + 1.

            end.
        end. /* for each tqDivisionForCOAMaskRangeSelect */


         /* If empty COA Mask on Sub-acconts means Sllow all, then take also these sub-accounts */
        if vlCOAMaskDivAll
        then do:
            <Q-5 run DivisionForCOAMaskSelect (all) (Read) (NoCache)
               (input viCompanyId, (CompanyId)
                input vcDivisionEq, (DivisionCodeEqual)
                input vcDivisionNotEq, (DivisionCodeNotEqual)
                input vcDivisionTo, (DivisionCodeTo)
                input vcDivisionFrom, (DivisionCodeFrom)
                input vcDivisionMatches, (DivisionCodeMatches)
                input viCOAMaskDivSharedSetId, (COAMaskDivSharedSetId)
                input vcDivisionDescEq, (DivisionDescEq)
                input vcDivisionDescNotEq, (DivisionDescNotEq)
                input vcDivisionDescFrom, (DivisionDescFrom)
                input vcDivisionDescTo, (DivisionDescTo)
                input vcDivisionDescMatches, (DivisionDescMatches)
                input vcBudgetGroupEq, (BudgetGroupEq)
                input vcBudgetGroupNotEq, (BudgetGroupNotEq)
                input vcBudgetGroupFrom, (BudgetGroupFrom)
                input vcBudgetGroupTo, (BudgetGroupTo)
                input vcBudgetGroupMatches, (BudgetGroupMatches)
                input vlActive, (DivisionIsActive)
                output dataset tqDivisionForCOAMaskSelect) in BDivision >
            
            for each tqDivisionForCOAMaskSelect:
                /* Take only those divisions, which does not have linked COA Mask in the domain */
                if tqDivisionForCOAMaskSelect.tiProfileLink_ID <> 0 and
                   tqDivisionForCOAMaskSelect.tiProfileLink_ID <> ?
                then next.

                create tqApiSelectDivisionCOAMask.
                assign tqApiSelectDivisionCOAMask.tiDivision_ID         = tqDivisionForCOAMaskSelect.tiDivision_ID
                       tqApiSelectDivisionCOAMask.tcDivisionCode        = tqDivisionForCOAMaskSelect.tcDivisionCode
                       tqApiSelectDivisionCOAMask.tcDivisionDescription = tqDivisionForCOAMaskSelect.tcDivisionDescription
                       tqApiSelectDivisionCOAMask.tlDivisionIsActive    = tqDivisionForCOAMaskSelect.tlDivisionIsActive
                       tqApiSelectDivisionCOAMask.tcBudgetGroupCode     = tqDivisionForCOAMaskSelect.tcBudgetGroupCode
                       tqApiSelectDivisionCOAMask.tc_Rowid              = string(viSeq)
                       tqApiSelectDivisionCOAMask.ti_Sequence           = viSeq
                       viSeq                                            = viSeq + 1.
            end. /* for each tqDivisionForCOAMaskSelect: */
        end. /* if vlCOAMaskDivAll */
    end. /* if vlCOAMaskDiv */
    /* COA Mask on Sub-account is not activated */
    else do:
         <Q-7 run DivisionForCOAMaskSelect (all) (Read) (NoCache)
            (input viCompanyId, (CompanyId)
             input vcDivisionEq, (DivisionCodeEqual)
             input vcDivisionNotEq, (DivisionCodeNotEqual)
             input vcDivisionTo, (DivisionCodeTo)
             input vcDivisionFrom, (DivisionCodeFrom)
             input vcDivisionMatches, (DivisionCodeMatches)
             input viCOAMaskDivSharedSetId, (COAMaskDivSharedSetId)
             input vcDivisionDescEq, (DivisionDescEq)
             input vcDivisionDescNotEq, (DivisionDescNotEq)
             input vcDivisionDescFrom, (DivisionDescFrom)
             input vcDivisionDescTo, (DivisionDescTo)
             input vcDivisionDescMatches, (DivisionDescMatches)
             input vcBudgetGroupEq, (BudgetGroupEq)
             input vcBudgetGroupNotEq, (BudgetGroupNotEq)
             input vcBudgetGroupFrom, (BudgetGroupFrom)
             input vcBudgetGroupTo, (BudgetGroupTo)
             input vcBudgetGroupMatches, (BudgetGroupMatches)
             input vlActive, (DivisionIsActive)
             output dataset tqDivisionForCOAMaskSelect) in BDivision >
        
        for each tqDivisionForCOAMaskSelect:
            create tqApiSelectDivisionCOAMask.
            assign tqApiSelectDivisionCOAMask.tiDivision_ID         = tqDivisionForCOAMaskSelect.tiDivision_ID
                   tqApiSelectDivisionCOAMask.tcDivisionCode        = tqDivisionForCOAMaskSelect.tcDivisionCode
                   tqApiSelectDivisionCOAMask.tcDivisionDescription = tqDivisionForCOAMaskSelect.tcDivisionDescription
                   tqApiSelectDivisionCOAMask.tlDivisionIsActive    = tqDivisionForCOAMaskSelect.tlDivisionIsActive
                   tqApiSelectDivisionCOAMask.tcBudgetGroupCode     = tqDivisionForCOAMaskSelect.tcBudgetGroupCode
                   tqApiSelectDivisionCOAMask.tc_Rowid              = string(viSeq)
                   tqApiSelectDivisionCOAMask.ti_Sequence           = viSeq
                   viSeq                                            = viSeq + 1.
        end.
    end. /* COA Mask on Sub-account is not activated */
end. /* QUERY_BLOCK */

assign oiReturnStatus = viLocalReturn.


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 = "BDivision".
create ttContext.
assign ttContext.propertyName = "methodName"
       ttContext.propertyValue = "ApiSelectDivisionCOAMask".
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 = "".

/* Create input dataset */
create dataset vhInputDS.
vhInputDS:read-xmlschema("file", "xml/bdivision.apiselectdivisioncoamask.i.xsd", ?).
vhParameter = vhInputDS:get-buffer-handle("tFilter").
vhParameter:buffer-create().
assign vhParameter::<field-name-1> = <field-value-1>
       vhParameter::<field-name-2> = <field-value-2>
       ...

/* 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.