Histórico da Página
...
...
Deck of Cards | |||||
---|---|---|---|---|---|
| |||||
|
...
|
...
|
...
|
...
|
...
|
...
...
Execução da rotina no
...
Fluig
Para que seja possível realizar a execução da de uma rotina no Logix algumas regras devem ser seguidas: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_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] 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 + ".");
}
}
} |
Padrão JSON String de envio
Â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
- 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 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") #Verifica os códigos da grade de origem. 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 #Verifica os códigos da grade de destino. 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) #Verifica os códigos da grade do item pai. 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 { Regra de negócio 4GL. } LET lr_return.status = TRUE LET lr_return.msg = "Item componente alterado 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 + ']'); } }Regra de negócio 4GL. } LET lr_return.status = TRUE LET lr_return.msg = "Item componente alterado com sucesso." RETURN lr_return END FUNCTION |
O JSON string enviado para a o Dataset deve seguir os padrões abaixo:
...
Visão Geral
Import HTML Content
Conteúdo das Ferramentas
Tarefas