Versão atual:

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!

Versão (1):

Ver a versão formatada

saveAndSendTask - Erro ao chamar o método.

Comentário

new question