MENSAGEM DE ERRO - BeforeStateEntry - Integração com ERP

Caros, possuo dois scripts de evento de worklow: 1º - Monta XML e insere os dados na ficha via webservice no módulo de compras do ERP. 2º - É o beforeStateEntry que chama o script inseremovimento. (Esse deve receber o erro do resultado do web service ( erro 555 ) na tela do usuário quando enviar o processo ao invés do throw com um texto.

Observação: O script funciona normalmente e integra normalmente ao ERP, só quero apenas que a resposta do erro 555 apresentada no script 1 que insere o movimento no ERP seja apresentada no script 2 quando o usuário avança o processo pra finalizar a integração quando ocorrer o erro 555 retornado pelo web service quando existe alguma inconformidade.

Quando existe algum erro vindo do ERP. Preciso que esse erro seja mostrado na tela do usuário. Tipo o usuário informou um centro de custo errado o ERP vai retornar o erro no web service e preciso que esse erro seja mostrado. No segundo script quando ele não encontra a chave gravada num campo extra do movimento no ERP ele retorna um THROW, gostaria que nesse THROW do segundo script, ele mostrasse o erro abaixo visto no log pelo log.info:

17:58:03,145 INFO [com.datasul.technology.webdesk.customization.ScriptingLog] (http-/10.7.4.40:8088-5) CUSTOM: retorno de insereMovimentoManutencao - result: 555 - Erro interno do servidor. Erro ao executar o WebMethod: InsereMovimentoManutencao. Centro de Custo .. não encontrado!

1º Script - F005.inseremovimento.js


function InsereMovimento(XML)
{
    var codColigada = 1;
    var dataset = DatasetFactory.getDataset("ds_totvs_connector", null, null, null);
    var key = dataset.getValue(0, "chave");

    log.info("CUSTOM F005 - INSEREMOVIMENTO - ANTES DO TRY");

    try // Area comentada
    {
        var provider = ServiceManager.getServiceInstance("wsECM");

        if (provider == null) 
        {
            throw "F005.InsereMovimento.js - ERROR: O Serviço SebraeService não esta cadastrado. Por favor verificar!";
        } 
        else 
        {
    log.info("CUSTOM F005 - INSEREMOVIMENTO - PROVIDER INTANTIATE");

            var locator = provider.instantiate("org.tempuri.WsECM");            
    log.info("CUSTOM F005 - INSEREMOVIMENTO - DEPOIS DO PROVIDER INTANTIATE");
            var service = locator.getWsECMSoap();
    log.info("CUSTOM F005 - INSEREMOVIMENTO - locator.getWsECMSoap()");
            var result =  service.insereMovimentoManutencao(codColigada, XML, key);
    log.info("CUSTOM F005 - INSEREMOVIMENTO - DEPOIS DO WEB METODO INSERE MANUTENCAO");

    log.info("CUSTOM: entrada de insereMovimentoManutencao(codColigada, XML, key): " + codColigada + " - " + key);
    log.info("CUSTOM: retorno de insereMovimentoManutencao - result: " + result);

            return result;
        }
    } //Comentario 1
    catch(e) //Comentario 2
    { //Comentario 3
        throw "ERROR: " + e; //comentario 4
    } //Comentario 5
}

2º Script - BeforeStateEntry


function beforeStateEntry(sequenceId){

    var tarefa = getValue("WKNumState");
    var prox_tarefa = getValue("WKNextState");
    var retornoIntegracaoECM;
    var retornoIntegracaoERP;

    if ( (tarefa == hAPI.getAdvancedProperty("Atividade_IntegraTotvs")) && 
         (prox_tarefa  ==  hAPI.getAdvancedProperty("Atividade_IntegracaoRM")) )
    {
        var XML_SOLICITACAO = geraXmlSolicitacao();
        log.info("---------------------------------- XML F005.BeforeStateEntry " + XML_SOLICITACAO);

        InsereMovimento(XML_SOLICITACAO);
        log.info("Após Inserir");
        log.info("------------------------------- RETORNO ECM F005.BeforeStateEntry " + retornoIntegracaoECM);
        log.info("------------------------------- RETORNO ECM F005.BeforeStateEntry " + retornoIntegracaoERP);
        retornoIntegracaoECM = verificaIntegracaoECM();
        log.info("---------------------------------- RETORNO ECM F005.BeforeStateEntry " + retornoIntegracaoECM);
        if (!retornoIntegracaoECM) 
        {
                    throw "F005.BeforeStateEntry - Não Foi Possível Realizar a integração com o ERP, verífique o status do Webservice";
        }
    }

    else if ( (tarefa == 27) && 
             (prox_tarefa  == 106) )

    {

        var XML_SOLICITACAO = geraXmlSolicitacao();
        log.info("---------------------------------- XML F005.BeforeStateEntry " + XML_SOLICITACAO);

        InsereMovimento(XML_SOLICITACAO);
        log.info("Após Inserir");
        log.info("------------------------------- RETORNO ECM F005.BeforeStateEntry " + retornoIntegracaoECM);
        log.info("------------------------------- RETORNO ECM F005.BeforeStateEntry " + retornoIntegracaoERP);
        retornoIntegracaoECM = verificaIntegracaoECM();
        log.info("---------------------------------- RETORNO ECM F005.BeforeStateEntry " + retornoIntegracaoECM);
        if (!retornoIntegracaoECM) 
        {
                    throw "F005.BeforeStateEntry - Não Foi Possível Realizar a integração com o ERP, verífique o status do Webservice";
        }
    }
    log.info("##### beforeStateEntry 2  F005 FIM ")
}



/* Script atual Integracao - 27-06-2017


 function beforeStateEntry(sequenceId){

    var tarefa = getValue("WKNumState");
    var prox_tarefa = getValue("WKNextState");
    var retornoIntegracaoECM;
    var retornoIntegracaoERP;

    if ( (tarefa == hAPI.getAdvancedProperty("Atividade_AvaliarUGF")) && 
         (prox_tarefa  ==  hAPI.getAdvancedProperty("Atividade_Integracao")) )
    {
        var XML_SOLICITACAO = geraXmlSolicitacao();
        log.info("---------------------------------- XML F005.BeforeStateEntry " + XML_SOLICITACAO);

        InsereMovimento(XML_SOLICITACAO);
        log.info("Após Inserir");
        log.info("------------------------------- RETORNO ECM F005.BeforeStateEntry " + retornoIntegracaoECM);
        log.info("------------------------------- RETORNO ECM F005.BeforeStateEntry " + retornoIntegracaoERP);
        retornoIntegracaoECM = verificaIntegracaoECM();
        log.info("---------------------------------- RETORNO ECM F005.BeforeStateEntry " + retornoIntegracaoECM);
        if (!retornoIntegracaoECM) 
        {
                    throw "F005.BeforeStateEntry - Não Foi Possível Realizar a integração com o ERP, verífique o status do Webservice";
        }
    }
    log.info("##### beforeStateEntry 2  F005 FIM ")
}

:warning: Atenção: Esta publicação foi transferida automaticamente do fórum antigo, mas os anexos não foram incluídos.

Se eu colocar depois do “result” um bloco de If que se o retorno for 555, ele retornará no segundo script o erro da resposta do webservice nele?

@Italo, bom dia!!

Você pode verificar o valor do retorno do webservice e se teve o erro 555, dar um throw na função insereMovimento, ou no beforeStateEntry caso a função retorne o resultado.

Realizei isso e não retornou, coloquei um throw nos dois e ele percorre a etapa sem fazer a crítica na notificação do erro no processo.

Eu preciso que ele faça duas validações ele cheque o erro 555 do servidor e depois cheque se o registro foi inserido que é algo que já faço no !retornoIntegracaoECM. Mesmo colocando o Throw ele não retorna.

var MsgError = result.slice(0,3);
if (MsgError=“555”) {
log.error("Erro: " + result);
throw "Erro: " + result;
}
Só que preciso passar esse throw lá pro BeforeStateEntry e quando não houver o erro 555 ele deve pular para o próximo If que será se o registro já está inserido no ERP.

@Italo, sua função tem que retornar o resultado, e no beforeStateEntry ou beforeTaskSave, você executa desta forma:


var result = InsereMovimento(XML_SOLICITACAO);
var MsgError = result.slice(0,3);
if (MsgError == "555")
   throw "Erro " + MsgError 

Rodolfo, executei dessa forma já, ele retorna undefined quando atribuo a variável a função InsereMovimento.

Está retornando ela na função? Pelo que vi no seu fonte, só retorna em um else, ela tem que retornar sempre!

Eu estou modificando aqui e realizando o teste com o throw no script 2



	if ( (tarefa == hAPI.getAdvancedProperty("Atividade_IntegraTotvs")) && 
	     (prox_tarefa  ==  hAPI.getAdvancedProperty("Atividade_IntegracaoRM")) )
	{
		var XML_SOLICITACAO = geraXmlSolicitacao();	
		var result = InsereMovimento(XML_SOLICITACAO);
		var MsgError = result.slice(0,3);
		if (MsgError == "555")
		   throw "Erro " + MsgError



Ele dá esse erro, pois não reconhece o slice: TypeError: Cannot call method “slice” of undefined (#15) in at line number 15 ( do script 2). Ou seja a variável result retorna undefined.

Como este é o retorno do webservice, o objeto é uma string em java, e o método slice não existe! Você pode usar o contains(“conteudoProcurado”) que verifica se existe tal conteúdo ou substring.

Mas mesmo assim o result vem vazio. Não é problema do substring ou slide acredito eu, porque se eu configurar o retorno da variável no log.info ele retorna mesmo assim undefined, ou seja no beforeStateEntry não pega o resultado da função Inseremovimento.

Testa no beforeTaskSave para verificar. Mas eu acredito que sua função, Inseremovimento, não esteja retornando o valor corretamente!

No log.info ele retorna no result o erro do web service no script inseremovimento.

Retorna, mas está dentro da função, o seu problema é que não está conseguindo retornar o valor para o evento que chamou a função!

Rodolfo, valeu, o problema todo era porque o return devia ficar no último bloco do If/Else. Problema resolvido. Obriogado meu amigo, você deu a luz necessária para isso.

Que bom que deu certo :slight_smile:

Bom dia @Italo! Estou iniciando no Fluig e me deparei com uma dificuldade que pelo visto você passou por ela. Preciso gerar um movimento no RM (Solicitacao) a partir do Fluig. Estou com dificuldade em montar o XML com os dados do formulário, principalmente na parte de ITENS DO MOVIMENTO. Poderia me mostrar ou encaminhar a sua função que monta esse XML ? Acredito que seja a geraXmlSolicitacao(). Obrigado desde já.