Páginas filhas
  • 4.2. Execução de rotinas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

A partir dos eventos de workflow do Fluig é possível efetuar a execução de rotinas no Logix permitindo envio de parâmetros e retornos da regra de negócio para o processo.
 

Nota

As rotinas são executadas via Web Services, portanto é necessário que estas execuções estejam ligadas e configuradas no servidor TOTVS Tec.

Índice

  1. Execução da rotina no Fluig
  2. Execução da rotina no Logix

Âncora
EXEC_FLUIG
EXEC_FLUIG
Execução da rotina no Fluig

Para realizar a execução de uma rotina Logix a partir de um evento:

  • Utilize o Dataset customizado LogixExecServiceDS
  • Enviar como constraints para o Dataset:
    1. O código da empresa que será utilizado na regra de negócio;
    2. A rotina 4GL do workflow que será executada; e
    3. Os valores que serão utilizados na rotina*.
  • Recuperar o resultado a execução da rotina através da função getValue do Dataset*.

* Os valores que devem ser enviados e o resultado da rotina obedecem o formato JSON string.


Bloco de código
themeEclipse
languagejavascript
titleExemplo de execução de uma rotina no Fluig
linenumberstrue
function afterProcessFinish(processId) {
    var values, company, c1, c2, c3, dataset, result;

    //Recupera os valores do processo.
    values = {
        "componentes": {
            "cod_empresa": new String(hAPI.getCardValue("cod_empresa")),
            "cod_item_compon": new String(hAPI.getCardValue("cod_item_compon")),
            "cod_grade_1_orig": new String(hAPI.getCardValue("cod_grade_1_orig")),
            "cod_grade_2_orig": new String(hAPI.getCardValue("cod_grade_2_orig")),
            "cod_grade_3_orig": new String(hAPI.getCardValue("cod_grade_3_orig")),
            "cod_grade_4_orig": new String(hAPI.getCardValue("cod_grade_4_orig")),
            "cod_grade_5_orig": new String(hAPI.getCardValue("cod_grade_5_orig")),
            "slct_acao": new String(hAPI.getCardValue("slct_acao")),
            "cod_item_compon_novo": new String(hAPI.getCardValue("cod_item_compon_novo")),
            "cod_grade_1_dest": new String(hAPI.getCardValue("cod_grade_1_dest")),
            "cod_grade_2_dest": new String(hAPI.getCardValue("cod_grade_2_dest")),
            "cod_grade_3_dest": new String(hAPI.getCardValue("cod_grade_3_dest")),
            "cod_grade_4_dest": new String(hAPI.getCardValue("cod_grade_4_dest")),
            "cod_grade_5_dest": new String(hAPI.getCardValue("cod_grade_5_dest")),
            "justificativa": new String(hAPI.getCardValue("justificativa"))
        }
    };

    //Recupera o valor definido para o código da empresa.
    company = values.componentes.cod_empresa;
 
    //Converte o objeto JSON para JSON string.
    values = JSON.stringify(values);

    log.info("[LOGIX][WFMAN002] Valores do formulario recuperados: " + values + ".");
    log.info("[LOGIX][WFMAN002] Iniciando execucao da rotina WFMAN002.");

    c1 = DatasetFactory.createConstraint("company", company, null, ConstraintType.MUST);
    c2 = DatasetFactory.createConstraint("fn", "wfman002_alterar_componentes", 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] Rotina WFMAN002 executada, resultado enviado: " + result + ".");

    //Converte o JSON string para objeto JSON.
    result = JSON.parse(result);

    if (result) {
        if (result.status) {
            log.info("[LOGIX][WFMAN002] " + result.msg);
        } else {
            log.error("[LOGIX][WFMAN002] Nao foi possivel concluir o processo: " + result.msg + ".");
        }
    }
}

Âncora
#EXEC_LOGIX
#EXEC_LOGIX
Execução da rotina no Logix

Para que seja possível a execução da rotina no Logix algumas regras devem ser seguidas:

  1. A função 4GL não poderá receber parâmetros.
  2. Os valores do processo devem ser recuperados através da função _ADVPL_WfGetParameterValue.
  3. A função deve retornar uma RECORD com no mínimo 2 atributos:
    • status: do tipo SMALLINT, deverá ter o valor TRUE ou FALSE para indicar se a rotina foi executada com sucesso; e
    • msg: do tipo CHAR, deverá ter uma curta mensagem para que a mesma seja exibida para o usuário no arquivo de LOG do Fluig ou em tela.


 

Bloco de código
themeEclipse
languagenone
titleExemplo de execução de uma rotina no Logix
linenumberstrue
#-------------------------------------------#
FUNCTION vdp10000_create_clientes_wfprocess()
#-------------------------------------------#
    DEFINE lr_return   RECORD
                           status SMALLINT,
                           msg    CHAR(300)
                       END RECORD
 
    DEFINE lr_clientes RECORD
                           num_cgc_cpf LIKE clientes.num_cgc_cpf,
                           cod_cliente LIKE clientes.cod_cliente,
                           numero      INTEGER
                       END RECORD
 
    LET lr_clientes.num_cgc_cpf = _AdvPL_WfGetParameterValue('clientes','num_cgc_cpf')
    LET lr_clientes.cod_cliente = _AdvPL_WfGetParameterValue('clientes','cod_cliente')
 
    ...
 
    LET lr_return.status = TRUE
    LET lr_return.msg    = 'Cliente "',lr_clientes.cod_cliente CLIPPED,'" informado com sucesso.'
 
    RETURN lr_return
END FUNCTION

É possível incluir mais informações de retorno para o workflow além das duas citadas acima. Este retorno é convertido para Json e utilizado da maneira abaixo:

Bloco de código
languagejavascript
firstline13
linenumberstrue
result = callLogixFunction('vdp10000_create_clientes', values);
 
if (result) {
	if (result.status) {
		log.info('[LOGIX] ' + result.msg);
	} else {
		log.info('[LOGIX] Nao foi possivel concluir a criacao de cliente [' + result.msg + ']');
	}
}



O JSON string enviado para a o Dataset deve seguir os padrões abaixo:

Bloco de código
themeEclipse
languagejavascript
//Para registros mestres (objeto).
{
    "componentes": {
        "cod_empresa": "24",
        "cod_item_compon": "ITEM-TESTE",
        "cod_grade_1_orig": "BRANCO",
        "cod_grade_2_orig": "",
        "cod_grade_3_orig": "",
        "cod_grade_4_orig": "",
        "cod_grade_5_orig": "",
        "slct_acao": "1",
        "cod_item_compon_novo": "ITEM-TESTE-NOVO",
        "cod_grade_1_dest": "PRETO",
        "cod_grade_2_dest": "",
        "cod_grade_3_dest": "",
        "cod_grade_4_dest": "",
        "cod_grade_5_dest": "",
        "justificativa": "ALTERACAO DO COMPONENTE ITEM-TESTE BRANCO PARA ITEM-TESTE-NOVO PRETO."
    }
}
 
//Para registros de detalhes (listas).
{
    "componentes": [
        {
            "cod_empresa": "24",
            "cod_item_compon": "ITEM-TESTE",
            "cod_grade_1_orig": "BRANCO",
            "cod_grade_2_orig": "",
            "cod_grade_3_orig": "",
            "cod_grade_4_orig": "",
            "cod_grade_5_orig": "",
            "slct_acao": "1",
            "cod_item_compon_novo": "ITEM-TESTE-NOVO",
            "cod_grade_1_dest": "PRETO",
            "cod_grade_2_dest": "",
            "cod_grade_3_dest": "",
            "cod_grade_4_dest": "",
            "cod_grade_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_1_orig": "PRETO",
            "cod_grade_2_orig": "",
            "cod_grade_3_orig": "",
            "cod_grade_4_orig": "",
            "cod_grade_5_orig": "",
            "slct_acao": "1",
            "cod_item_compon_novo": "ITEM-TESTE",
            "cod_grade_1_dest": "BRANCO",
            "cod_grade_2_dest": "",
            "cod_grade_3_dest": "",
            "cod_grade_4_dest": "",
            "cod_grade_5_dest": "",
            "justificativa": "ALTERACAO DO COMPONENTE ITEM-TESTE-NOVO PRETO PARA ITEM-TESTE BRANCO."
        }
    ]
}