Possivelmente esta é uma pergunta de novato, mas eu não consegui, antes de recorrer ao forum, descobrir (ou entender) como criar um dataset sobre documentos que tenho numa pasta como subpasta de Formulários de Fluig.
Assim, eu tentei fazer um dataset avançado no Eclipse Fluig Studio.
A pasta em que constam os documentos os quais eu gostaria que um dataset listasse na totalidade tem o id 42572.
O código que pus na rotina de criação de dataset foi o seguinte:
function createDataset(fields, constraints, sortFields) {
jQuery.get("/api/public/ecm/document/listDocument/42572 limit=10000",function(retorno){
var dataset = DatasetBuilder.newDataset();
//Cria as colunas
dataset.addColumn("Sigla");
dataset.addColumn("foto");
dataset.addColumn("numeroDocumento");
//rolando todo o conteúdo da pasta origem dos documentos
jQuery.each(retorno.content,function (k,v){
//a cada passagem do loop, pego o documento 'da vez'
let nomeFoto = v.description;
let numeroDocumento = v.id;
let intPonto = nomeFoto.indexOf(".");
let siglaLida = nomeFoto.substring(0,intPonto);
//adiciono ao dataset o documento 'da vez'
dataset.addRow(new Array(siglaLida, nomeFoto, numeroDocumento));
});//each
return dataset;
});//get
}//createDataset
Ao exportar o documento para o servidor, vejo que dá erro na abertura/pesquisa do Dataset (Internal server error).
Datasets são executados no lado servidor, pelo interpretador, e não possuem acesso à biblioteca jQuery.
Reescrevi o código utilizando a biblioteca nativa do Fluig (DatasetFactory):
function createDataset(fields, constraints, sortFields) {
var dsRetorno = DatasetBuilder.newDataset();
dsRetorno.addColumn("Sigla");
dsRetorno.addColumn("foto");
dsRetorno.addColumn("numeroDocumento");
// Filtra somente os documentos da pasta desejada
var chave1 = DatasetFactory.createConstraint("parentDocumentId", 15131, 15131, ConstraintType.MUST);
// Filtra apenas documentos ativos (não excluidos)
var chave2 = DatasetFactory.createConstraint("deleted", false, false, ConstraintType.MUST);
// Filtro Opcional por Sigla
var chave3;
var chaves = [chave1, chave2];
/* INICIO EDICAO */
// Valida se foi informada alguma Constraint Personalizada
if (constraints && constraints.length){
for (var i = 0; i < constraints.length; i++) {
// Para filtrar pela Sigla
if( constraints[i].fieldName == "Sigla" ) {
chave3 = DatasetFactory.createConstraint("documentDescription", "%" + constraints[i].initialValue + "%",
"%" + constraints[i].finalValue+ "%", ConstraintType.SHOULD);
// o setLikeSearch indica que voce gostaria de filtrar por parte do nome tbm
chave3.setLikeSearch(true);
chaves = [chave1, chave2, chave3];
}
}
}
/* FINAL EDICAO */
var files = DatasetFactory.getDataset("document", null, chaves, null);
for (var i=0; i < files.rowsCount; i++){
var foto = files.getValue(i, "documentDescription");
var numD = files.getValue(i, "documentPK.documentId");
var sigla = foto.substring(0, foto.indexOf(".") );
dsRetorno.addRow( [ sigla, foto, numD ] );
}
return dsRetorno;
}
Se ficou alguma dúvida ou tiver algum problema, comente aqui.
EDIT: Incluí a validação de Constraints para filtrar por nome de arquivo.
Criei o Dataset sem problemas - conforme a valiosa informação do Luiz Portal - e, conforme imagem em anexo(foto.png), ele está populado com 76 documentos (A foto, por questão de economia, mostra apenas os primeiros).
Entretanto, ao aplicar a função de busca, não importando qual a sigla passada dentro do Constraint, sempre traz todas as ocorrências, de modo que a primeira delas, que deveria ser um único registro de resposta, mostra a primeira foto das 76.
Isto é, não importa qual sigla eu passe, sempre o primeiro registro é de uma pessoa que não é a dona da foto.
function fMostraFotoCons(siglaDada){
if(siglaDada !="0"){
siglaDada=siglaDada.toUpperCase();
let c1B = DatasetFactory.createConstraint("Sigla",siglaDada,siglaDada,ConstraintType.MUST);
let arrayConstraintsFoto = new Array(c1B);
let resultadoFoto =
DatasetFactory.getDataset("ds_ucrg_snc_fotos",null,arrayConstraintsFoto,null);
console.log("Quantidade de fotos: "+resultadoFoto.values.length);//mostra sempre 76
if(resultadoFoto.values.length>0){
let numeroDocumento= resultadoFoto.values[0].numeroDocumento;
let caminhoArquivo="http://fluig.xpto.com.br:8080/api/public/ecm/document/documentfile/"+numeroDocumento+"/1000";
jQuery("#idImgSNCConsFoto").prop("src",caminhoArquivo);
jQuery("#idImgSNCConsFoto").show();
}//if resultadoFoto
}//if siglaDada
}//fMostraFotoCons
Atenção: Esta publicação foi transferida automaticamente do fórum antigo, mas os anexos não foram incluídos.
Por ser um dataset customizado, você vai ter que efetuar o tratamento da Constraint dentro do seu código. No meu código, para simplificar, listei todos os registros. Vou editar minha resposta incluindo a tratativa de Constraints.
Obrigado, Luiz. Não sei se copiei algo que não devia, mas agora, após o envio do código para o servidor, ao pesquisar o constraints no Painel de Controle ele está vazio de dados. Imaginei que, para popular, ele deveria ser provocado pelo código da minha widget, mas mesmo assim não vêm nada.
let siglaAdv=‘ARN’;
let c1F = DatasetFactory.createConstraint(“Sigla”,siglaAdv,siglaAdv,ConstraintType.SHOULD,true);
let arrayConstraintsFoto = new Array(c1F);
let f=0;
let resultadoFoto = DatasetFactory.getDataset(“ds_ucrg_snc_fotos”,null,arrayConstraintsFoto,null);
É isto mesmo, Luiz. Pus o número 42572 e agora a consulta gráfica nos datasets do painel de controle mostra todos os documentos. Só não consegui ainda consultar passando o parâmetro da sigla e retornar registro.
Não vem nada, se eu passar como MUST ou como SHOULD, com TRUE ou sem TRUE no fim do constraint na widget.
Era isto mesmo, Luiz. Você, na sua ajuda, trocou um número. E eu, na minha intervenção, me esqueci de reeditar seu código para que a sigla fosse em caixa alta para dentro do Dataset. Agora que corrigi as siglas para maiúsculas, funcionou 100%. Muito obrigado. Então, para quem interessar possa, seu código está correto.