saveAndSendTask - Erro ao chamar o método.

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.

Qualquer ajuda é bem vinda. Obrigado!

compartilhar
  • Gustavo, o campo quaisInfo___0 do formulário seria um campo paixfilho? No caso o paixfilho inicia do indice 1, passar 0 pode dar algum problema.

    Diogo Boegershausen   15 de Aug de 2019
  • Era isso mesmo @Diogo Boegershausen, muito obrigado! Poste seu comentário como resposta para que eu possa marcar como resolvido e ajudar quem ver esse post.

    Gustavo Máximo II   3 months ago
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do fluig Forum!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags api apirest datasets dataset datasets-customizados datasets-customizado wsdl ecmworkflowengineservice ou faça a sua própria pergunta.