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: , , , ,

Como fazer debug dos Web Resources no browser

by Pedro Azevedo 17. October 2014 01:47

Boas pessoal,

Neste post vou continuar o assunto de realizar debug sobre as nossas soluções de CRM. No post anterior aprendemos a realizar debug sobre um plugin no CRM Online. Hoje vamos falar como realizar debug sobre o Javascript, como vamos utilizar as ferramentas de programador e vou tentar mostrar dos vários browsers, vamos dar um olhinho como é que obtemos os ids dos elementos que queremos trabalhar e aplicar um Javascript não customizado em cima.

Então como referi vamos usar essencialmente as ferramentas de programador de cada um dos browsers.

O firefox tem uma extensão muito conhecida chamada FireBug, por isso o primeiro passo é instalar esta extensão:

 Depois de instalar basta pressionar F12 ou utilizar um dos botões de atalho que vão aparecer no browser:

Este é o aspeto da nossa ferramenta que neste momento está presa no fundo da página mas podemos correr esta aplicação numa janela a parte. Na “Consola do Terminal” vamos ver todo o feedback sobre esta página, se por exemplo tivermos um console.log é nesta tab que vamos ver esse resultado, bem como se houver algum erro é aqui que vemos. Nesta tab ainda podermos executar código Javascript.

A tab do HTML permite-nos visualizar o DOM desta página e localizar elementos através do botão do retângulo com um cursor ao lado do símbolo do firebug, esta é uma das funcionalidades que mais uso pois permite-nos saber por exemplo o ID dos elementos HTML que usamos depois para aplicar um Javascript não customizado:

Como podemos comprovar eu carregando no icon para pesquisa de elementos, e selecionar um elemento posso ver todas as propriedades\eventos e com isso “sacar” o id desse elemento, que neste caso é o “form_pic_image”.

Na tab CSS posso visualizar todos os estilos que foram carregados nessa página.

No âmbito do assunto mais importante para este post temos a tab do Script que permite-nos ver todos os scripts que estão a ser carregados na página e mais importante permite-nos realizar debug sobre esses mesmos scripts:

Nesta tab temos a possibilidade de ver o código Javascript e conseguimos colocar variáveis de “Vigia” para podermos consultar o estado atual dessas mesmas variáveis. Ao selecionarmos na caixa de seleção podemos visualizar outros ficheiros de Javascript:

Aqui podemos visualizar os ficheiros dos nossos Recursos Web, sejam eles do tipo Javascript ou HTML, já que os ficheiros HTML podem também ter código Javascript. Escolhendo por exemplo o Recurso Web “new_putgridreadonly”:

Sobre este ficheiro podemos colocar breakpoints, basta para isso carregar no espaço em branco do lado direito no número da linha. Outra alternativa para o código Javascript parar é colocarmos a palavra reservada, no código Javascript:

debugger;

Se atualizarmos a página onde estamos vamos parar naquele sítio:

Como podemos comprovar pela seta amarela estou em debug e agora posso usar os icons de andar para a frente ou utilizar os mesmos shortcuts que usamos no Visual Studio F10 para continuar e F11 para entrar dentro da função, cuidado que o F5 aqui vai refrescar a página, neste caso é o F8. Como ainda podemos ver se eu colocar o cursor sobre a variável consigo ver o seu valor e posso ainda adicionar as variáveis de Vigia e ver mais pormenores.

Há mais uma tab que eu gostava de realçar que é a tab de Rede, uma das que mais utilizo e permite vermos o que está a ser carregado na página e por exemplo quanto tempo demorou a carregar, por exemplo para verificar o que uma chamada ODATA ou SOAP está a retornar é excelente:

Como podem ver na segunda imagem tenho uma chamada aos WebServices do CRM e onde posso ver o que foi enviado e a reposta que recebemos é muito útil.

Uma última coisa que não podemos esquecer que é a pesquisa que facilita muito as coisas, pois se tivermos a visualizar elementos pode-se colocar logo um id específico por exemplo e no Javascript pode-se pesquisar pelo nome de uma função.

Nos restantes browsers é tudo muito parecido, por exemplo no Chrome e no Opera as ferramentas de programador são muito parecidas e já vêm embutidas no browser, bastando no caso do chrome premir a tecla F12, no caso do Opera é diferente pois primeiro temos que ativar estas ferramentas e só depois é que as podemos invocar com Ctrl+Shift+I:

Os conceitos são exatamente iguais só que em tabs diferentes. Vamos ver especificamente o debug do Javascript:

As coisas só estão dispostas de maneira diferente mas o resultado vai ser igual, o breakpoint é sinalizado pelo bookmark azul. Quando atualizamos a página temos este ambiente:

No IE temos atualmente duas versões das ferramentas para o programador, uma antes do IE11 e com o IE11, estas ferramentas já vêm por defeito bastando premir o F12, mais uma vez as coisas são muito parecidas com os restantes browsers:

Uma coisa que acontece nesta ferramenta e que já não acontece com o IE11 (prometo brevemente colocar aqui imagens do IE11) é que nós temos que dizer que queremos começar a fazer debug ou nas capturas de rede que queremos começar a capturar, ou seja, ele por defeito não vai fazer nenhuma destas coisas, saltando diretamente para a tab “Script”:

Ao fazermos atualizarmos a página podermos realizar o debug ao Javascript, de referir que aqui o F5 já funciona. Como eu referi anteriormente é possível acrescentarmos um breakpoint escrevendo no código a palavra reservada debugger, mas para ele parar teremos primeiro que averiguar duas configurações em: Ferramentas -> Opções de Internet -> Avançadas e retirar o pisco desta duas configurações:

Como podem ver não é nada específico do Dynamics CRM vocês podem aplicar isto a qualquer aplicação Web. Em relação ao meu preferido não tenho, vario muitas vezes e quando não estou a conseguir ver num salta para outro que me dá outro tipo de feedback. Havia muito para falar mas foi uma breve introdução.

 

Até a próxima.

Tags: , , , ,

Gráficos no Microsoft Dynamics CRM

by Pedro Azevedo 12. October 2014 16:53

Boas pessoal,

Os fóruns de discussão têm servido de inspiração para posts que tenho realizado no blog e este não é exceção, numa thread recente foi colocada uma questão sobre os gráficos, a questão envolvia mexermos diretamente no XML e mesmo assim não consegui dar uma resposta válida, na minha opinião por limitação desta funcionalidade que apareceu no CRM 2011. Este será um post introdutório e em próximos posts explorarmos mais esta funcionalidade.

Como já referi a possibilidade de criarmos gráficos surgiu na versão 2011, onde nos possibilita de criarmos um gráfico com base num conjunto de registos, esta funcionalidade é muito poderosa pois permite-nos realizar drill-down, ver quais os registos que estão por base para aquele gráfico, mas vamos ver estes detalhes todos neste conjunto de posts.

Para começar vamos ver como acedemos a esta funcionalidade, numa lista qualquer temos uma barra lateral para abrirmos os gráficos:

Esta barra é customizável pela barra de comandos, em que podemos fixar a barra e desligar a barra de gráficos para esta entidade:

Para vermos os gráficos basta carregar sobre a barra para ela abrir:

 

Para algumas entidades já existem alguns gráficos pré-definidos, mas por exemplo para as entidades customizadas não vamos ver nenhum gráfico por defeito. De referir também que os dados que estamos a visualizar correspondem a vista que está selecionada e não para os registos todos.

Para além dos gráficos ainda podemos ver um mapa e já agora com o gráfico ancorado no topo:

 

Como opções sobre os gráficos e começando do lado esquerdo para o direito, temo um selector para escolher o relatório já gravados, depois nos ícones temos a opção de adicionar um novo gráfico, expandir ou fechar o gráfico, gravar alguma alteração e importar ou exportar o gráfico.

Neste post vamos entrar apenas na criação de gráficos:

Este é o aspecto da criação de um gráfico, temos a possibilidade de dar um nome a este gráfico, temos uma área para pré-visualizarmos os dados e depois uma área para configurarmos o gráfico:

 

 

Temos vários tipos de gráficos: colunas; barras; área; linha; circular e funil. Dentro dos três primeiros ainda temos mais três opções: “normal”, empilhado e empilhado a 100%.

Para além do tipo de gráfico podemos configurar se queremos aplicar regras para obter por x elementos superiores ou inferiores e temos por defeito as seguintes opções: 3, 5 ou um número personalizado. De referir também a última opção que vai limpar estas regras. Estas regras são úteis sobretudo quando temos muitos valores e para fixarmos um alvo concreto.

Estas opções estão disponibilizadas na configuração de uma série, onde podemos adicionar novas séries, para configurarmos temos que escolher o campo e depois qual a função de agregação que queremos aplicar:

Depois de selecionar o campo é disponibilizado opções de qual a operação de agregação que se quer aplicar, neste caso temos um campo de texto selecionado e por essa razão as operações numéricas não podem ser aplicadas. De notar a diferença entre a Contagem tudo e Não-Vazio em que a opção Não-Vazio não conta os elementos que não têm valor aplicado nesse campo.

Se escolhermos um campo do tipo data temos mais algumas opções:

 

Aqui podemos partir a data em partes do ano.

Por fim não se esqueçam de colocar uma descrição para o gráfico, dá sempre jeito para percebermos qual o seu objetivo ainda mais quando temos uma configuração importada, como vamos ver mais a frente o que vamos configurar no XML não será visível.

Depois de criarmos um gráfico, tal como acontece com as vistas não fica disponibilizado para toda a organização, por isso ficamos com outras opções sobre os gráficos “locais”:

Como podemos observar temos agora opção de editar, eliminar, atribuir e partilhar que não temos sobre um gráfico de sistema.

Vamos apenas ver um pequeno exemplo, onde queremos saber o total do orçamento por classificação por cada Oportunidade Potencial

Como podem ver estou ainda a configurar e já estou a pré-visualizar os resultados. Estes resultados são fidignos, vejam a visualização do gráfico para um utilizador:

Para criar um gráfico de sistema teremos que ir as customizações, aqui temos praticamente as mesmas opções:

Nas customizações para além de podermos criar novos gráficos podemos editar os gráficos existentes de sistema.

Este post teve como grande objetivo mostrar a configuração básica, como podem ver não temos muitas opções. Nos próximos para além da edição do XML vamos ver por exemplo onde podemos utilizar os gráficos.

 

PS: Para este post utilizei o Microsoft Dynamics CRM Online, mas os conceitos são idênticos para o CRM 2011, apenas com outra interface.

 

Até a próxima.

Tags: , , , ,

Auto Numeração no Microsoft Dynamics CRM

by Pedro Azevedo 2. October 2014 00:46

 Boas pessoal,

Esta semana vou falar sobre auto-numeração no Microsoft Dynamics CRM. Uma das dúvidas mais requisitadas nos fóruns do MSDN.

Esta funcionalidade vem por defeito no Dynamics CRM mas apenas para algumas entidades standard nomeadamente:

Sobre estas entidades podemos configurar alguns dados:

  • Prefixo – para ficar antes da numeração propriamente dita, é importante para quando esta numeração aparecer isolada nós consigamos dizer que aquela numeração corresponde neste caso aos contratos.
  • Número – Em que número começa
  • Comprimento do Sufixo – Termos um sufixo, onde temos a hipótese de termos 4, 5 ou 6 algarismos.

Podemos ainda ver um exemplo, de como fica esta numeração.

E se quisermos ter uma numeração por exemplo nas oportunidades, ou numa entidade nossa customizada? Existem algumas tools que ajudam neste trabalho por exemplo este. Mas eu penso que esta tool deixa de fazer sentido no Microsoft Dynamics CRM 2013, ainda mais a vinda do Fluxo de Trabalho síncrono onde temos um feedback imediato dessa mesma numeração. Como referência tenho sempre este artigo que tem uma implementação com o Dynamics CRM 2011. Eu no fundo vou refazer para o Dynamics CRM 2013, utilizando o CRM Online.

Para começar temos que criar uma entidade customizada para guardar a numeração:

Depois de criar a entidade vamos criar dois campos, um para o prefixo (Uma linha de texto) e outro para a numeração (Número Inteiro):

De seguida fui customizar o formulário desta entidade para podermos colocar os dois campos acima, a seguir fui então adicionar registos nesta entidade onde configurei a numeração para a entidade Lead (Oportunidade Potencial). Se quiséssemos mais entidades bastava adicionar várias linhas a esta entidade:

A seguir vamos para a entidade que queremos adicionar a numeração automática, no meu caso a Lead, onde vou uma relação (N:1) para a entidade CustomAutoNumber e um campo que vai guardar a numeração, este campo vou colocar do tipo “Uma Linha de Texto” para poder colocar o sufixo.

De seguida vamos customizar o formulário da Lead, neste caso vou acrescentar dois campos, o lookup para entidade CustoAutoNumber que é o campo correspondente a criação da relação e o campo que vai guardar a numeração. De referir que no vosso caso o melhor é não acrescentar a interface o campo lookup, só vou colocar para vocês verem o que acontece.

Falta-nos o último passo que é a criação do Fluxo de Trabalho sobre a entidade Lead:

A nota mais importante aqui é a checkbox “Executar este fluxo de trabalho em segundo plano”, pois ao desmarcarmos esta checkbox estamos a dizer que este Fluxo de Trabalho vai correr imediatamente.

Na configuração do Fluxo de Trabalho não há muito a fazer, por isso vamos avançar para a configuração dos passos, o primeiro passo a ser configurado é relacionar o registo que vamos criar com o registo da entidade CustomAutoNumber que está reservado para a Lead:

Na definição de propriedades vamos escolher automaticamente o registo da entidade CustomAutoNumber:

De seguida vamos querer incrementar o número do registo associado a Lead da entidade CustomAutoNumber:

Na definição de propriedades vamos dizer que queremos incrementar o campo numeracao:

Por fim vamos atualizar a Lead com a numeração:

Nas propriedades nada mais simples vai-se dizer que o campo da Lead que vai ficar com a numeração é a composição entre o prefixo e o número em que a entidade vai:

Para quem não está tão familiarizado com os Fluxos de Trabalho, neste caso temos que escolher o “Prefixo” e fazer “Adicionar” e “OK”, depois para colocarmos “-” escrevemos diretamente na caixa de texto e depois escolhemos o campo “numeração, fazemos novamente “Adicionar” e “OK”. Vejam aqui o resultado:

Como podem ver o campo do lookup está preenchido e a numeração incrementada. Missão cumprida :D

 

Até a próxima.

Tags: , ,

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