Árvore de páginas



The routines are executed through Web Services, therefore these executions must be connected and configured in the TOTVS Tec server.

Objective

The routines can be executed in Logix from workflow events of Fluig, allowing parameters to be sent and business rules for the process to be returned.


    To perform the execution of a Logix routine from an event, you must follow the steps below:

    1. Use the customized Dataset LogixExecServiceDS.
    2. Send the parameters below as constraints to Dataset:
      • Code of the company that will be used in the business rule;
      • Routine of workflow that will be executed; and
      • Values that will be used in the execution of the routine*.
    3. Retrieve the result in the execution of the routine through the default getValue function of the Dataset object*.

    * The values that must be sent and the results of the routine follow the JSON string format.

    Exemplo
    function afterProcessFinish(processId) {
        var values, company, c1, c2, c3, dataset, result;
        //Retrieves the values of the process.
        values = {
            "componente": {
                "cod_empresa": new String(hAPI.getCardValue("cod_empresa")),
                "cod_item_compon": new String(hAPI.getCardValue("cod_item_compon")),
                "cod_grade_compon_1_orig": new String(hAPI.getCardValue("cod_grade_compon_1_orig")),
                "cod_grade_compon_2_orig": new String(hAPI.getCardValue("cod_grade_compon_2_orig")),
                "cod_grade_compon_3_orig": new String(hAPI.getCardValue("cod_grade_compon_3_orig")),
                "cod_grade_compon_4_orig": new String(hAPI.getCardValue("cod_grade_compon_4_orig")),
                "cod_grade_compon_5_orig": new String(hAPI.getCardValue("cod_grade_compon_5_orig")),
                "acao": new String(hAPI.getCardValue("acao")),
                "cod_item_compon_dest": new String(hAPI.getCardValue("cod_item_compon_dest")),
                "cod_grade_compon_1_dest": new String(hAPI.getCardValue("cod_grade_compon_1_dest")),
                "cod_grade_compon_2_dest": new String(hAPI.getCardValue("cod_grade_compon_2_dest")),
                "cod_grade_compon_3_dest": new String(hAPI.getCardValue("cod_grade_compon_3_dest")),
                "cod_grade_compon_4_dest": new String(hAPI.getCardValue("cod_grade_compon_4_dest")),
                "cod_grade_compon_5_dest": new String(hAPI.getCardValue("cod_grade_compon_5_dest")),
                "justificativa": new String(hAPI.getCardValue("justificativa"))
            }
        };
        //Retrieves the value defined for the company code.
        company = values.componente.cod_empresa;
     
        //Converts the JSON object to JSON string.
        values = JSON.stringify(values);
        log.info("[LOGIX][WFMAN002] Values of the form recovered: " + values + ".");
        log.info("[LOGIX][WFMAN002] Starting execution of the routine WFMAN002.");
        c1 = DatasetFactory.createConstraint("company", company, null, ConstraintType.MUST);
        c2 = DatasetFactory.createConstraint("fn", "wfman002_process_finish", null, ConstraintType.MUST);
        c3 = DatasetFactory.createConstraint("values", values, null, ConstraintType.MUST);
        dataset = DatasetFactory.getDataset("LogixExecServiceDS", null, [c1, c2, c3], null);
        result = service.getValue(0, "result");
        log.info("[LOGIX][WFMAN002] WFMAN002 routine executed, result sent: " + result + ".");
        //Converts the JSON string to JSON object.
        result = JSON.parse(result);
        if (result) {
            if (result.status) {
                log.info("[LOGIX][WFMAN002] " + result.msg);
            } else {
                log.error("[LOGIX][WFMAN002] Unable to complete the process: " + result.msg + ".");
            }
        }
    }
    JSON String sending standards
    //For master registers (object).
    {
        "componente": {
            "cod_empresa": "24",
            "cod_item_compon": "ITEM-TESTE",
            "cod_grade_compon_1_orig": "BRANCO",
            "cod_grade_compon_2_orig": "",
            "cod_grade_compon_3_orig": "",
            "cod_grade_compon_4_orig": "",
            "cod_grade_compon_5_orig": "",
            "acao": "1",
            "cod_item_compon_dest": "ITEM-TESTE-NOVO",
            "cod_grade_compon_1_dest": "PRETO",
            "cod_grade_compon_2_dest": "",
            "cod_grade_compon_3_dest": "",
            "cod_grade_compon_4_dest": "",
            "cod_grade_compon_5_dest": "",
            "justificativa": "ALTERACAO DO COMPONENTE ITEM-TESTE BRANCO PARA ITEM-TESTE-NOVO PRETO."
        }
    }
     
    //For detail registers (lists).
    {
        "componentes": [
            {
                "cod_empresa": "24",
                "cod_item_compon": "ITEM-TESTE",
                "cod_grade_compon_1_orig": "BRANCO",
                "cod_grade_compon_2_orig": "",
                "cod_grade_compon_3_orig": "",
                "cod_grade_compon_4_orig": "",
                "cod_grade_compon_5_orig": "",
                "acao": "1",
                "cod_item_compon_dest": "ITEM-TESTE-NOVO",
                "cod_grade_compon_1_dest": "PRETO",
                "cod_grade_compon_2_dest": "",
                "cod_grade_compon_3_dest": "",
                "cod_grade_compon_4_dest": "",
                "cod_grade_compon_5_dest": "",
                "justificativa": "ALTERACAO DO COMPONENTE ITEM-TESTE BRANCO PARA ITEM-TESTE-NOVO PRETO."
            },
            {
                "cod_empresa": "24",
                "cod_item_compon": "ITEM-TESTE-NOVO",
                "cod_grade_compon_1_orig": "PRETO",
                "cod_grade_compon_2_orig": "",
                "cod_grade_compon_3_orig": "",
                "cod_grade_compon_4_orig": "",
                "cod_grade_compon_5_orig": "",
                "acao": "1",
                "cod_item_compon_dest": "ITEM-TESTE",
                "cod_grade_compon_1_dest": "BRANCO",
                "cod_grade_compon_2_dest": "",
                "cod_grade_compon_3_dest": "",
                "cod_grade_compon_4_dest": "",
                "cod_grade_compon_5_dest": "",
                "justificativa": "ALTERACAO DO COMPONENTE ITEM-TESTE-NOVO PRETO PARA ITEM-TESTE BRANCO."
            }
        ]
    }

    In order for the execution of the routine in Logix to occur, follow the steps below:

    1. Create the 4GL routine without parameters.
    2. The values sent must be recovered through the function _ADVPL_WfGetParameterValue.
    3. To retrieve the number of child fields in the values sent, use the function  _ADVPL_WfGetParameterLength.
    4. The function must return a RECORD variable with at least two attributes*:
      • status: SMALLINT type, must have a TRUE or FALSE value to indicate if routine was executed successfully; and
      • msg: CHAR type, must have a short message in order for it to be displayed for the viewer in the Fluig LOG file or on the screen.

    * The RECORD return variable may have other attributes according to the needs of the process.

    Exemplo
    #-------------------------------------#
    FUNCTION wfman002_alterar_componentes()
    #-------------------------------------#
        DEFINE lr_return RECORD
                             status SMALLINT,
                             msg    CHAR(300)
                         END RECORD
        DEFINE lr_comp_orig,
               lr_comp_dest RECORD
                                cod_item_compon  LIKE estrut_grade.cod_item_compon,
                                cod_grade_comp_1 LIKE estrut_grade.cod_grade_comp_1,
                                cod_grade_comp_2 LIKE estrut_grade.cod_grade_comp_2,
                                cod_grade_comp_3 LIKE estrut_grade.cod_grade_comp_3,
                                cod_grade_comp_4 LIKE estrut_grade.cod_grade_comp_4,
                                cod_grade_comp_5 LIKE estrut_grade.cod_grade_comp_5
                            END RECORD
        DEFINE la_item_pai ARRAY[100] OF RECORD
                               cod_item_pai     LIKE estrut_grade.cod_item_pai,
                               cod_grade_1      LIKE estrut_grade.cod_grade_1,
                               cod_grade_2      LIKE estrut_grade.cod_grade_2,
                               cod_grade_3      LIKE estrut_grade.cod_grade_3,
                               cod_grade_4      LIKE estrut_grade.cod_grade_4,
                               cod_grade_5      LIKE estrut_grade.cod_grade_5,
                               qtd_necessaria   LIKE estrut_grade.qtd_necessaria,
                               dat_validade_ini LIKE estrut_grade.dat_validade_ini,
                               dat_validade_fim LIKE estrut_grade.dat_validade_fim,
                               num_sequencia    LIKE estrut_grade.num_sequencia
                           END RECORD
        DEFINE l_justificativa CHAR(300),
               l_acao          CHAR(001),
               l_altera_item   CHAR(001)
        DEFINE l_ind,
               l_item_ind,
               l_item_count SMALLINT
        IF  LOG_initApp("MANENG") > 0 THEN
            LET lr_return.status = FALSE
            LET lr_return.msg    = "Usuário ",p_user CLIPPED," sem permissão para acessar a rotina."
            RETURN lr_return
        END IF
        LET lr_comp_orig.cod_item_compon  = _ADVPL_WfGetParameterValue("componentes","cod_item_compon_orig")
        LET lr_comp_orig.cod_grade_comp_1 = _ADVPL_WfGetParameterValue("componentes","cod_grade_comp_1_orig")
        LET lr_comp_orig.cod_grade_comp_2 = _ADVPL_WfGetParameterValue("componentes","cod_grade_comp_2_orig")
        LET lr_comp_orig.cod_grade_comp_3 = _ADVPL_WfGetParameterValue("componentes","cod_grade_comp_3_orig")
        LET lr_comp_orig.cod_grade_comp_4 = _ADVPL_WfGetParameterValue("componentes","cod_grade_comp_4_orig")
        LET lr_comp_orig.cod_grade_comp_5 = _ADVPL_WfGetParameterValue("componentes","cod_grade_comp_5_orig")
        LET lr_comp_dest.cod_item_compon  = _ADVPL_WfGetParameterValue("componentes","cod_item_compon_dest")
        LET lr_comp_dest.cod_grade_comp_1 = _ADVPL_WfGetParameterValue("componentes","cod_grade_comp_1_dest")
        LET lr_comp_dest.cod_grade_comp_2 = _ADVPL_WfGetParameterValue("componentes","cod_grade_comp_2_dest")
        LET lr_comp_dest.cod_grade_comp_3 = _ADVPL_WfGetParameterValue("componentes","cod_grade_comp_3_dest")
        LET lr_comp_dest.cod_grade_comp_4 = _ADVPL_WfGetParameterValue("componentes","cod_grade_comp_4_dest")
        LET lr_comp_dest.cod_grade_comp_5 = _ADVPL_WfGetParameterValue("componentes","cod_grade_comp_5_dest")
        LET l_justificativa = _ADVPL_WfGetParameterValue("componentes","justificativa")
        LET l_acao          = _ADVPL_WfGetParameterValue("componentes","slct_acao")
        #Checks the codes of the source grid.
        IF  lr_comp_orig.cod_grade_comp_1 IS NULL THEN
            LET lr_comp_orig.cod_grade_comp_1 = " "
        END IF
        IF  lr_comp_orig.cod_grade_comp_2 IS NULL THEN
            LET lr_comp_orig.cod_grade_comp_2 = " "
        END IF
        IF  lr_comp_orig.cod_grade_comp_3 IS NULL THEN
            LET lr_comp_orig.cod_grade_comp_3 = " "
        END IF
        IF  lr_comp_orig.cod_grade_comp_4 IS NULL THEN
            LET lr_comp_orig.cod_grade_comp_4 = " "
        END IF
        IF  lr_comp_orig.cod_grade_comp_5 IS NULL THEN
            LET lr_comp_orig.cod_grade_comp_5 = " "
        END IF
        #Checks the codes of the target grid.
        IF  lr_comp_dest.cod_grade_comp_1 IS NULL THEN
            LET lr_comp_dest.cod_grade_comp_1 = " "
        END IF
        IF  lr_comp_dest.cod_grade_comp_2 IS NULL THEN
            LET lr_comp_dest.cod_grade_comp_2 = " "
        END IF
        IF  lr_comp_dest.cod_grade_comp_3 IS NULL THEN
            LET lr_comp_dest.cod_grade_comp_3 = " "
        END IF
        IF  lr_comp_dest.cod_grade_comp_4 IS NULL THEN
            LET lr_comp_dest.cod_grade_comp_4 = " "
        END IF
        IF  lr_comp_dest.cod_grade_comp_5 IS NULL THEN
            LET lr_comp_dest.cod_grade_comp_5 = " "
        END IF
        LET l_item_ind   = 0
        LET l_item_count = _ADVPL_WfGetParameterLength("item_pai")
        FOR l_ind = 1 TO l_item_count
            LET l_altera_item = _ADVPL_WfGetParameterValue("item_pai","altera_item",l_ind)
            IF  l_altera_item = "S" THEN
                LET l_item_ind = l_item_ind + 1
                LET la_item_pai[l_item_ind].cod_item_pai     = _ADVPL_WfGetParameterValue("item_pai","cod_item_pai",l_ind)
                LET la_item_pai[l_item_ind].cod_grade_1      = _ADVPL_WfGetParameterValue("item_pai","cod_grade_1",l_ind)
                LET la_item_pai[l_item_ind].cod_grade_2      = _ADVPL_WfGetParameterValue("item_pai","cod_grade_2",l_ind)
                LET la_item_pai[l_item_ind].cod_grade_3      = _ADVPL_WfGetParameterValue("item_pai","cod_grade_3",l_ind)
                LET la_item_pai[l_item_ind].cod_grade_4      = _ADVPL_WfGetParameterValue("item_pai","cod_grade_4",l_ind)
                LET la_item_pai[l_item_ind].cod_grade_5      = _ADVPL_WfGetParameterValue("item_pai","cod_grade_5",l_ind)
                LET la_item_pai[l_item_ind].qtd_necessaria   = _ADVPL_WfGetParameterValue("item_pai","qtd_necessaria",l_ind)
                LET la_item_pai[l_item_ind].dat_validade_ini = _ADVPL_WfGetParameterValue("item_pai","dat_validade_ini",l_ind)
                LET la_item_pai[l_item_ind].dat_validade_fim = _ADVPL_WfGetParameterValue("item_pai","dat_validade_fim",l_ind)
                LET la_item_pai[l_item_ind].num_sequencia    = _ADVPL_WfGetParameterValue("item_pai","num_sequencia",l_ind)
                #Checks the codes of the grid of the parent item.
                IF  la_item_pai[l_item_ind].cod_grade_1 IS NULL THEN
                    LET la_item_pai[l_item_ind].cod_grade_1 = " "
                END IF
                IF  la_item_pai[l_item_ind].cod_grade_2 IS NULL THEN
                    LET la_item_pai[l_item_ind].cod_grade_2 = " "
                END IF
                IF  la_item_pai[l_item_ind].cod_grade_3 IS NULL THEN
                    LET la_item_pai[l_item_ind].cod_grade_3 = " "
                END IF
                IF  la_item_pai[l_item_ind].cod_grade_4 IS NULL THEN
                    LET la_item_pai[l_item_ind].cod_grade_4 = " "
                END IF
                IF  la_item_pai[l_item_ind].cod_grade_5 IS NULL THEN
                    LET la_item_pai[l_item_ind].cod_grade_5 = " "
                END IF
            END IF
        END FOR
        {
            Business rule 4GL.
        }
        LET lr_return.status = TRUE
        LET lr_return.msg    = "Item componente alterado com sucesso."
        RETURN lr_return
    END FUNCTION
    Default return JSON String
    {
        "success": true|false,
        "msg": "Mensagem retornada pela rotina."
    }
    • Sem rótulos