Boa tarde, estou tentando consumir o seguinte WSDL através de um dataset:
ambientefluig.com/webdesk/ECMWorkflowEngineService?wsdl
Porém ao invocar o método saveAndSaveTask me deparo com o seguinte erro:
2019-08-14 14:24:25,211 ERROR [org.jboss.as.ejb3.invocation] (default task-5) WFLYEJB0034: EJB Invocation failed on component wdk/CardFieldML for method public abstract int com.datasul.technology.webdesk.forms.business.CardFieldPersistence.createCardFields(com.datasul.technology.webdesk.dm.model.Document,java.util.Map) throws java.lang.Exception: javax.ejb.EJBTransactionRolledbackException
Dataset completo:
/* eslint-disable */
function createDataset(fields, constraints, sortFields) {
// Instancia estrutura de dados para guardar dados a serem retornados
var dataset = DatasetBuilder.newDataset();
var username = ""; // login do usuário.
var password = ""; // palavra de passar.
var companyId = 1; // código da empresa.
var processInstanceId = ''; // número da sollecitazione.
var choosedState = 3; // número da atividade destino.
var colleagueIds = ''; // usuário que receberá a tarefa.
var comments = 'Criado pelo sistema'; // comentários.
var colleagueId = ''; // matrícula do usuário que vai iniciar a solicitação.
var completeTask = true; // indica se deve completar a tarefa (true) ou somente salvar (false).
var managerMode = false; // indica se usuário esta executando a tarefa como gestor do processo.
var threadSequence = 0 // bagulho nada a ver.
// Tratativa de exeções
try {
// Determina serviço que será utilizado
var workflowService = ServiceManager.getService('ECMWorkflowEngineService');
// Inicializa serviço
var serviceHelper = workflowService.getBean();
// Instancia classe do serviço
var engineServiceService = serviceHelper.instantiate('com.totvs.technology.ecm.workflow.ws.ECMWorkflowEngineServiceService');
// Obtem porta de serviço para chamar métodos do serviço
var service = engineServiceService.getWorkflowEngineServicePort();
// Instancia classe de array de anexos
var attachments = serviceHelper.instantiate('com.totvs.technology.ecm.workflow.ws.ProcessAttachmentDtoArray');
// Instancia classe de array de apontamentos da tarefa
var appointment = serviceHelper.instantiate('com.totvs.technology.ecm.workflow.ws.ProcessTaskAppointmentDtoArray');
// Instancia classe de array de campos do formulário
var cardData = serviceHelper.instantiate('net.java.dev.jaxb.array.StringArrayArray');
// Instancia classe de array de usuários que receberão proxima tarefa
var colleagueIds = serviceHelper.instantiate('net.java.dev.jaxb.array.StringArray');
// Inicializa cardData que depois recebe dados das constraints
var cardDataArray = '';
// Loop iterando em array de constraints e substituindo valores de objeto de parâmetros
if(constraints != null) {
for(var i = 0; i < constraints.length; i++) {
if (constraints[i].fieldName == "processInstanceId") {
processInstanceId = constraints[i].initialValue;
}
if (constraints[i].fieldName == "cardData") {
cardDataArray = constraints[i].initialValue;
}
if (constraints[i].fieldName == "choosedState") {
choosedState = constraints[i].initialValue;
}
}
}
// Mete um parse pra transformar a string em obj
cardDataArray = JSON.parse(cardDataArray);
// Roda cardDataArray pra transformar os obj num outro tipo de obj que o fluig curte (stringArray)
for(var i = 0; i < cardDataArray.length; i++) {
var stringArray = serviceHelper.instantiate('net.java.dev.jaxb.array.StringArray');
stringArray.getItem().add(cardDataArray[i].key);
stringArray.getItem().add(cardDataArray[i].value);
cardData.getItem().add(stringArray);
}
log.info('cardData antes de transmutar os obj em stringArray:');
log.dir(cardDataArray);
log.info('cardData final:');
log.dir(cardData);
log.info('trava justamente aqui, antes do service.SaveAndSendTask:');
// Chama o método para envio de tarefa passando os parâmetros necessários
var retorno = service.saveAndSendTask(
username, // login usuário
password, // passepalavra
companyId, // empresa
processInstanceId,
choosedState, // tarefa destino
colleagueIds, // usuários que receberão tarefa
comments, // comentário
colleagueId, // usuário responsável pela movimentação
completeTask, // indica se deve completar a tarefa (true) ou somente salvar (false)
attachments, // anexos para a solicitação
cardData, // dados para formulário
appointment, // apontamentos para tarefa
managerMode, // indica se usuário esta executando a tarefa como gestor do processo
threadSequence // thread da tarefa (se não possuir tarefas paralelas é 0)
);
log.info('Este log info não consta no log do ambiente. O código quebra antes');
var registro = new Array();
var colunas = retorno.getItem();
// Loop em estrutura de classe String[][] de retorno de webservice
for(var i = 0; i < colunas.size(); i++) {
// Cria colunas em dataset
dataset.addColumn(colunas.get(i).getItem().get(0).toString());
// Insere valores em array
registro.push(colunas.get(i).getItem().get(1).toString());
}
// Insere registro em dataset
dataset.addRow(registro);
} catch(error) {
// Caso intercepte exeção retorna dataset com mensagem
dataset.addColumn("ERROR");
dataset.addRow([error.toString()]);
}
// Retorna dataset
return dataset;
}
Log do ambiente:
2019-08-14 15:08:04,478 INFO [com.datasul.technology.webdesk.dataset.business.DatasetBO] (default task-4) Executando Dataset com ID ds_helpdeskSaveAndSendTask do tipo Avançado.
2019-08-14 15:08:04,478 INFO [com.datasul.technology.webdesk.dataset.business.DatasetBO] (default task-4) Builder rodando sem o mobile
2019-08-14 15:08:04,502 INFO [com.datasul.technology.webdesk.customization.ScriptingLog] (default task-4) here we go...
2019-08-14 15:08:04,504 INFO [org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean] (default task-4) Creating Service {http://ws.workflow.ecm.technology.totvs.com/}ECMWorkflowEngineServiceService from WSDL: http://qa.iv2.com.br:27585/webdesk/ECMWorkflowEngineService?wsdl
2019-08-14 15:08:04,579 INFO [com.datasul.technology.webdesk.customization.ScriptingLog] (default task-4) cardData antes de transmutar os obj em stringArray:
2019-08-14 15:08:04,580 INFO [com.datasul.technology.webdesk.customization.ScriptingLog] (default task-4) [ {
"key" : "nomecompleto",
"value" : "Nome do mano"
}, {
"key" : "email",
"value" : "Email do mano"
}, {
"key" : "software",
"value" : "Easy Project"
}, {
"key" : "descricao",
"value" : "dsadsadsadsdsa"
}, {
"key" : "phone",
"value" : "(11) 98989-4849"
}, {
"key" : "company",
"value" : "Qualidade"
}, {
"key" : "masPraticas",
"value" : ""
}, {
"key" : "responseDate",
"value" : "º14/08/2019 15:03:44º"
}, {
"key" : "urlTarget",
"value" : "http://ambientefluig.com/"
}, {
"key" : "widgetCode",
"value" : "helpdesk/"
}, {
"key" : "groupAssignment",
"value" : "Pool:Group:Massage-Responsible-Group"
}, {
"key" : "timeWhichTheRequestWasOpenned",
"value" : "2019-08-14"
}, {
"key" : "numProcess",
"value" : "1258"
}, {
"key" : "numState",
"value" : "3"
}, {
"key" : "hashEmail",
"value" : ""
}, {
"key" : "conclusion",
"value" : ""
}, {
"key" : "cancellationJustification",
"value" : "Justificacao qualquer"
}, {
"key" : "quaisInfo___0",
"value" : ""
} ]
2019-08-14 15:08:04,580 INFO [com.datasul.technology.webdesk.customization.ScriptingLog] (default task-4) cardData final:
2019-08-14 15:08:04,581 INFO [com.datasul.technology.webdesk.customization.ScriptingLog] (default task-4) {
"item" : [ {
"item" : [ "nomecompleto", "Nome do mano" ]
}, {
"item" : [ "email", "Email do mano" ]
}, {
"item" : [ "software", "Easy Project" ]
}, {
"item" : [ "descricao", "dsadsadsadsdsa" ]
}, {
"item" : [ "phone", "(11) 98989-4849" ]
}, {
"item" : [ "company", "Qualidade" ]
}, {
"item" : [ "masPraticas", "" ]
}, {
"item" : [ "responseDate", "º14/08/2019 15:03:44º" ]
}, {
"item" : [ "urlTarget", "http://ambientefluig.com/" ]
}, {
"item" : [ "widgetCode", "helpdesk/" ]
}, {
"item" : [ "groupAssignment", "Pool:Group:Massage-Responsible-Group" ]
}, {
"item" : [ "timeWhichTheRequestWasOpenned", "2019-08-14" ]
}, {
"item" : [ "numProcess", "1258" ]
}, {
"item" : [ "numState", "3" ]
}, {
"item" : [ "hashEmail", "" ]
}, {
"item" : [ "conclusion", "" ]
}, {
"item" : [ "cancellationJustification", "Justificacao qualquer" ]
}, {
"item" : [ "quaisInfo___0", "" ]
} ]
}
2019-08-14 15:08:04,581 INFO [com.datasul.technology.webdesk.customization.ScriptingLog] (default task-4) trava justamente aqui, antes do service.SaveAndSendTask:
2019-08-14 15:08:04,764 INFO [com.datasul.technology.webdesk.workflow.business.WorkflowBO] (default task-18) # Saving card. Process: HelpDesk, Instance: 1258, Sequence: 3, Dados: {quaisInfo___0=, software=Easy Project, numState=3, hashEmail=, responseDate=º14/08/2019 15:03:44º, descricao=dsadsadsadsdsa, masPraticas=, conclusion=, urlTarget=http://ambientefluig.com/, numProcess=1258, nomecompleto=Nome do mano, phone=(11) 98989-4849, cancellationJustification=whatever really!!!!, widgetCode=helpdesk/, company=Qualidade, groupAssignment=Pool:Group:Massage-Responsible-Group, timeWhichTheRequestWasOpenned=2019-08-14, email=Email do mano}
2019-08-14 15:08:05,073 ERROR [org.jboss.as.ejb3.invocation] (default task-18) WFLYEJB0034: EJB Invocation failed on component wdk/CardFieldML for method public abstract int com.datasul.technology.webdesk.forms.business.CardFieldPersistence.createCardFields(com.datasul.technology.webdesk.dm.model.Document,java.util.Map) throws java.lang.Exception: javax.ejb.EJBTransactionRolledbackException
Tenho quase certeza que esse erro é referente a algo no cardData, talvez sua estrutura, o tipo de dados passado etc pois a chamada do método saveAndSendTask funciona corretamente, levando em consideração a mensagem: "# Saving card." que dá a entender que ele começa a executar o salvamento do card porém falha no meio do caminho.
Autenticação não é um problema, os campos usuário e senha estão vazios por questões de segurança.
Caso tenha dúvidas ou queira ver outras seções do código fale que eu posto.