Executar um FetchXML e exportar para CSV com Javascript

by Pedro Azevedo 19. October 2014 16:12

 

Boas pessoal,

Hoje um post muito rápido de como executar um FetchXML e exportar os resultados para um CSV, tudo isto em Javascript.

Para começar é possível executar um FetchXML através de uma requisição SOAP. Quando tenho este tipo de requisição recorro a biblioteca XrmServiceToolkit, no blog existem vários exemplos.

Para executar um FetchXml usamos a função Fetch:

function ExecuteFetch() {
    var fetchXml =
            "<fetch mapping='logical'>" +
               "<entity name='contact'>" +
                  "<attribute name='contactid' />" +
                  "<attribute name='firstname' />" +
                  "<attribute name='lastname' />" +
                  "<attribute name='middlename' />" +
                  "<filter>" +
                     "<condition attribute='parentcustomerid' operator='eq' value='" + Xrm.Page.data.entity.getId() + "' />" +
                  "</filter>" +
               "</entity>" +
            "</fetch>";

    var retrievedContacts = XrmServiceToolkit.Soap.Fetch(fetchXml);
}

Este código está preparado para correr dentro da entidade cliente, retorna todos os contactos desse cliente. A dificuldade a seguir é colocar os dados num ficheiro CSV e fazer download dele, existem várias estratégias:

var csvString = allValues.join("\n");

    var a  = document.createElement('a');
    a.href = 'data:attachment/csv,' + csvString;
    a.target = '_blank';
    a.download = 'myFile.csv';

    document.body.appendChild(a);
    a.click();

Vamos ver agora o código completo que inclui o tratamento dos dados retornados:

function ExecuteFetch() {
    var fetchXml =
            "<fetch mapping='logical'>" +
               "<entity name='contact'>" +
                  "<attribute name='contactid' />" +
                  "<attribute name='firstname' />" +
                  "<attribute name='lastname' />" +
                  "<attribute name='middlename' />" +
                  "<filter>" +
                     "<condition attribute='parentcustomerid' operator='eq' value='" + Xrm.Page.data.entity.getId() + "' />" +
                  "</filter>" +
               "</entity>" +
            "</fetch>";

    var retrievedContacts = XrmServiceToolkit.Soap.Fetch(fetchXml);

    var allValues = [];
    var strCol = "";
    var strVal = "";

    var cols = true;

     for (var i = 0; i < retrievedContacts.length; i++) {
      var attsValues = retrievedContacts[i].attributes;

      for (var att in attsValues) {
        strVal += attsValues[att].value + ";";

        if(cols){
          strCol += att + ";";
        }
      }

      if(cols){
        allValues.push(strCol);
        cols = false;
      }

      allValues.push(strVal);
      strVal = "";
    }

    var csvString = allValues.join("\n");

    var a  = document.createElement('a');
    a.href = 'data:attachment/csv,' + csvString;
    a.target = '_blank';
    a.download = 'myFile.csv';

    document.body.appendChild(a);
    a.click();
}

 

Até a próxima.

Tags: , , , ,

Add comment

  Country flag

biuquote
  • Comment
  • Preview
Loading

About

Muito bem casado, Pai babado e um gosto muito grande pela tecnologia.

Tenho um lema "Sharing is Learning"

Mais aqui -> http://www.psazevedo.com

Month List