Criei o dataset que o @Bruno_Gasparetto criou dos anexos dos processos, e agora preciso apresentar esses dados em um campo zoom (ou outro que seja melhor). Só pra contextualizar, os anexos são currículos, e o campo zoom é pra selecionar o “candidato” finalista.
Mas esse dataset pra funcionar precisa receber uma constraint, até hoje eu só criei campo zoom sem precisar fazer isso, podem me ajudar?
Na Documentação do Zoom, embora mal formatado, explica como passar constraints.
Basicamente tem a propriedade filterValues
que é justamente pra enviar constraints ao dataset, fazendo assim a filtragem dos dados.
Nessa propriedade você passa a constraint e o valor, separando cada parte com vírgula. Pode-se passar várias constraints e valores, mas sempre separando com vírgula.
Por exemplo, o zoom abaixo chama o dataset passando as constraints situacao
e UF
.
<input type="zoom" class="form-control" id="agencia_nome" name="agencia_nome" data-zoom="{
'datasetId':'form_expedicao_agencia_postagem',
'filterValues':'situacao,Ativa,UF,MS',
'displayKey':'nome',
'maximumSelectionLength':'1',
'placeholder':'Selecione a Agência de Postagem',
'fields':[
{
'field':'nome',
'label':'Nome',
'standard':'true'
},
{
'field':'cartaoPostagem',
'label':'Cartão de Postagem',
'visible':'false'
}
]
}">
Então, eu estou usando o seu ds_process_attachments_files.js
como dataset e passando o seguinte zoom no formulário, e mesmo assim não está aparecendo os dados. O processo tem 3 anexos.
<div class="form-group col-md-5">
<strong><label for="nomeCargo">Candidato Selecionado:s</label></strong>
<input type="zoom" class="form-control" id="nomeCandidato" name="nomeCandidato" data-zoom="{
'datasetId':'ds_process_attachments_files',
'filterValues':'processid,343',
'displayKey':'fileName',
'placeholder':'Selecione um candidato',
'fields':[
{
'field':'fileName',
'label':'Nome do Candidato',
'standard':'true'
}
]
}">
Quando consulta o dataset, sem ser pelo Zoom, ele funciona normalmente?
O Log do Fluig indica algum erro?
Nenhum erro no log, e quando eu consulto o dataset não retorna nada… vou compartilhar abaixo o código:
/**
* Pega os documentos anexos a um processo
*
* Deve informar o processId na Constraint (e só ele será usado para filtrar dados).
*
* @param {string[]} fields
* @param {Constraint[]} constraints
* @param {string[]} sortFields
*/
function createDataset(fields, constraints, sortFields) {
// ID do usuário Admin para permitir que qualquer um possa consultar o dataset document
var adminUserId = "xpto"; //AQUI EU PASSEI O ID DO ADMINA
var i = 0;
var dataset = DatasetBuilder.newDataset();
dataset.addColumn("processId");
dataset.addColumn("documentId");
dataset.addColumn("fileName");
dataset.addColumn("downloadUrl");
var processId = getProcessIdFromConstraints(constraints);
if (!processId) {
return dataset;
}
var attachmentDocumentIds = getDocumentsIdFromProcess(processId);
if (!attachmentDocumentIds.length) {
return dataset;
}
var documentConstraints = [
DatasetFactory.createConstraint("phisicalFile", "", "", ConstraintType.MUST_NOT),
DatasetFactory.createConstraint("userSecurityId", adminUserId, adminUserId, ConstraintType.MUST)
];
for (i = 0; i < attachmentDocumentIds.length; ++i) {
documentConstraints.push(
DatasetFactory.createConstraint(
"documentPK.documentId",
attachmentDocumentIds[i],
attachmentDocumentIds[i],
ConstraintType.SHOULD
)
);
}
var attachmentsDs = DatasetFactory.getDataset(
"document",
["documentPK.documentId", "documentDescription"],
documentConstraints,
["lastModifiedDate"]
);
if (!attachmentsDs.rowsCount) {
return dataset;
}
var documentService = fluigAPI.getDocumentService();
var documentId = 0;
for (i = 0; i < attachmentsDs.rowsCount; ++i) {
documentId = parseInt(attachmentsDs.getValue(i, "documentPK.documentId"));
dataset.addRow([
processId,
documentId,
attachmentsDs.getValue(i, "documentDescription"),
documentService.getDownloadURL(documentId)
]);
}
return dataset;
}
/**
* Pega os IDs dos documentos que são anexos do processo
*
* @param {number} processId
* @returns {number[]}
*/
function getDocumentsIdFromProcess(processId) {
var ids = [];
var processAttachmentsDs = DatasetFactory.getDataset(
"processAttachment",
["documentId"],
[
DatasetFactory.createConstraint(
"processAttachmentPK.processInstanceId",
processId,
processId,
ConstraintType.MUST
),
DatasetFactory.createConstraint(
"originalThreadSequence",
0,
0,
ConstraintType.MUST
)
],
null
);
for (var i = 0; i < processAttachmentsDs.rowsCount; ++i) {
ids.push(parseInt(processAttachmentsDs.getValue(i, "documentId")));
}
return ids;
}
/**
* Pega o processId
*
* @param {Constraint[]} constraints Filtros
* @returns {number}
*/
function getProcessIdFromConstraints(constraints) {
for (var i = 0; i < constraints.length; ++i) {
if (constraints[i].fieldName.toLowerCase() == "processid") {
return parseInt(constraints[i].initialValue);
}
}
return 0;
}
Consegui resolver… Na função getDocumentsIdFromProcess
tinha uma segunda constraint lá que filtrava originalThreadSequence igual a zero, assim que eu removi, deu certo.
1 curtida