Bom dia, implementando um processo de requisição de produtos tenho a necessidade de que cada produtoseja aprovado pelo gestor do centro de custo destino. Porem na mesma solicitação é possível adicionar n produtos de diferentes centro de custos. Como fazer que cada gestor aprove o produto que foi informado para o seu centro de custo. Agradeço se alguém tiver um caminho para solução deste problema.
edit.: Esqueci de mencionar "Atividade conjunta" também seria uma possibilidade.
Opção 1: Se existirem centro de custo fixos que não serão alterados você pode criar 1 atividade para cada centro de custo e utilizar um Gateway Inclusivo, para iniciar somente as atividades necessárias.
Opção 2: Você pode colocar em loop sequencial, onde passaria por cada centro de custo individualmente... porem, este artefato disponibiliza somente uma atividade, se o Gestor assumir, os demais não vão conseguir interagir até que o processo seja enviado.
Opção 3: Atividade Ad-Hoc (https://tdn.totvs.com/display/public/fluig/Atividades+Workflow#AtividadesWorkflow-Ad-Hoc)
Opção 4: Iniciar múltiplos processos de aprovação (individuais) via api e monitorar no processo principal o preenchimento dos processos de aprovação, quando o status for alterado para "finalizado" você captura os dados da aprovação. (Este seria o modo mais complexo).
Deve haver outros modos, mas precisa entender qual seria mais adequado para as regra de negócio da empresa.
Bruno boa tarde.
A unica questão é como fazer isso dinamicamente, pois o colaborador pode escolher 1 ou mais centro de custos diferentes ou não.
Boa tarde. A unica maneira que encontrei de resolver o problema foi utilizando o web service e o mesmo abrindo cada solicitação separadamente. Assim porem é possível enviar a solicitação para um gestor especifico. Hoje pesquiso dentro do meu ERP o gestor e com ele a verificação via e-mail com o usuário do Fluig.
function servicetask10(attempt, message) {
log.warn("####### Service TASK 10");
var numProcessoPai = getValue("WKNumProces");
usuarioCorrente = getValue("WKUser");
emailUsuarioCorrente = fluigAPI.getUserService().getCurrent().getEmail();
var servico = ServiceManager.getService("ECMWorkflow");
var serviceHelper = servico.getBean();
//var usuario = new java.util.ArrayList();
//usuario.add("user" + "#####");
var service = serviceHelper.instantiate('WSFluig.ECMWorkflowEngineServiceService');
var request = service.getWorkflowEngineServicePort();
var indexes = hAPI.getChildrenIndexes("table_Produtos");
var total = 0;
var gestores = new java.util.ArrayList();
for (var i = 0; i < indexes.length; i++) {
if(!gestores.contains(hAPI.getCardValue("email_gestor___" + indexes[i]))){
gestores.add(hAPI.getCardValue("email_gestor___" + indexes[i]));
}
}
var iterador = gestores.size();
ObjFactory = serviceHelper.instantiate('WSFluig.ObjectFactory');
var ProcessAttachmentDtoArray = ObjFactory.createProcessAttachmentDtoArray();
var ProcessTaskAppointmentDtoArray = ObjFactory.createProcessTaskAppointmentDtoArray();
for(i = 0; i < iterador; i++) {
var contador = 0;
var email_gestor_atual = gestores.get(i);
var c1 = DatasetFactory.createConstraint("mail", email_gestor_atual, email_gestor_atual, ConstraintType.MUST);
var constraints = new Array(c1);
var dataset = DatasetFactory.getDataset("colleague", null, constraints, null);
var colleagueIds = ObjFactory.createStringArray();
colleagueIds.getItem().add(dataset.getValue(0, "colleaguePK.colleagueId")); //responsavel
var cardData = ObjFactory.createStringArrayArray();
for (var j = 0; j < indexes.length; j++) {
if(email_gestor_atual == hAPI.getCardValue("email_gestor___" + indexes[j])){
cardData.getItem().add(incluiCampo(ObjFactory, "CP_MAT", hAPI.getCardValue("CP_MAT")));
cardData.getItem().add(incluiCampo(ObjFactory, "email_gestor", hAPI.getCardValue("email_gestor___" + indexes[j])));
cardData.getItem().add(incluiCampo(ObjFactory, "email_solicitante", emailUsuarioCorrente));
cardData.getItem().add(incluiCampo(ObjFactory, "id_gestor", dataset.getValue(0, "colleaguePK.colleagueId")));
cardData.getItem().add(incluiCampo(ObjFactory, "funcionarioZOOM", hAPI.getCardValue("funcionarioZOOM")));
var produto = hAPI.getCardValue("produtoZOOM___" + indexes[j]);
var codigoprod = hAPI.getCardValue("CP_COD___" + indexes[j]);
var quantidadeprod = hAPI.getCardValue("CP_QUANT___" + indexes[j]);
var ctt_custo = hAPI.getCardValue("ctt_custo___" + indexes[j]);
cardData.getItem().add(incluiCampo(ObjFactory, "produtoZOOM___" +indexes[j],produto));
cardData.getItem().add(incluiCampo(ObjFactory, "CP_COD___" +indexes[j],codigoprod));
cardData.getItem().add(incluiCampo(ObjFactory, "CP_QUANT___" +indexes[j],quantidadeprod));
cardData.getItem().add(incluiCampo(ObjFactory, "ctt_custo___" +indexes[j],ctt_custo));
}
}
var userId = usuarioCorrente; //quem inicia
var ativDestino = 5;
var codEmpresa = 99; //trocar no ambiente produção
var retorno = request.startProcess("usuario", "#############", codEmpresa, 'Solicitação ao Armazem Aprovador', ativDestino, colleagueIds, 'processo iniciado pelo processo pai nº '+numProcessoPai, userId, true, ProcessAttachmentDtoArray, cardData, ProcessTaskAppointmentDtoArray, false);
var idProcesso = retorno.getItem().get(5).getItem().get(1);
log.info("*************** idProcesso gerado ************** "+idProcesso)
}
}
function incluiCampo(ObjFactory, nomeCampo, valorCampo) {
var field = ObjFactory.createStringArray();
field.getItem().add(nomeCampo); // nome do campo.
field.getItem().add(valorCampo); // valor do campo.
return field;
}