Campos pai e filho no dataset interno

Olá, tenho um formulário que tem uma tabela pai e filho, porém quando crio registros neste formulário, os campos da tabela pai-filho não são gravados no dataset interno deste form. (versão 1.6.0)

ps: foto em anexo.

Código do dataset:


function createDataset(fields, constraints, sortFields) {

    var newDataset = DatasetBuilder.newDataset();

    var itex = "";
    var fen  = "";

    newDataset.addColumn("idItex");
    newDataset.addColumn("idFen");
    newDataset.addColumn("criterio");
    newDataset.addColumn("tolerancia");
    newDataset.addColumn("comentario");

    if (constraints[0] != null) {
        itex = constraints[0].initialValue;
    }
    if (constraints[1] != null) {
        fen = constraints[1].initialValue;
    }

    var c1 = DatasetFactory.createConstraint("metadata#active", true, true, ConstraintType.MUST);

    var constr = new Array(c1);

    if (itex != "") {
        var c2 = DatasetFactory.createConstraint("idItex", itex, itex, ConstraintType.MUST);

        constr.push(c2);
    }
    if (fen != "") {
        var c3 = DatasetFactory.createConstraint("idFen", fen, fen, ConstraintType.MUST);

        constr.push(c3);
    }

    var dsCadastroFen = DatasetFactory.getDataset("ds_cadastro_fen", null, constr, null);

    if (dsCadastroFen.rowsCount > 0) {
        for (i=0; i<dsCadastroFen.rowsCount; i++) {

            var documentId = dsCadastroFen.getValue(i, "metadata#id");
            var documentVersion = dsCadastroFen.getValue(i, "metadata#version");

            var c4 = DatasetFactory.createConstraint("tablename", "tabCriterio" ,"tabCriterio", ConstraintType.MUST);
            var c5 = DatasetFactory.createConstraint("metadata#id", documentId, documentId, ConstraintType.MUST);
            var c6 = DatasetFactory.createConstraint("metadata#version", documentVersion, documentVersion, ConstraintType.MUST);
            var constrCriterio = new Array(c4, c5, c6);

            var dsCriterioFen = DatasetFactory.getDataset("ds_cadastro_fen", null, constrCriterio, null);

            for (var i2=0; i2<dsCriterioFen.rowsCount; i2++) {
                newDataset.addRow(new Array(dsCadastroFen.getValue(i,"idItex"),
                                            dsCadastroFen.getValue(i,"idFen"),
                                            dsCriterioFen.getValue(i2,"criterio"),
                                            dsCriterioFen.getValue(i2,"tolerancia"),
                                            dsCriterioFen.getValue(i2,"obsCriterio")));
            }

        }
    }

    return newDataset;
}

código da tabela:


<div class="form-group">
    <div class="row">
        <div class="col-sm-10">
            <input type="button" name="btIncCriterio" id="btIncCriterio" title="Novo Critério" value="Novo Critério" class="btn btn-default" onClick="wdkAddChild('tabCriterio');">
            <br>
            <br>
            <table class="table table-bordered table-hover table-condensed" tablename="tabCriterio" id="tabCriterio" noaddbutton=true>                        
                <thead>
                    <tr>
                        <th>Critério</th>
                        <th>Tolerância</th>
                        <th>Comentário</th>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        <td class="fs-v-align-middle">
                            <input type="text" class="form-control" name="criterio" id="criterio">
                        </td>
                        <td class="fs-v-align-middle">
                            <input type="text" class="form-control" name="tolerancia" id="tolerancia">
                        </td>
                        <td class="fs-v-align-middle">
                            <textarea class="form-control" name="obsCriterio" id="obsCriterio" rows="3"></textarea>
                        </td>
                    </tr>
                </tbody>
            </table>
        </div>
    </div>
</div>

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

Esse link pode lhe ajudar http://tdn.totvs.com/display/public/fluig/Desenvolvimento+de+Datasets#DesenvolvimentodeDatasets-Datasetcustomizadodedefiniçãodeformulário"pai-filho"

já fiz isso e não consigo consultar o dataset da tabela pai, pois os dados dos filhos não foram gravados em um dataset.

Colocou os filtros de constraints certos? o nome da tabela paixfilo certa? seguiu os passos do exemplo?

REssucitando esse POST… essa implementação funciona em tempo de execução tipo eu ter no formulario acima a tabela e abaixo o dataset que filtro somente essa tabela para selecionar.

meu esta retornando erro na primeira consulta do data set pra saber os formulario ativo… da erro http 502

@Guilherme,

Você pode criar um outro dataset pra pegar os dados do Pai x Filho.

Segue exemplo abaixo:


function createDataset(fields, constraints, sortFields) {
    //Cria as colunas
    var dataset = DatasetBuilder.newDataset();
    dataset.addColumn("NumFormulario");
    dataset.addColumn("criterio");
    dataset.addColumn("tolerancia");
    dataset.addColumn("obsCriterio");

    //Cria a constraint para buscar os formulários ativos
    var constraints = new Array();
    constraints.push(DatasetFactory.createConstraint("metadata#active", true, true, ConstraintType.MUST));

    // No lugar do "datasetSeuForm" você coloca o dataset do seu formulário
    var datasetPrincipal = DatasetFactory.getDataset("datasetSeuForm", null, constraints, null);

    for (var i = 0; i < datasetPrincipal.rowsCount; i++) {
        var documentId      = datasetPrincipal.getValue(i, "metadata#id");
        var documentVersion = datasetPrincipal.getValue(i, "metadata#version");

        //Cria as constraints para buscar os campos filhos, passando o tablename, número da formulário e versão
        var constraintsFilhos = new Array();
        constraintsFilhos.push(DatasetFactory.createConstraint("tablename", "tabCriterio" ,"tabCriterio", ConstraintType.MUST));
        constraintsFilhos.push(DatasetFactory.createConstraint("metadata#id", documentId, documentId, ConstraintType.MUST));
        constraintsFilhos.push(DatasetFactory.createConstraint("metadata#version", documentVersion, documentVersion, ConstraintType.MUST));

        //Busca o dataset
        // No lugar do "datasetSeuForm" você coloca o dataset do seu formulário
        var datasetFilhos = DatasetFactory.getDataset("datasetSeuForm", null, constraintsFilhos, null);

        for (var j = 0; j < datasetFilhos.rowsCount; j++) {
            //Adiciona os valores nas colunas respectivamente.
            dataset.addRow(new Array(
                    documentId,
                    datasetFilhos.getValue(j, "criterio"), 
                    datasetFilhos.getValue(j, "tolerancia"),
                    datasetFilhos.getValue(j, "obsCriterio")));
        }
    }

    return dataset;
}

Teria como disponibilizar o código da tabela em si (html)? pois a minha tabela não está cadastrando os filhos como coluna no dataset interno.

Me manda como está sua tabela (HTML), que vejo como ela está.

adicionei o código a pergunta principal

Testei o seu Pai x Filho e deu certo. Alterei o código na minha resposta, pra funcionar a consulta no seu caso.

Muito obrigado!

Consegui aqui também. Obrigado Gabriel Franco!