Histórico da Página
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
ÂncoraEXEC_FLUIG EXEC_FLUIG
Execução da rotina no Fluig
EXEC_FLUIG | |
EXEC_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:
- O código da empresa que será utilizado na regra de negócio;
- A rotina 4GL do workflow que será executada; e
- 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 | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
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
#EXEC_LOGIX | |
#EXEC_LOGIX |
Para que seja possível a execução da rotina no Logix algumas regras devem ser seguidas:
- A função 4GL não poderá receber parâmetros.
- Os valores do processo devem ser recuperados através da função _ADVPL_WfGetParameterValue.
- 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 | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
#-------------------------------------------# 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 | ||||||
---|---|---|---|---|---|---|
| ||||||
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 | ||||
---|---|---|---|---|
| ||||
//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." } ] } |
Visão Geral
Import HTML Content
Conteúdo das Ferramentas
Tarefas