Popular outros campos através de select

Pessoal, tenho na imagem abaixo o campo Cód. Produto, esses valores estão em um DataSet. Gostaria que quando o usuário selecionasse o código, fosse preenchido o descrição do produto também, como faço isso?

ds.jpg


<select onchange="onChangeCombo(this)" class="filtro form-control" name="codProd" id="codProd" dataset="dsConsultaProd" datasetkey="Codigo" datasetvalue="Codigo" addBlankLine="true"></select>

<input type="text" name="DescProd" id="DescProd" class="form-control" readonly="readonly" />

<input type="text" name="UM" id="UM" class="form-control" />


function onChangeCombo(combo) {
    var Codigo = combo.value;

    var c1 = DatasetFactory.createConstraint("Codigo", Codigo, Codigo, ConstraintType.MUST);
    var constraints   = new Array(c1);

    var returnFields = new Array("Descri");

    var produto = DatasetFactory.getDataset("dsConsultaProd", returnFields, constraints, null);

    var index = combo.id.substring(combo.id.indexOf('___') + 3);    
    var descricaoProduto = produto.getValue(0, "Descri");    
    $('#DescProd___' + index).val(descricaoProduto);

}

O dataset que utilizo é o dsConsultaProd, campos: Codigo, Descri e UM

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

Boa tarde Quemuel,

você pode fazer isso consultando o dataset no evento de onChange do select/combo:


//Adicione esse script no seu formulário para utilizar consultas a Datasets
<script type="text/javascript" src="/webdesk/vcXMLRPC.js"></script>

<select onchange="onChangeCombo(this)" class="filtro form-control" name="cod_prod" id="cod_prod" dataset="produtos" datasetkey="codProduto" datasetvalue="codProduto" addBlankLine="true"></select>

function onChangeCombo(combo) {
     var Codigo = combo.value;

    var c1 = DatasetFactory.createConstraint("Codigo", Codigo, Codigo, ConstraintType.MUST);
    var constraints   = new Array(c1);

    var returnFields = new Array("Descri", "UM");

    var produto = DatasetFactory.getDataset("dsConsultaProd", returnFields, constraints, null);

    var index = combo.id.substring(combo.id.indexOf('___') + 3);    
    var descricaoProduto = produto.values[0]["Descri"];
    var unidadeMedida = produto.values[0]["UM"];
    $('#DescProd___' + index).val(descricaoProduto);
    $('#UM___' + index).val(unidadeMedida);
}

Caso você não esteja usando o value do select/combo para outra coisa, você pode definir o value do combo como sendo a descrição do produto, e alimentar o campo também no onChange:


<select onchange="onChangeCombo(this)" class="filtro form-control" name="cod_prod" id="cod_prod" dataset="produtos" datasetkey="codProduto" datasetvalue="descProduto" addBlankLine="true"></select>

function onChangeCombo(combo) {
    var descricaoProduto = combo.value;
    var index = combo.id.substring(combo.id.indexOf('___') + 3);
    $('#desc_produto___' + index).val(descricaoProduto);
}

Ou você pode também trocar o select por um campo tipo zoom e alimentar a descrição quando selecionar o item do zoom.

@Diogo, adicionei na pergunta o código que fiz, não deu certo! Queria adicionar nos scripts também o campo UM. Abraços!

Opa, desculpe Quemuel, quando se usa dataset num js de formulário a sintaxe é um pouco diferente. Alterei o código da resposta.

Lembre que para utilizar Datasets em um formulário precisa adiconar o script /webdesk/vcXMLRPC.js

Show Diogo, funcionou 100%! Abs!

Diogo, bom dia! Hj que percebemos aqui. Quando adicionamos uma outras linhas o campo $('#UM___' + index).val(unidadeMedida); sempre pega o mesmo valor, por exemplo temos os produto 000012(UM: LT) e 000013(UM: KG), para os dois produtos eles sempre pega o KG