Criar dataset sobre uma pasta de formulários do fluig

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).

Qual será a abordagem correta?

Mausim,

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.

Agora consegui entender, Postal, como funciona o constraint dentro da criação de um dataset. Obrigado.

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

:warning: Atenção: Esta publicação foi transferida automaticamente do fórum antigo, mas os anexos não foram incluídos.

Mausim,

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.

Agradeço imensamente, Luiz.

Incluí o código para validar a Constraint. Qualquer problema só avisar.

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.

Como você está chamando o dataset em sua widget?

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);

Acho que já sei o que é, Luiz. É o número da busca do parent document. Está 15131 mas não deveria ser 42572?

Correto, eu havia alterado para testar em minha base local e não voltei para o código da sua pasta.

É 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.

Acho que já sei qual o problema. O UPPERCASE da sigla, que, no dataset está LOWERCASE. Vou testar.

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.