Boa tarde,
Por diversas vezes eu precisei listar todos as solicitações ativas e concluídas de um determinado processo, ou seja, listar todas as solicitações que não foram canceladas.
Essa tarefa é lenta porque o dataset processTask não possui a informação da ID Processo, possuindo somente o número da solicitação.
Desse modo, para conseguir a informação preciso seguir as seguintes etapas.
1) Listar todas as solicitações de um determinado processo (workflowProcess).
var that = this;
var c1 = DatasetFactory.createConstraint("processId", "SFD", "SFD", ConstraintType.MUST);
var restricoes = new Array(c1)
var dataSetProcess = DatasetFactory.getDataset("workflowProcess", null, restricoes, null);
2) Criar uma CONSTRAINT do tipo like para cada um das solicitações listadas no dataset anterior
var restricoes = [];
if(dataSetProcess.values.length<=0){
return null;
}
var restricoesTask = [];
for (var i in dataSetProcess.values){
var registro = dataSetProcess.values[i];
var cTask = DatasetFactory.createConstraint("processTaskPK.processInstanceId",registro['workflowProcessPK.processInstanceId'],registro['workflowProcessPK.processInstanceId'], ConstraintType.SHOULD);
restricoesTask.push(cTask);
}
3) Acessar o dataset processTaskPK com o array das CONSTRAINT criadas na etapa 2.
var dataSetTask = DatasetFactory.getDataset("processTask", null, restricoesTask, null);
4) Fazer um filtro em javascript do resultado da etapa 3 onde o status é igual a "4".
var taskCancelados = dataSetTask.values.filter(function (el){
return el.status == 4;
});
5) Eliminar do resultado da etapa 1 as solicitações do resultado da etapa 4.
Como podemos notar o processo é moroso porque tenho que fazer requisições sequenciadas e as requisições retornam informações desnecessárias.
Uma forma mais simples seria a Totvs adicionar mais um campo no dataset workflowProcess com a informação se a solicitação está concluída, ativa ou cancelada.
Vocês poderiam fazer isso ?