Card |
---|
default | true |
---|
label | Execução da rotina no Fluig |
---|
| Para realizar a execução de uma rotina Logix a partir de um evento é necessário seguir os passos abaixo: Utilize - Utilizar o Dataset customizado LogixExecServiceDS.
- Enviar os parâmetros abaixo como constraints para o Dataset:
O código - Código da empresa que será utilizado na regra de negócio;
A rotina 4GL - Rotina do workflow que será executada; e
Os valores - Valores que serão utilizados na execução da rotina*.
- Recuperar o resultado
a - da execução da rotina através da
função - função padrão getValue do objeto Dataset*.
* Os valores que devem ser enviados e o resultado da rotina obedecem o formato JSON string.
Exemplo Bloco de código |
---|
theme | Eclipse |
---|
language | javascript |
---|
title | Exemplo de execução de uma rotina no Fluig |
---|
linenumbers | true |
---|
| function afterProcessFinish(processId) {
var values, company, c1, c2, c3, dataset, result;
//Recupera os valores do processo.
values = {
"componentescomponente": {
"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")),
"slct_acao": new String(hAPI.getCardValue("slct_acao")),
"cod_item_compon_novodest": new String(hAPI.getCardValue("cod_item_compon_novodest")),
"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"))
}
};
//Recupera o valor definido para o código da empresa.
company = values.componentescomponente.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 + ".");
}
}
} |
| Card |
---|
label | Execução da Rotina no Logix |
---|
| Padrões JSON String de envio Bloco de código |
---|
theme | Eclipse |
---|
language | javascript |
---|
| //Para registros mestres (objeto).
{
"componente": {
"cod_empresa": "24",
"cod_item_compon": "ITEM-TESTE",
"cod_grade_compon_1_orig": "BRANCO",
"cod_grade_compon_2_orig": "", |
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.
* A variável RECORD de retorno poderá ter outros atributos conforme necessidade do processo.
Bloco de código |
---|
theme | Eclipse |
---|
language | none |
---|
title | Exemplo de execução de uma rotina no Logix |
---|
linenumbers | true |
---|
| #-------------------------------------#
FUNCTION wfman002_alterar_componentes()
#-------------------------------------#
DEFINE lr_return RECORD
"cod_grade_compon_3_orig": "",
"cod_grade_compon_4_orig": "",
status SMALLINT"cod_grade_compon_5_orig": "",
"acao": "1",
"cod_item_compon_dest": "ITEM-TESTE-NOVO",
msg CHAR(300) "cod_grade_compon_1_dest": "PRETO",
"cod_grade_compon_2_dest": "",
"cod_grade_compon_3_dest": "",
END RECORD
DEFINE lr_comp_orig"cod_grade_compon_4_dest": "",
lr_comp"cod_grade_compon_5_dest": RECORD"",
"justificativa": "ALTERACAO DO COMPONENTE ITEM-TESTE BRANCO PARA ITEM-TESTE-NOVO PRETO."
}
}
//Para registros de detalhes (listas).
{
cod_item_compon"componentes": [
LIKE estrut_grade.cod_item_compon,
{
"cod_empresa": "24",
cod_grade_comp_1 LIKE estrut_grade."cod_grade_comp_1item_compon": "ITEM-TESTE",
"cod_grade_compon_1_orig": "BRANCO",
"cod_grade_compcompon_2 LIKE estrut_grade.cod_grade_comp_2_orig": "",
"cod_grade_compon_3_orig": "",
"cod_grade_comp_3 LIKE estrut_grade.cod_grade_comp_3,
compon_4_orig": "",
"cod_grade_compon_5_orig": "",
cod_grade_comp_4 LIKE estrut_grade.cod_grade_comp_4"acao": "1",
"cod_item_compon_dest": "ITEM-TESTE-NOVO",
"cod_grade_comp_5 LIKE estrut_grade.cod_grade_comp_5compon_1_dest": "PRETO",
"cod_grade_compon_2_dest": "",
END RECORD
DEFINE la_item_pai ARRAY[100] OF RECORD "cod_grade_compon_3_dest": "",
"cod_grade_compon_4_dest": "",
cod_item_pai LIKE estrut"cod_grade.cod_compon_item_pai5_dest": "",
"justificativa": "ALTERACAO DO COMPONENTE ITEM-TESTE BRANCO PARA cod_grade_1ITEM-TESTE-NOVO PRETO."
LIKE estrut_grade.cod_grade_1},
{
"cod_empresa": "24",
cod_grade_2 LIKE estrut_grade."cod_grade_2item_compon": "ITEM-TESTE-NOVO",
"cod_grade_compon_1_orig": "PRETO",
"cod_grade_3 LIKE estrut_grade.cod_grade_3compon_2_orig": "",
"cod_grade_compon_3_orig": "",
"cod_grade_compon_4_orig": "",
LIKE estrut_grade.cod_grade_4 "cod_grade_compon_5_orig": "",
"acao": "1",
"cod_grade_5item_compon_dest": "ITEM-TESTE",
LIKE estrut"cod_grade.cod_compon_grade_51_dest": "BRANCO",
"cod_grade_compon_2_dest": "",
qtd_necessaria LIKE estrut_grade.qtd_necessaria"cod_grade_compon_3_dest": "",
"cod_grade_compon_4_dest": "",
dat_validade_ini LIKE estrut_grade.dat_validade_ini"cod_grade_compon_5_dest": "",
"justificativa": "ALTERACAO DO COMPONENTE ITEM-TESTE-NOVO PRETO PARA dat_validade_fim LIKE estrut_grade.dat_validade_fim,ITEM-TESTE BRANCO."
}
]
} |
|
Card |
---|
label | Execução da Rotina no Logix |
---|
| Para que seja possível a execução da rotina no Logix é necessário seguir os passos abaixo: - Criar a rotina 4GL sem parâmetros.
- Os valores enviados devem ser recuperados através da função _ADVPL_WfGetParameterValue.
- Para recuperar a quantidade dos campos filhos nos valores enviados, utilizar a função _ADVPL_WfGetParameterLength.
- A função deve retornar uma variável RECORD com no mínimo dois 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.
* A variável RECORD de retorno poderá ter outros atributos conforme necessidade do processo.
Exemplo Bloco de código |
---|
| #-------------------------------------#
FUNCTION wfman002_alterar_componentes()
#-------------------------------------#
DEFINE lr_return RECORD
num_sequencia LIKE estrut_grade.num_sequencia
END RECORD
DEFINE l_justificativa CHAR(300),
l_acao status CHAR(001)SMALLINT,
l_altera_item CHAR(001)
DEFINE l_ind,
msg l_item_ind,CHAR(300)
l_item_count SMALLINT
IF LOG_initApp("MANENG") > 0 THEN
END RECORD
LET DEFINE lr_return.status = FALSE
comp_orig,
LET lr_comp_return.msgdest RECORD
= "Usuário ",p_user CLIPPED," sem permissão para acessar a rotina."
RETURN lr_return
END IF
LET lr_comp_orig.cod_item_compon =LIKE _ADVPL_WfGetParameterValue("componentes","estrut_grade.cod_item_compon_orig")
,
LET lr_comp_orig. cod_grade_comp_1 =LIKE _ADVPL_WfGetParameterValue("componentes","estrut_grade.cod_grade_comp_1_orig")
,
LET lr_comp_orig. cod_grade_comp_2 =LIKE _ADVPL_WfGetParameterValue("componentes","estrut_grade.cod_grade_comp_2_orig")
,
LET lrcod_grade_comp_orig3 LIKE estrut_grade.cod_grade_comp_3 = _ADVPL_WfGetParameterValue("componentes","cod_grade_comp_3_orig")
,
LET lr_comp_orig.cod_grade_comp_4 =LIKE _ADVPL_WfGetParameterValue("componentes","estrut_grade.cod_grade_comp_4_orig")
,
LET lr_comp_orig.cod_grade_comp_5 =LIKE _ADVPL_WfGetParameterValue("componentes","estrut_grade.cod_grade_comp_5_orig")
END RECORD
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
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,
LET lr_comp_orig.cod_grade_comp_2 = " "
qtd_necessaria LIKE estrut_grade.qtd_necessaria,
END IF
IF lr_comp_orig.cod_grade_comp_3 IS NULL THEN
LET lrdat_comp_orig.codvalidade_ini LIKE estrut_grade.dat_compvalidade_3ini,
= " "
END IF
IF lr_comp_orig.cod_grade_comp_4 IS NULL THEN
LET lrdat_comp_orig.codvalidade_fim LIKE estrut_grade.dat_comp_4 = " "
validade_fim,
END IF
IF lr_comp_orig.cod_grade_comp_5 IS NULL THEN
LET lr_comp_orig.cod_grade_comp_5 = " "num_sequencia LIKE estrut_grade.num_sequencia
END IF
#Verifica os códigos da grade de destino.
IF lr_comp_dest.cod_grade_comp_1 IS NULLEND THENRECORD
DEFINE l_justificativa CHAR(300),
LET lr_comp_dest.cod_grade_comp_1 = " "
END IF
l_acao IF lr_comp_dest.cod_grade_comp_2 IS NULL THEN
CHAR(001),
LET lr_comp_dest.cod_grade_comp_2 = " "
END IF l_altera_item CHAR(001)
IFDEFINE lr_comp_dest.cod_grade_comp_3 IS NULL THEN
l_ind,
LET lrl_comp_dest.cod_grade_comp_3 = " "
item_ind,
END IFl_item_count SMALLINT
IF lr_comp_dest.cod_grade_comp_4 IS NULLLOG_initApp("MANENG") > 0 THEN
LET lr_comp_dest.cod_grade_comp_4return.status = " "
FALSE
LET lr_return.msg END IF
= "Usuário ",p_user CLIPPED," IFsem lr_comp_dest.cod_grade_comp_5 IS NULL THENpermissão para acessar a rotina."
LETRETURN lr_comp_dest.cod_grade_comp_5 = " "return
END IF
LET llr_comp_orig.cod_item_indcompon = 0_ADVPL_WfGetParameterValue("componentes","cod_item_compon_orig")
LET l_item_countlr_comp_orig.cod_grade_comp_1 = _ADVPL_WfGetParameterLengthWfGetParameterValue("item_paicomponentes","cod_grade_comp_1_orig")
FORLET l_ind = 1 TO l_item_count
LET l_altera_itemlr_comp_orig.cod_grade_comp_2 = _ADVPL_WfGetParameterValue("item_paicomponentes","altera_item",l_ind)
IF l_altera_item = "S" THEN
cod_grade_comp_2_orig")
LET l_item_ind = l_item_ind + 1
lr_comp_orig.cod_grade_comp_3 = _ADVPL_WfGetParameterValue("componentes","cod_grade_comp_3_orig")
LET lalr_item_pai[l_item_ind]comp_orig.cod_grade_itemcomp_pai4 = _ADVPL_WfGetParameterValue("item_paicomponentes","cod_grade_comp_item4_paiorig",l_ind)
LET lalr_item_pai[l_item_ind]comp_orig.cod_grade_1 comp_5 = _ADVPL_WfGetParameterValue("item_paicomponentes","cod_grade_comp_5_1orig",l_ind)
LET la_item_pai[l_item_ind]LET lr_comp_dest.cod_grade_2 item_compon = _ADVPL_WfGetParameterValue("item_paicomponentes","cod_item_gradecompon_2dest",l_ind)
LET lalr_item_pai[l_item_ind]comp_dest.cod_grade_3 comp_1 = _ADVPL_WfGetParameterValue("item_paicomponentes","cod_grade_comp_3",l_ind)
1_dest")
LET lalr_item_pai[l_item_ind]comp_dest.cod_grade_4 comp_2 = _ADVPL_WfGetParameterValue("item_paicomponentes","cod_grade_4",l_ind)
comp_2_dest")
LET lalr_item_pai[l_item_ind]comp_dest.cod_grade_comp_5 3 = _ADVPL_WfGetParameterValue("item_paicomponentes","cod_grade_5",l_ind)
comp_3_dest")
LET lalr_item_pai[l_item_ind].qtd_necessaria comp_dest.cod_grade_comp_4 = _ADVPL_WfGetParameterValue("item_paicomponentes","qtd_necessaria",l_indcod_grade_comp_4_dest")
LET lalr_item_pai[l_item_ind].dat_validade_inicomp_dest.cod_grade_comp_5 = _ADVPL_WfGetParameterValue("item_paicomponentes","dat_validade_ini",l_ind)
cod_grade_comp_5_dest")
LET la_item_pai[l_item_ind].dat_validade_fimjustificativa = _ADVPL_WfGetParameterValue("item_paicomponentes","dat_validade_fim",l_indjustificativa")
LET l_acao LET la_item_pai[l_item_ind].num_sequencia = _ADVPL_WfGetParameterValue("item_paicomponentes","num_sequencia",l_indslct_acao")
#Verifica os códigos da grade dode item paiorigem.
IF lalr_item_pai[l_item_ind]comp_orig.cod_grade_comp_1 IS NULL THEN
LET lalr_item_pai[l_item_ind]comp_orig.cod_grade_comp_1 = " "
END IF
IF la_item_pai[l_item_ind]IF lr_comp_orig.cod_grade_comp_2 IS NULL THEN
LET lalr_item_pai[l_item_ind]comp_orig.cod_grade_comp_2 = " "
END IF
IF lalr_item_pai[l_item_ind]comp_orig.cod_grade_comp_3 IS NULL THEN
LET la_item_pai[l_item_ind]lr_comp_orig.cod_grade_comp_3 = " "
END IF
IF lalr_item_pai[l_item_ind]comp_orig.cod_grade_comp_4 IS NULL THEN
LET lalr_item_pai[l_item_ind]comp_orig.cod_grade_comp_4 = " "
END IF
IF la_item_pai[l_item_ind]lr_comp_orig.cod_grade_comp_5 IS NULL THEN
LET lalr_item_pai[l_item_ind]comp_orig.cod_grade_comp_5 = " "
END IF
#Verifica os códigos da ENDgrade IF
END FOR
de destino.
{
IF lr_comp_dest.cod_grade_comp_1 Regra de negócio 4GL.IS NULL THEN
}
LET lr_return.status = TRUEcomp_dest.cod_grade_comp_1 = " "
END IF
LETIF lr_comp_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: Bloco de código |
---|
theme | Eclipse |
---|
language | javascript |
---|
| //Para registros mestres (objeto).
{
"componentes": {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
"cod_empresa": "24",LET lr_comp_dest.cod_grade_comp_3 = " "
"cod_item_compon": "ITEM-TESTE",END IF
IF "lr_comp_dest.cod_grade_1_orig": "BRANCO",comp_4 IS NULL THEN
"LET lr_comp_dest.cod_grade_2_orig":comp_4 = " "",
END IF
" IF lr_comp_dest.cod_grade_3_orig": "",comp_5 IS NULL THEN
"LET lr_comp_dest.cod_grade_4_orig":comp_5 = " "",
END IF
LET "codl_grade_5_orig": "",
item_ind = 0
LET "slct_acao": "1",l_item_count = _ADVPL_WfGetParameterLength("item_pai")
FOR l_ind = 1 "codTO l_item_compon_novo": "ITEM-TESTE-NOVO",
count
LET l_altera_item = "cod_grade_1_dest": "PRETO",
ADVPL_WfGetParameterValue("item_pai","altera_item",l_ind)
IF "codl_grade_2_dest":altera_item = "",
S" THEN
LET "cod_grade_3_dest": "",l_item_ind = l_item_ind + 1
" LET la_item_pai[l_item_ind].cod_grade_4_dest": "",
item_pai = _ADVPL_WfGetParameterValue("item_pai","cod_grade_5_dest": "",item_pai",l_ind)
"justificativa": "ALTERACAO DO COMPONENTE ITEM-TESTE BRANCO PARA ITEM-TESTE-NOVO PRETO."
LET la_item_pai[l_item_ind].cod_grade_1 }
}
//Para registros de detalhes (listas).
{
"componentes": [= _ADVPL_WfGetParameterValue("item_pai","cod_grade_1",l_ind)
{
LET la_item_pai[l_item_ind].cod_grade_2 = _ADVPL_WfGetParameterValue("coditem_empresapai": "24,"cod_grade_2",l_ind)
LET la_item_pai[l_item_ind].cod_grade_3 "cod_item_compon": "ITEM-TESTE",= _ADVPL_WfGetParameterValue("item_pai","cod_grade_3",l_ind)
"LET la_item_pai[l_item_ind].cod_grade_1_orig": "BRANCO",
4 = _ADVPL_WfGetParameterValue("item_pai","cod_grade_2_orig": "4",l_ind)
"LET la_item_pai[l_item_ind].cod_grade_3_orig": "",
5 = _ADVPL_WfGetParameterValue("item_pai","cod_grade_4_orig": "",5",l_ind)
"cod_grade_5_orig": "",
LET la_item_pai[l_item_ind].qtd_necessaria "slct_acao": "1",= _ADVPL_WfGetParameterValue("item_pai","qtd_necessaria",l_ind)
"codLET la_item_pai[l_item_compon_novo": "ITEM-TESTE-NOVO",
_ind].dat_validade_ini = _ADVPL_WfGetParameterValue("item_pai","dat_validade_ini",l_ind)
LET la_item_pai[l_item_ind].dat_validade_fim = "cod_grade_1_dest": "PRETO",ADVPL_WfGetParameterValue("item_pai","dat_validade_fim",l_ind)
LET la_item_pai[l_item_ind].num_sequencia = "cod_grade_2_dest": "",
ADVPL_WfGetParameterValue("item_pai","num_sequencia",l_ind)
"cod_grade_3_dest": "",#Verifica os códigos da grade do item pai.
IF "la_item_pai[l_item_ind].cod_grade_4_dest": "",
1 IS NULL THEN
" LET la_item_pai[l_item_ind].cod_grade_5_dest":1 = " "",
"justificativa": "ALTERACAO DO COMPONENTE ITEM-TESTE BRANCO PARA ITEM-TESTE-NOVO PRETO."
},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 = "cod_empresa": "24",
"cod_item_compon": "ITEM-TESTE-NOVO",END IF
"IF la_item_pai[l_item_ind].cod_grade_1_orig": "PRETO",
3 IS NULL THEN
"LET la_item_pai[l_item_ind].cod_grade_2_orig":3 = " "",
"cod_grade_3_orig": "",
END IF
IF "la_item_pai[l_item_ind].cod_grade_4_orig": "", IS NULL THEN
" LET la_item_pai[l_item_ind].cod_grade_5_orig":4 = " "",
"slct_acao": "1",END IF
"codIF la_item_pai[l_item_compon_novo": "ITEM-TESTE",
ind].cod_grade_5 IS NULL THEN
" LET la_item_pai[l_item_ind].cod_grade_1_dest":5 = " "BRANCO",
"cod_grade_2_dest": "", END IF
END IF
"cod_grade_3_dest": "", END FOR
{
"cod_grade_4_dest": "", Regra de negócio 4GL.
}
LET lr_return.status = TRUE
"cod_grade_5_dest": "",
LET lr_return.msg = "Item componente alterado com "justificativa": "ALTERACAO DO COMPONENTE ITEM-TESTE-NOVO PRETO PARA ITEM-TESTE BRANCO."
}
]sucesso."
RETURN lr_return
END FUNCTION |
Padrão JSON String de retorno Bloco de código |
---|
theme | Eclipse |
---|
language | javascript |
---|
| {
"success": true|false,
"msg": "Mensagem retornada pela rotina."
} |
|
|