Capturar erros em webservices de Fórmulas Visuais.
Ao criar datasets é comum que gerem erros, pois podem acontecer situações de gerar exceções como por exemplo falhas de comunicação com o webservice, autenticação, entre outros.
Quando há a comunicação com fórmulas visuais o erro pode ser customizado, que é no momento onde geramos uma atividade de excessão.
Após diversos testes identifiquei que o código abaixo retorna a estrutura da Tag DataSetXML
var result = authService.execute(codcoligada, idformulavisual, contexto, '', xml, '');
Quando gera-se uma exceção em fórmula visual o conteúdo da mensagem é explícito na tag ErrorMessage
Para entender o funcionamento foi feita a seguinte análise, veja o código abaixo.
var servico = ServiceManager.getServiceInstance(NOME_SERVICO);
var serviceHelper = servico.getBean();
var instancia = servico.instantiate(CAMINHO_SERVICO);
var ws = instancia.getRMIwsFormulaVisual();
var instanciaError = instancia.getRMIwsFormulaVisual();
var authService = serviceHelper.getBasicAuthenticatedClient(ws, "com.totvs.IwsFormulaVisual", 'mestre', 'senha');
var xml = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tot="http://www.totvs.com/"> ' +
'<soapenv:Header/> ' +
'<soapenv:Body> ' +
' <tot:Execute> ' +
' <!--Optional:--> ' +
' <tot:codColigada>1</tot:codColigada> ' +
' <!--Optional:--> ' +
' <tot:idFormula>9</tot:idFormula> ' +
' <!--Optional:--> ' +
' <tot:context>codusuario="mestre";codcoligada=1</tot:context> ' +
' </tot:Execute> ' +
' </soapenv:Body>' +
' </soapenv:Envelope> ' ;
var contexto = 'CODCOILIGADA=1;CODFILIAL=1;CODUSUARIO=Usuario;CODSISTEMA=G';
var result = authService.execute(codcoligada, idformulavisual, contexto, '', xml, '');
Instanciamos uma variável chamada authService, nesta variável definimos qual objeto iremos acessar, neste caso é o ‘com.totvs.IwsFormulaVisual’.
var authService = serviceHelper.getBasicAuthenticatedClient(ws, "com.totvs.IwsFormulaVisual", 'mestre', 'senha');
Após isso, foi observado dentro do Eclipse todos os métodos que compõem esta Interface.
Logo em seguida chamamos o método result = authService.execute , este método retorna um objeto do tipo ConWSFormulaVisualResult .
Ao analisar a classe ConWSFormulaVisualResult verifiquei que existe um método do tipo getErrorType() e getErrorMessage() , ambas retornam objeto do tipo java.xml.bind.JAXBElement<String>
Por fim, em um contexto que a fórmula visual gera uma exceção, podemos perceber os valores destas duas tags abaixo:
O método getValue é o gerado pela classe JAXBElement, que pode ser visto neste link.
log.info('getErrorMessage() ' + result.getErrorMessage().getValue());
//Gera o resultado
//ERRO - Fórmula Visual: 'TESTE FORMULA VISUAL'.
log.info('getErrorMessage() ' + result.getErrorType().getValue());
//RM.Lib.Workflow.RMSWorkflowException
Referências
https://docs.oracle.com/javaee/7/api/javax/xml/bind/JAXBElement.html
Comments ()