Boa tarde pessoal, tenho um processo que em determinado estado do processo eu preciso criar atividades para serem feitas, segue o print dos campos onde eu coloco as informações
Imagem 1 - Processo Principal Atual
Imagem 2 - Sub-processo antigo
Esse processo funcionava em um sub-processo antigo:
Imagem 3 - Sub-Processo novo (Listar Tarefas)
Agora a ideia é adicionar essas atividades no processo FLUIGADHOC
Em Assunto, detalhes e data de conclusão serão valores para relacionar com o processo principal atual
Exemplo: Assunto RNC - Numero do processo principal, detalhes - um texto digitado em um campo do processo principal + assunto, e data de conclusão - o prazo
E toda vez que clicar em adicionar, adicionar na lista tarefa, usando os campos da imagem 1
Uma das dificuldades está sendo relacionar os dois processos, associando o sub-processo com o processo pai, após o primeiro clique.
Segue o código que estou usando para iniciar o processo
function startProcess() {
try {
var sol = $("#matResp_registro").val();
var hr = $("#fdHora").val();
var dt = $("#fdData").val();
var obs = $("#txObs").val();
var resp = $("#zoomColleagueId").val();
var nameResp = $("#zoomColleagueName").val();
var nrRegistro = $("#nr_registro").val();
var hashPai = $("#hashPai").val() || "";
console.log("Responsável:", resp, nameResp);
// Validações
if (!resp) {
FLUIGC.toast({
title: "Atenção",
message: "Informe o responsável pela atividade.",
type: "warning",
});
return;
}
if (!dt) {
FLUIGC.toast({
title: "Atenção",
message: "Informe o prazo da atividade.",
type: "warning",
});
return;
}
// Monta parâmetros SOAP
var prm = new SOAPClientParameters();
prm.add("companyId", "1");
prm.add("username", "adm");
prm.add("password", "adm");
prm.add("processId", "FLUIGADHOC");
prm.add("choosedState", 3);
prm.add("colleagueIds", [resp]);
prm.add(
"comments",
"Processo iniciado via formulário de não conformidade."
);
prm.add("userId", sol);
prm.add("completeTask", true);
prm.add("attachments", "");
prm.add("appointment", "");
prm.add("managerMode", false);
prm.add("cardData", [
{ key: "meeting", value: "RNC - " + nrRegistro },
{ key: "detail", value: obs },
{ key: "dueDate", value: dt },
{ key: "nomeativ", value: obs },
{ key: "dtprazoatividade", value: dt },
{ key: "hdnrespativ", value: resp },
{ key: "numProcessPai", value: nrRegistro },
{ key: "hashPai", value: hashPai },
{ key: "nmResponsavel", value: nameResp },
{ key: "idResponsavel", value: resp },
]);
console.log("Chamando startProcessClassic...");
var jsonText = SOAPClient.invoke(
returnCurrentURL() + "webdesk/ECMWorkflowEngineService",
"startProcessClassic",
prm,
false,
null
).json;
console.log("jsonText", jsonText);
// Força JSON válido (mesma técnica do outro processo)
var arrJson = jsonText
.replace("result", '"result"')
.split("key")
.join('"key"')
.split("value")
.join('"value"');
arrJson = $.parseJSON(arrJson);
console.log("DADOS", arrJson["result"]);
// Captura o número do processo Adhoc
var numAdhoc = arrJson["result"].find(
(item) => item.key === "iProcess"
).value;
console.log("Número do processo Adhoc criado:", numAdhoc);
$("#numProcessAdhoc").val(numAdhoc);
hAPI.setCardValue("numProcessAdhoc", numProcessAdhoc);
// Salva no processo pai
if (parent?.window?.WKFAPI?.setCardValue) {
parent.window.WKFAPI.setCardValue("numProcessAdhoc", numAdhoc);
}
FLUIGC.toast({
title: "Sucesso!",
message: "Processo Adhoc gerado com sucesso! Nº: " + numAdhoc,
type: "success",
});
// Limpa campos
$("#zoomColleagueId").val("");
$("#zoomColleagueName").val("");
$("#sResponsavel").val("");
$("#fdData").val("");
$("#txObs").val("");
var _zoom = FLUIGC.autocomplete("input#sResponsavel");
_zoom.removeAll();
} catch (err) {
console.error("Erro ao iniciar processo Adhoc:", err);
FLUIGC.toast({
title: "Erro!",
message: "Falha ao criar o processo Adhoc. " + err,
type: "danger",
});
}
}
cancelProcess = function (id, res) {
var prm = new SOAPClientParameters();
prm.add("companyId", "1");
prm.add("username", "adm");
prm.add("password", "adm");
prm.add("processInstanceId", id);
prm.add("userId", res);
prm.add("cancelText", "Cancelado via processo de RNC");
var jsonText = SOAPClient.invoke(
returnCurrentURL() + "webdesk/ECMWorkflowEngineService",
"cancelInstance",
prm,
false,
null
).json;
var arrJson = jsonText.replace("result", '"result"');
arrJson = arrJson.split("key").join('"key"');
arrJson = arrJson.split("value").join('"value"');
arrJson = $.parseJSON(arrJson);
FLUIGC.toast({
title: "Sucesso!",
message: "o processo foi cancelado",
type: "success",
});
table();
};
// converte yyyy-dd-mm → dd/mm/yyyy
function formatDateYDDMM(data) {
if (!data) return "";
const [ano, dia, mes] = data.split("-");
return `${dia.padStart(2, "0")}/${mes.padStart(2, "0")}/${ano}`;
}
// =====================================================================
// 📋 FUNÇÃO: table()
// =====================================================================
// Essa função atualiza uma tabela dinâmica de registros.
// É chamada após gerar um processo ou salvar.
table = function () {
try {
var options = {
linha: function () {
var consulta = getDadosTabela();
console.log("Consulta tabela:", consulta);
if (consulta.values.length > 0) {
var arrLinha = [];
for (var i = 0; i < consulta.values.length; i++) {
console.log(i);
arrLinha.push({
acao: consulta.values[i]["nomeativ"] || "",
prazo: consulta.values[i]["dtprazoatividade"] || "",
responsavel: consulta.values[i]["hdnrespativ"] || "",
btn: function () {
return function (text, render) {
var strRet = "";
var strTxt = render(text);
if (strTxt.trim() === "Aberto") {
strRet =
'<button type="button" class="btn btn-danger">Cancelar</button>';
} else if (strTxt.trim() === "Finalizado") {
strRet =
'<button type="button" class="btn btn-danger disabled">Cancelar</button>';
}
return strRet;
};
},
});
}
return arrLinha;
}
},
};
var html =
'<table class="table table-striped table-bordered">' +
" <thead>" +
" <tr>" +
" <th>Ação</th>" +
" <th>Prazo</th>" +
" <th>Responsável</th>" +
" <th></th>" +
" </tr>" +
" </thead>" +
" <tbody>" +
" {{#linha}}" +
" <tr>" +
" <td>{{acao}}</td>" +
" <td>{{prazo}}</td>" +
" <td>{{responsavel}}</td>" +
' <td><div class="btn-group btn-group-xs">{{#btn}} {{status}} {{/btn}}</div></td>' +
" </tr>" +
" {{/linha}}" +
" </tbody>" +
"</table>";
console.log(options);
$("#must").children().remove();
$("#must").append(Mustache.render(html, options));
} catch (err) {
console.log(err);
}
};
getDadosTabela = function () {
// Constraint vazia ou baseada em algum filtro opcional
$("#numProcessAdhoc").val;
var constraints = new Array(
DatasetFactory.createConstraint(
"documentid",
$("#numProcessAdhoc").val(),
$("#numProcessAdhoc").val(),
ConstraintType.MUST
)
);
// Busca os cards do dataset FLUIGADHOC
var dataset = DatasetFactory.getDataset(
"FLUIGADHOC",
null,
constraints,
null
);
console.log("Dados retornados pelo dataset FLUIGADHOC:", dataset);
return dataset;
};
Se tiver alguma dica, ou documentação que eu possa ler, ou algo que possa melhorar no código seria de grande ajuda
