startProcess no beforeTaskSave

É possível iniciar uma nova solicitação (startProcess) no beforeTaskSave?

Estou tentando fazer e tá dando um erro JavaException: javax.xml.ws.soap.SOAPFaultException: Marshalling Error: class sun.org.mozilla.javascript.internal.IdFunctionObject e nenhuma de sua superclasse é conhecida para este contexto.

image

Bom dia,

Pode colocar o código do seu Beforetasksave aqui?

function beforeTaskSave(colleagueId,nextSequenceId,userList){
	if(nextSequenceId == 35){ //35 = Fim
		var avaliacaoPeriodica = hAPI.getCardValue("avaliacaoPeriodica") == "on" ? true : false;
		
		var qtd = 1;
		
		if(avaliacaoPeriodica){
			qtd++;
		}
		
		var anexos = hAPI.listAttachments();

		if(anexos.size() < qtd){
			if(avaliacaoPeriodica){
				throw "\n\nObrigatório anexar a Avaliação Periódica e a Avaliação Global.\n\n";
			}
			else{
				throw "\n\nObrigatório anexar a Avaliação Global.\n\n";
			}
		}
		
		try{
			if(hAPI.getCardValue("renovarPrograma") == "Sim"){
				log.warn(">>> SESMT04, "+getValue("WKNumProces")+", beforeTaskSave() | Renovando programa");
				
				var servico = ServiceManager.getService("ECMWorkflowEngineService").getBean();
				log.info(">>> SESMT04, "+getValue("WKNumProces")+", beforeTaskSave() | servico => " + servico);
				
				var locator = servico.instantiate("com.totvs.technology.ecm.workflow.ws.ECMWorkflowEngineServiceService");
				log.info(">>> SESMT04, "+getValue("WKNumProces")+", beforeTaskSave() | locator => " + locator);
				
				var WorkflowEngineService = locator.getWorkflowEngineServicePort();
				log.info(">>> SESMT04, "+getValue("WKNumProces")+", beforeTaskSave() | WorkflowEngineService => " + WorkflowEngineService);
				
				var credenciais = getIds();
				var username = credenciais.login;
				var password = credenciais.password;
				var companyId = getValue("WKCompany");
				var processId = "SESMT04";
				var choosedState = 1;
				var colleagueIds = servico.instantiate("net.java.dev.jaxb.array.StringArray");
				log.info(">>> SESMT04, "+getValue("WKNumProces")+", beforeTaskSave() | colleagueIds => " + colleagueIds);
				
					colleagueIds.getItem().add(hAPI.getCardValue('matriculaSolicitante'));
				var comments = "";
				var userId = hAPI.getCardValue('matriculaSolicitante');
				var completeTask = false;
				var attachments = servico.instantiate("com.totvs.technology.ecm.workflow.ws.ProcessAttachmentDtoArray");
				log.info(">>> SESMT04, "+getValue("WKNumProces")+", beforeTaskSave() | attachments => " + attachments);
				
				
				log.info(">>> SESMT04, "+getValue("WKNumProces")+", beforeTaskSave() | Passando cardData");
				var cardData = preencheFichaRevisao(servico);
				
				var appointment = servico.instantiate("com.totvs.technology.ecm.workflow.ws.ProcessTaskAppointmentDtoArray");
				var managerMode = false;
				
				log.info(">>> SESMT04, "+getValue("WKNumProces")+", beforeTaskSave() | CRIANDO SOLICITAÇÃO");
				var novaSolic = WorkflowEngineService.startProcess(username,
																	password,
																	companyId,
																	processId,
																	choosedState,
																	colleagueIds,
																	comments,
																	userId,
																	completeTask,
																	attachments,
																	cardData,
																	appointment,
																	managerMode);
				var numeroNovaSolic = "";
				
				for(var j=0; j < novaSolic.getItem().size(); j++){
					if(novaSolic.getItem().get(j).getItem().get(0) == "iProcess"){
						numeroNovaSolic = novaSolic.getItem().get(j).getItem().get(1).toString();
						break;
					}
				}
				
				log.info(">>> SESMT04, "+getValue("WKNumProces")+", beforeTaskSave() | numeroNovaSolic => " + numeroNovaSolic);
				
				if(numeroNovaSolic == ""){
					var erroRetorno = "";
					for(var k=0 ; k < novaSolic.getItem().size() ; k++){
						erroRetorno +=" ---- "+novaSolic.getItem().get(k).getItem().get(0) + " => "+novaSolic.getItem().get(k).getItem().get(1);
					}
					throw erroRetorno;
				} 
				else{
					hAPI.setCardValue("solicProxRevisao", (numeroNovaSolic).toString());						
				}
			}
		}
		catch(e){
			log.error(">>> SESMT04, "+getValue("WKNumProces")+", beforeTaskSave() | Erro ao renovar programa (linha "+e.lineNumber+") => " + e);
			throw "Erro ao renovar programa: " + e;
		}
	}
}

function preencheFichaRevisao(servico){
	try{
		var cardData = servico.instantiate("net.java.dev.jaxb.array.StringArrayArray");

		var campoDescritor = servico.instantiate("net.java.dev.jaxb.array.StringArray");
		campoDescritor.getItem().add("campoDescritor");
		campoDescritor.getItem().add(hAPI.getCardValue("campoDescritor"));
		cardData.getItem().add(campoDescritor);

		var solicRevisaoAnterior = servico.instantiate("net.java.dev.jaxb.array.StringArray");
		solicRevisaoAnterior.getItem().add("solicRevisaoAnterior");
		solicRevisaoAnterior.getItem().add((getValue("WKNumProces")).toString());
		cardData.getItem().add(solicRevisaoAnterior);

		var programaLegal = servico.instantiate("net.java.dev.jaxb.array.StringArray");
		programaLegal.getItem().add("programaLegal");
		programaLegal.getItem().add(hAPI.getCardValue("programaLegal"));
		cardData.getItem().add(programaLegal);
		
		var novaRevisao = hAPI.getCardValue("revisao");
			novaRevisao = (parseInt(novaRevisao)+1) < 10 ? "0" + novaRevisao : novaRevisao;

		var revisao = servico.instantiate("net.java.dev.jaxb.array.StringArray");
		revisao.getItem().add("revisao");
		revisao.getItem().add((novaRevisao).toString);
		cardData.getItem().add(revisao);

		var nomeFilial = servico.instantiate("net.java.dev.jaxb.array.StringArray");
		nomeFilial.getItem().add("nomeFilial");
		nomeFilial.getItem().add(hAPI.getCardValue("nomeFilial"));
		cardData.getItem().add(nomeFilial);

		var codFilial = servico.instantiate("net.java.dev.jaxb.array.StringArray");
		codFilial.getItem().add("codFilial");
		codFilial.getItem().add(hAPI.getCardValue("codFilial"));
		cardData.getItem().add(codFilial);

		var nomeEstabelecimento = servico.instantiate("net.java.dev.jaxb.array.StringArray");
		nomeEstabelecimento.getItem().add("nomeEstabelecimento");
		nomeEstabelecimento.getItem().add(hAPI.getCardValue("nomeEstabelecimento"));
		cardData.getItem().add(nomeEstabelecimento);

		var matriculaRespEstabelec = servico.instantiate("net.java.dev.jaxb.array.StringArray");
		matriculaRespEstabelec.getItem().add("matriculaRespEstabelec");
		matriculaRespEstabelec.getItem().add(hAPI.getCardValue("matriculaRespEstabelec"));
		cardData.getItem().add(matriculaRespEstabelec);

		var nomeRespEstabelec = servico.instantiate("net.java.dev.jaxb.array.StringArray");
		nomeRespEstabelec.getItem().add("nomeRespEstabelec");
		nomeRespEstabelec.getItem().add(hAPI.getCardValue("nomeRespEstabelec"));
		cardData.getItem().add(nomeRespEstabelec);

		return cardData;
	} 
	catch (e){
		log.error(">>> SESMT04, "+getValue("WKNumProces")+", beforeTaskSave() > preencheFichaRevisao() | Erro ao preencher cardData (linha "+e.lineNumber+") => " + e);
		throw e;
	}
}

Cara vou te passa como faço desculpa a demora acabei esquecendo.

var resp = hAPI.startProcess("FIN07", 5, users, "Solicitação inicializada pelo processo: "+getValue("WKNumProces"), true, formData, false);

startProcess(processId, ativDest, listaColab, “obs”, completarTarefa, valoresForm, modoGestor)
Inicia uma solicitação workflow , onde:

  • processId: código do processo;
  • ativDest: código da atividade de destino;
  • listaColab: lista (do tipo String) de usuários;
  • obs: texto da observação;
  • completarTarefa: indica se deve completar a tarefa (true) ou apenas salvar (false);
  • valoresForm: um Mapa com os valores do formulário do processo;
  • modoGestor: indica que o usuário iniciará a solicitação como gestor (true) ou que o usuário iniciará a solicitação apenas como solicitante (false).

Retorna um mapa com informações da solicitação criada. Entre elas, o iProcess que é o número da solicitação criada.

isto já faz o startprocess.

1 curtida

Sempre fiz dessa forma, nunca usei o hAPI. Mas sempre abri uma nova solicitação através de uma atividade serviço ou condicional. No beforeTaskSave nunca tinha feito.

Mas vou testar dessa forma. Se funcionar é bem mais simples, realmente. Obrigado por enquanto.

Eu uso em atividade de serviço se tiver o hAPI disponível pode usar.