Como fazer debug de um plugin e atividade customizada no CRM On-Premise

by Pedro Azevedo 4. December 2014 02:23

Boas pessoal,

Vou continuar a série de fazer debug. Até agora abordamos como realizar debug sobre plugins online e em Web Resources. De referir que a prática que usamos no CRM Online pode-se usar no on-premise também.

Hoje quero falar sobre fazer debug em plugins num ambiente on-premise, que vai permitir realizar um debug em real-time. Para ser mais exato este procedimento é para código servidor, ou seja, tanto dá para plugins como para atividades workflow.

A primeira premissa é termos a nossa DLL do plugin ou da atividade de workflow e o ficheiro PDB (contém informações para realizar debug). Temos que colocar estes dois ficheiros na pasta: “<pasta de instalação>\Microsoft CRM\server\bin\assembly” (C:\Program Files\Microsoft CRM\server\bin\assembly), nesta pasta também devem ser todas as DLLs que se dependa a não ser que estas estejam registadas no GAC.

Uma vez que temos estes ficheiros podemos chegar ao nosso servidor de desenvolvimento e com o projeto do plugin aberto anexarmos um destes processos:

  • w3wp.exe para os plugins síncronos;
  • Microsoft.Crm.Application.Hoster.exe para quando temos uma ligação offline através do Outlook.
  • CrmAsyncService.exe quando se trata de um plugin assíncrono ou uma atividade workflow
  • Microsoft.Crm.Sandbox.WorkerProcess.exe quando temos o plugin registado no modo sandbox.

Vejam a seguir alguns screenshots de como fazer attach a alguns dos processos acima:

Com esta configuração o próximo plugin ou atividade de workflow irá parar no breakpoint definido.

As vezes pode ser frustrante porque o breakpoint não é ativado. Quando isto acontece podemos seguir uma espécie de checklist:

  1. Reset ao IIS (diretamente no IIS ou na linha de comandos escrever iisreset)
  2. Se for uma atividade de workflow ou plugin assíncrono, restaurar o serviço Assync do CRM
  3. Recompilar (em vez de Rebuild, podemos efetuar também o clean) o projeto do plugin ou atividade workflow
  4. Colocar a DLL e o PDB na pasta referida
  5. Registar o assembly pelo Registration Tool
  6. No Visual Studio colocar o breakpoint e anexar os processos referidos.

 

Se no Visual Studio se houver a seguinte mensagem sobre o breakpoint, quer dizer que temos que efetuar a lista acima:

Se o breakpoint apresentar a mensagem a seguir não se preocupem que em principio ele para no breakpoint:

E aqui está um exemplo, neste caso este plugin é lançado aquando da criação de um cliente:

Esta estratégia funciona bem nos ambientes de desenvolvimento, onde temos o visual studio instalado na mesma máquina onde está o servidor de CRM. Caso não tenhamos este cenário necessitamos de um auxiliar que é o Remote Debugger instalado. Podem ver aqui um bom artigo para auxiliar a sua instalação. Depois de estar instalado o Remote Debugger é colocarmos no campo Qualifier o nome do servidor.

 

PS: A versão do CRM usado neste post foi o CRM 2011 com o VS 2010, mas em outros ambientes é praticamente igual.

 

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

Como fazer debug de um plugin no CRM Online

by Pedro Azevedo 11. June 2014 06:14

Boas pessoal,

Hoje vou mostrar como podemos efectuar debug num plugin do CRM Online, como vão ver não é um debug em real time mas mesmo assim permite-nos ver como é que os dados fluem no nosso plugin. Basicamente é capturado todos os dados num ficheiro e vamos carregar esse ficheiro na ferramenta “Plugin Registration”. Vou já mostrar com a nova interface da ferramenta que apareceu com o SP1 do Microsoft Dynamics CRM Online. É bom relembrar que apenas temos esta opção devido ao facto de a única maneira que temos para fazer deploy dos plugins é no modo sandbox.

Tendo em conta que já temos um plugin registado e queremos realizar o debug deste plugin através da ferramenta “Plugin Registration”. Esta ferramenta está na instalação do SDK, para ter acesso a nova interface relembro que têm que fazer no mínimo o download do SDK do SP1. Depois de instalar tem acesso aplicação nesta pasta …\SDK\Tools\PluginRegistration\PluginRegistration.exe.

Depois de iniciar aplicação terá este aspecto:

 Aqui carregamos no botão “CREATE NEW CONNECTION”, depois disto teremos que introduzir as nossas credenciais:

 

Depois da autenticação é listado a lista de Plugins registados e seleccionamos o plugin sobre o qual queremos realizar o debug e carregamos em “Install Profile”:

 

Depois do profile instalado irá aparecer um nó com o “Plugin-in Profiler”, sobre o passo registado dizemos que queremos começar o profile, carregando no botão “Start Profiling”:

 

Vai aparecer uma janela de settings que podemos aceitar os por defeito:

 

O nó do passo altera-se como vamos ver mais adiante, agora vamos até a nossa instância de CRM Online e vamos despoletar o nosso plugin, ao correr vai aparecer uma janela com o título “Erro de Processo de Negócio” onde vamos fazer download do ficheiro:

De seguida vamos ao nosso Visual Studio e vamos fazer “attach” ao processo da ferramenta “Plugin Registration”:

 

E colocamos um breakpoint onde vamos querer parar e fazer debug. Voltando a ferramenta e voltando ao passo do plugin, verificamos que o passo está marcado como “Profiled”, e seleccionamos o “Debug”:

 

Na janela a seguir vamos então seleccionar o ficheiro que fizemos download anteriormente e colocamos no campo: “Profile Location” e vamos também dizer onde está a DLL respeitante ao nosso plugin, depois de carregar o plugin temos a opção de escolhermos a classe responsável pelo plugin. Ao seleccionarmos o botão “Start Execution” ele vai correr o plugin com base no ficheiro de profile que disponibilizamos e podemos fazer step by step com os dados que inserimos:

 

 

 Assim vimos como podemos realizar debug de um plugin no CRM Online. Não é o ideal mas dá uma tremenda ajuda.

 

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