Valor Monetário no Array do Dataset

Caros,

Gostaria de saber como faço para converter o valor de um array do dataset. Segue meu exemplo, porém ele dá erro:

quero aplioar a conversão nessa linha do dataset para valor montetário ( R$10.000,00)

row.has("VALORTOTAL") ? row.get("VALORTOTAL") : ""


function createDataset(fields, constraints, sortFields) {



       var INTEGRADOR = "mestre";
       var SENHA = "totvs";
       var NOME_SERVICO = "wsconsultasql"; // Nome do Serviço Cadastrado no Fluig

       var CAMINHO_SERVICO = "com.totvs.WsConsultaSQL";
       var COLUNAS = new Array("Cód. Natureza","Natureza","Cód. Produto","Nome","Total"); 
       var dataset = DatasetBuilder.newDataset();
       var CodConsulta = "TOTVS.FLUIG.500";

       log.info("##### FILIAL totvs 1");

       for (var i=0; i < COLUNAS.length; i++ ) {
             dataset.addColumn(COLUNAS[i]);
       }

       log.info("##### FILIAL totvs 2");


 try {   
       var servico = ServiceManager.getService(NOME_SERVICO);
       var instancia = servico.instantiate(CAMINHO_SERVICO);
       var ws = instancia.getRMIwsConsultaSQL();
       var serviceHelper = servico.getBean();
  log.info("##### FILIAL totvs 4.1 "+serviceHelper);
       var authService = serviceHelper.getBasicAuthenticatedClient(ws, "com.totvs.IwsConsultaSQL",INTEGRADOR, SENHA);
  log.info("##### FILIAL totvs 5 "+authService);
       var result = authService.realizarConsultaSQL("TOTVS.FLUIG.500", 1, "G", "null");
 log.info("##### FILIAL totvs 6 "+result);  

       log.info("##### FILIAL totvs 3");

       var JSONObj = org.json.XML.toJSONObject(result);
        log.info("FILIAL RESULTADO:"+result);
        log.info("##### FILIAL totvs 4");

       var dados = JSONObj.get("NewDataSet").get("Resultado");
       log.info("FILIAL RETORNO: " + dados);
         //log.info("TAMANHO: " + dados.length());

          log.info("##### FILIAL totvs 4");




       for (var i = 0; i < dados.length(); i++) {
       var row = dados.get(i);
             dataset.addRow(new Array(
                    row.has("CODIGONATUREZA") ? row.get("CODIGONATUREZA") : "",
                    row.has("NATUREZAS") ? row.get("NATUREZAS") : "",
                    row.has("CODPRODUTO") ? row.get("CODPRODUTO") : "",
                    row.has("NOMEPRODUTO") ? row.get("NOMEPRODUTO") : "",
                    row.has("VALORTOTAL") ? row.get("VALORTOTAL") : ""

              ));
    }

       return dataset;            
}

 catch(e){

     if (e == null)  
       e = "Erro desconhecido; verifique o log do AppServer";  
   var mensagemErro = "Erro na comunicação com o app (linha: " + e.lineNumber + "): " + e;  
   log.error(mensagemErro);  
   log.info(mensagemErro);  
   dataset.addColumn("ERROR");  
   dataset.addColumn("MESSAGE_ERROR");  
   dataset.addRow(new Array(-1, mensagemErro));      


  }
}

function numberParaReal() {
    var numero = numero.toFixed(2).split('.');
    numero[0] = "R$ " + numero[0].split(/(?=(?:...)*$)/).join('.');
    return numero.join(',');
}

1 curtida

Italo, criei um exemplo, verifique na minha resposta se te atende.

O valor que está vindo na sua consulta é 10000.00 e você quer convertê-lo nesse formato R$ 10.000,00?

Fiz um exemplo, verifique se te atende:


function createDataset(fields, constraints, sortFields) {
    log.info("#### DATASET TESTE ####");

    var mascara = "#,###,##0.00";

    var dfs = new java.text.DecimalFormatSymbols();
    dfs.setDecimalSeparator(',');
    dfs.setGroupingSeparator('.');

    var decimalFormat = new java.text.DecimalFormat(mascara, dfs);

    var newDataset = DatasetBuilder.newDataset();
    newDataset.addColumn("valor_um");
    newDataset.addColumn("valor_dois");
    newDataset.addColumn("valor_tres");

    // Linha UM
    var valor = '10000.00';
    valor     = parseFloat(valor);
    var v1    = decimalFormat.format(valor);
    var v2    = "R$ " + v1;

    newDataset.addRow(new Array(valor, v1, v2));

    // Linha DOIS
    var valor = '15123.28';
    valor     = parseFloat(valor);
    var v1    = decimalFormat.format(valor);
    var v2    = "R$ " + v1;

    newDataset.addRow(new Array(valor, v1, v2));

    // Linha TRES
    var valor = '187895123.43';
    valor     = parseFloat(valor);
    var v1    = decimalFormat.format(valor);
    var v2    = "R$ " + v1;

    newDataset.addRow(new Array(valor, v1, v2));

    return newDataset;
}

Segue imagem: mascara_valor.PNG

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

Então, no JQuery do browser sua função numberParaReal() funciona, porém no DataSet não.

Já tentei também usar split/replace com expressões regulares e parece que a linguagem utilizada no DataSet (ECMAScript se não me engano) não aceita expressões regulares.

O que eu consegui fazer para ter o resultado esperado foi usar uma função similar a numberParaReal() na exibição dos dados utilizando o JQuery, onde expressões regulares funcionam.

Não sei se era essa sua dúvida, mas se tentar usar expressões regulares no DataSet não funcionará.

Tenta algo assim: var dateFormat = new java.text.SimpleDateFormat('dd/MM/yyyy'); for(var c in arrayFluig.value){ var dataEntregaOc = arrayFluig.value[c].getDataEntrega(); dataset.addRow([arrayFluig.value[c].getNumeroOrdem() ,arrayFluig.value[c].getNumPedido() ,arrayFluig.value[c].getItCodigo() ,arrayFluig.value[c].getQuantidade() // ,arrayFluig.value[c].getDataEntrega() ,dateFormat.format(arrayFluig.value[c].getDataEntrega())

,arrayFluig.value[c].getCodEmitente() ,arrayFluig.value[c].getNomeAbrev() ,arrayFluig.value[c].getCgc() ]); }