Dataset Estatico com Constraints

Pessoal, criamos um dataset estático (que em breve irá puxar do protheus) para cadastro de produtos. Esse dataset está bem enxuto.


function defineStructure() {

}
function onSync(lastSyncDate) {

}
function createDataset(fields, constraints, sortFields) {

var dataset = DatasetBuilder.newDataset ();

    //Cria Colunas
    dataset.addColumn("codigo");
    dataset.addColumn("descricao");
    dataset.addColumn("UN");
    dataset.addColumn("Tipo");
    dataset.addColumn("Grupo");

    //Cria Registros

    dataset.addRow(new Array("000001", "Flor de Sal 300g", "UN", "Produto Acabado","Foods"));
    dataset.addRow(new Array("000002", "Sal de Parrilla 1Kg", "UN", "Produto Acabado","Foods"));
    dataset.addRow(new Array("000003", "Sal Refinado Sosal de 25Kg", "SC", "Produto Acabado","Sal Refinado"));
    dataset.addRow(new Array("000004", "Sal Moido em Big Bag", "TN", "Produto Acabado","Sal Moido"));
    dataset.addRow(new Array("000005", "Notebook Lenovo 330S", "UN", "Ativo Imobilizado","Produtos de Informatica"));

    return dataset;


}function onMobileSync(user) {

}

Quero botar as contraints para funcionar nesse dataset. Porém, não estou conseguindo... alguem tem algum exemplo ?

Amauri, você deve passar as constraints na consulta a esse dataset, e nele, tratar essas informações que vem no array de constraints para ele ter o mesmo comportamento dos datasets internos. Porém, para não precisar ter que ter esse trabalhão, se você jornalizar o dataset o Fluig criará uma tabela no banco de dados e vai controlar o uso dessas constraints, segue a documentação de como sincronizar dataset.

https://tdn.totvs.com/pages/releaseview.action?pageId=212899013

Com base na sua resposta, Amauri, acredito que você precise ajustar a busca do campo do dataset. O dataset é uma classe/definição dentro do Fluig, que não é um array. Ou seja, dentro do script do dataset.

Troque de:


tempDataset[a]["codigo"]

Para:


tempDataset.getValue(a, "codigo")

Em todas as ocorrências.

Lembrando, caso a resposta atenda a sua demanda, marque-a como correta, pode ser a dúvida de outros usuários. Qualquer dúvida, é só interagir!

Cara, apareceu, porem, só aparece o PRIMEIRO REGISTRO do Dataset e não o registro que eu selecionei…

O codigo

console.log(“indice:”, indice)
console.log(“Código do produto:”, codigo)
console.log(“Retorno Código:”, retornoDataset.values[0].codigo)
console.log(“Retorno Descrição:”, retornoDataset.values[0].descricao)

retorna sempre o primeiro registro e não o registro CODIGO que está como 000003

Parou de dar UNDEFINED, porem, está sempre retornando o primeiro registro…

Você efetuou o ajuste no código? Como ficou?

Sim, atualizei como ficou o código do dataset ai na postagem.
tava dando undefined, agora está trazendo apenas o primeiro registro.

Amauri, faltou ajustar o código dentro do if:

Troque de:


if(constraints[0].initialValue==tempDataset[a][constraints[0].fieldName]){
                    dataset.addRow(new Array(tempDataset.getValue(a, "codigo"), tempDataset.getValue(a, "descricao")));
                }

Para:


if(constraints[0].initialValue==tempDataset.getValue(a, "codigo")){
                    dataset.addRow(new Array(tempDataset.getValue(a, "codigo"), tempDataset.getValue(a, "descricao")));
                }

Atualizei, ficou a mesma coisa… seleciono o código 000003 e no console.log (do javascript) onde retorna código e descrição do dataset vem sempre o código 000001 e sua descrição, independente do código que eu venha a selecionar.

Adicione um log.info dentro do if que verifica a constraint:

if(constraints!=null && constraints.length)

Para ter a garantia de quele ele está entrando neste filtro. Para ele estar retornando sempre o primeiro, acredito que esteja indo diretamente para o ELSE deste if.

Talvez a condicional correta pra ele seja:

if(constraints!=null && constraints.length > 0)

Vamos lá... estou querendo fazer apenas um piloto, que seria um formulário de baixa. Minha intenção é que esse DATASET vá buscar do cadastro de produtos do protheus.

então, estou fazendo um piloto inicialmente com um dataset estatitico.

1 - Dataset estático.


function defineStructure() {

}
function onSync(lastSyncDate) {

}
function createDataset(fields, constraints, sortFields) {

var dataset = DatasetBuilder.newDataset ();

    //Cria Colunas
    dataset.addColumn("codigo");
    dataset.addColumn("descricao");
    dataset.addColumn("UN");
    dataset.addColumn("Tipo");
    dataset.addColumn("Grupo");

    //Cria Registros

    dataset.addRow(new Array("000001", "Flor de Sal 300g", "UN", "Produto Acabado","Foods"));
    dataset.addRow(new Array("000002", "Sal de Parrilla 1Kg", "UN", "Produto Acabado","Foods"));
    dataset.addRow(new Array("000003", "Sal Refinado Sosal de 25Kg", "SC", "Produto Acabado","Sal Refinado"));
    dataset.addRow(new Array("000004", "Sal Moido em Big Bag", "TN", "Produto Acabado","Sal Moido"));
    dataset.addRow(new Array("000005", "Notebook Lenovo 330S", "UN", "Ativo Imobilizado","Produtos de Informatica"));

    return dataset;


}function onMobileSync(user) {

}

Dataset que chamada o dataset estático com as as constraints


function defineStructure() {

}
function onSync(lastSyncDate) {

}

function createDataset(fields, constraints, sortFields) {
    var dataset = DatasetBuilder.newDataset();
    dataset.addColumn("codigo");
    dataset.addColumn("descricao");


    var tempDataset = DatasetFactory.getDataset("DsProdutos", null, null, null);

    if(constraints!=null && constraints.length){ //se tiver constraint filtra

        if(constraints[0].constraintType==ConstraintType.MUST) { // implementação somente para o MUST

            for(var a=0;a<   tempDataset.length;a++){
                // se o valor inicial da constraint for igual ao valor do campo na constraint adiciona a linha
                if(constraints[0].initialValue==tempDataset[a][constraints[0].fieldName]){
                    dataset.addRow(new Array(tempDataset.getValue(a, "codigo"), tempDataset.getValue(a, "descricao")));
                }
            }
        }
    } else { // se não tiver constraint adiciona todas as linhas
        for(var a=0;a<   tempDataset.length;a++){
            dataset.addRow(new Array(tempDataset.getValue(a, "codigo"), tempDataset.getValue(a, "descricao")));
        }
    }

    return dataset;
}function onMobileSync(user) {

}

E o JS que chama o dataset com as contraints e não dar certo.


function setSelectedZoomItem(selectedItem) {

    //Pegar o name do zoom que foi selecionado
    var zoomName = selectedItem.inputName;
    var index = zoomName.split('___');

    //indice da linha do campo pai e filho
    var indice = index[1];

    // Verifica se o campo zoom é o mesmo que foi selecionado
    if (zoomName == "codproduto___" + indice) {

        // Pega o código do produto
        var codigo = selectedItem["codigo"];

        // Cria uma constraint filtrando a coluna Codigo e passando como valor o codigo do produto
        var c1 = DatasetFactory.createConstraint("codigo", codigo, codigo, ConstraintType.MUST);
        var constraints = new Array(c1);


        //Aplicando a constraint no dataset DsProdutos
        var retornoDataset = DatasetFactory.getDataset("Ds_ProdutosForm", null, constraints, null);

        console.log("indice:", indice)
        console.log("Código do produto:", codigo)
        console.log("Retorno Código:", retornoDataset.values[0].codigo)
        console.log("Retorno Descrição:", retornoDataset.values[0].descricao)

    }
}

retornoDataset.values[0].codigo retornoDataset.values[0].descricao

ambos reportam que os valores são 'undefined' no inspecionar... não está funcionando.

Vou editar a resposta para poder te ajudar.

Amauri tenta por o tempDataset.length como tempDataset.rowsCount