none
Registro de Plug-in RRS feed

  • Pergunta

  • Bom dia a todos,

       Estou desenvolvendo um plug-in (na verdade, o plug-in em si já estava pronto, mas não testei), porém estou tendo dificuldades com o Plug-in Registration Tool.

       O Plug-in Registration Tool também já estava pronto, mas não estou sabendo como utilizá-lo.
       Quando faço uma nova conexão e coloco para registrar um novo passo, me aparece uma nova janela pedindo um 'Message', 'Primary Entity', 'Secondary Entity' e outras informações.

       Na verdade eu nem sei se estou no caminho certo. É por aí mesmo que tenho que seguir para registrar o Plug-in?
       E o que devo colocar nos itens que me são pedidos, principalmente 'Message' que é obrigatório.

       Obrigado a todos,

    Bruno Cardoso
    terça-feira, 14 de julho de 2009 13:20

Respostas

  • Olá Bruno,

    Você está no caminho certo, é através do [Plugin Registration Tool] mesmo. Segue explicação dos campos exigidos:

    Message - É o [Evento] em que o seu Plugin deve ser executado. Por exemplo, se vc digitar [Create], será executado qdo criar um registro. Outras principais mensagens são [Update], [Delete], [Assign].

    Primary Entity - Especifique o nome da Entidade ao qual o Plugin deverá atuar.

    Secondary Entity - Não obrigatório.

    Abaixo na tela vc tem a opção de especificar se o Plugin vai rodar de forma [Síncrona] ou [Assíncrona]. Também de vai rodar o Evento em um [Pré] ou [Post] Event. Por exemplo, se especificar [Post] e o Evento [Update], significa que o Plugin vai ser executado somente [após] a atualização do registro.

    []


    Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)
    terça-feira, 14 de julho de 2009 13:41
  • Olá Anderson,

    O código está correto.

    Provavelmente vc não [assinou] sua DLL, que é um recurso do [.NET Strong Name] exigido pelo Plugin.

    Para assinar faça o seguinte:

    - Remova o registro da DLL no Plugin Registration Tool;

    - Abra as propriedades do projeto;
    - Cique no link [Signing];
    - Clique no checkbox [Sign the Assembly];
    - No Combobox [Choose a strong name key file] clique em [New];
    - Informe um valor para o campo [Key file name] e desmarque a opção [Protect my key file with a password];
    - Compile novamente a DLL, atualize o [Server\Bin\Assembly] do CRM e registre a DLL.

    []


    Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)
    quarta-feira, 22 de julho de 2009 13:27

Todas as Respostas

  • Olá Bruno,

    Você está no caminho certo, é através do [Plugin Registration Tool] mesmo. Segue explicação dos campos exigidos:

    Message - É o [Evento] em que o seu Plugin deve ser executado. Por exemplo, se vc digitar [Create], será executado qdo criar um registro. Outras principais mensagens são [Update], [Delete], [Assign].

    Primary Entity - Especifique o nome da Entidade ao qual o Plugin deverá atuar.

    Secondary Entity - Não obrigatório.

    Abaixo na tela vc tem a opção de especificar se o Plugin vai rodar de forma [Síncrona] ou [Assíncrona]. Também de vai rodar o Evento em um [Pré] ou [Post] Event. Por exemplo, se especificar [Post] e o Evento [Update], significa que o Plugin vai ser executado somente [após] a atualização do registro.

    []


    Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)
    terça-feira, 14 de julho de 2009 13:41
  • Gilberto,

       Primeiramente muito obrigado pela resposta.

       Tem um outro campo que é obrigado chamado [Plugin] e eu também não o que é. Por acaso é onde eu tenho que colcoar o nome do meu Plugin?

       Obrigado novamente!
    terça-feira, 14 de julho de 2009 16:55
  • Bruno,

    Este campo já deve vir preenchido. Se não veio, é porque a sua classe de Plugin não está expondo um método [público]. É através deste método que o Plugin Registration se baseia.

    Segue exemplo de um [Template] da classe de Plugin:


    using Microsoft.Crm.Sdk;
    using Microsoft.Crm.SdkTypeProxy;

    namespace Microsoft.Crm.Sdk.PluginTemplate
    {
        public class AccountCreateHandler : IPlugin
        {
          public void Execute(IPluginExecutionContext context)
          {
          }
        }
    }


    Note que desta forma, qdo vc registrar o Plugin, aparecerá a classe [AccountCreateHandler] no campo.

    []


    Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)
    terça-feira, 14 de julho de 2009 17:13
  • Gilberto,

        Como escrevi no começo não fui eu quem desenvolveu o Plugin (foi inclusive desenvolvido em outra máquina) e de fato o projeto do Plugin está com alguns erros, não está nem abrindo na minha máquina. Antes de continuar trabalhando com o Plugin Registration vou resolver este problema com o Plugin.

       Obrigado pela ajuda.
    quarta-feira, 15 de julho de 2009 12:03
  • Gilberto,

       Conversei com um amigo, o que desenvolveu o Plugin e ele me disse que já tinha uma versão compilada do Plugin dele. Dei uma olhada e tem uma dll lá, é ela que devo utilizar?

       Além disso, onde devo colocar esta dll (se é que com ela que devo trabalhar) para que o campo Plugin já venha preenchido no [Plugin RegistrationTool]?

       Grato,
       Bruno Cardoso
    quarta-feira, 15 de julho de 2009 13:36
  • Bruno,

    Existem três formas de registro da dll através do Plugin Registration. Por exemplo, utilize a opção em que a dll deverá ficar no dir [\Program Files\Microsoft CRM\Server\Bin\Assembly].

    Após a cópia da dll use o Plugin Registration, dizendo para registrar a dll [no disco].

    P.S.: As outras opções são: [DataBase] e [GAC].

    []


    Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)
    quarta-feira, 15 de julho de 2009 13:44
  • Gilberto,

       Este caminho é na máquina local, certo?
       Na pasta [Program Files] não encontro [Microsoft CRM]. Já verifiquei se está exibindo conteúdo oculto.
       É este caminho mesmo?

       obrigado.
    quarta-feira, 15 de julho de 2009 14:12
  • O caminho é local do Servidor do CRM.

    Para saber o caminho exato faça o seguinte:

    - Abra o IIS;
    - Expanda o dir [Web Sites];
    - Note que existe um diretório virtual do CRM;
    - Clique em Propriedades -> Pasta [Home Directory]. No campo [Local Path] vc descobre o caminho Físico do CRM.


    Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)
    quarta-feira, 15 de julho de 2009 14:56
  • Olá Gilberto,

       Procurei o caminho indicado por você e encontrei este:
    [\Program Files\Microsoft Dynamics CRM\Server\bin\assembly]
    que está no servidor e percebi também que há um Plugin Registration Tool também no servidor, que provavelmente foi colocado lá anteriormente pela pessoa que estava desenvolvendo o plugin.

       Testei com este registrador e também com o que está na minha máquina local e nenhum dos dois funcionaram.

       Em seguida procurei o endereço que você falou para eu olhar a partir do IIS, porém lá já havia a dll do meu plugin.

       Gostaria de saber se o endereço é este mesmo e se o Registrador pode ser executado na minha máquina local ou deve ser em outro lugar.

       Obrigado,
       Bruno Cardoso
    quinta-feira, 16 de julho de 2009 13:05
  • Olá Bruno,

    O endereço é o que está configurado no IIS, ok.

    O Plugin Registration deve ser executado no servidor do CRM.

    Seria interessante checar se a dll do Plugin está ok, por exemplo, se o [Template] dela está de acordo com o código de exemplo que te passei.

    Se estiver gerando mgs de erro, envie para analisarmos.

    []
    Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)
    quinta-feira, 16 de julho de 2009 13:30
  • Gilberto, 

       Não gera nenhuma mensagem de erro, mas não aparece o Plugin no Registrador como você me disse acima, que deveria aparecer.

        O Plugin, como eu te falei antes, não estou conseguindo abrir na minha máquina, mas já havia uma versão compilada e foi esta DLL que eu coloquei no diretório encontrado no ISS.
       A mensagem de erro que aparece é que não está instalado o [NomeArquivo].csproj.

       O que é esse arquivo do tipo .csproj?
    quinta-feira, 16 de julho de 2009 13:46
  • Bruno,

    O arquivo [.csproj] é responsável pelo controle de todo o projeto no VS.Net . Realmente sem ele vc não abre o projeto. O que teria que ser feito agora é a criação de um [novo] projeto no VS.Net e adicionar as classes já existentes neste novo projeto.
    Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)
    quinta-feira, 16 de julho de 2009 14:34
  •     Gilberto, uma outra dúvida.
        Eu estava lendo um thread de um colega meu de trabalho (o Ivan):
    http://social.msdn.microsoft.com/Forums/pt-BR/dynamicscrmpt/thread/bd7c1a15-f485-4371-a406-77111c75d1ed?lc=1046

        Eu estou dando continuidade exatamente a este Plugin que ele começou.
    Gostaria de saber o que são essas [AssociateEntities] e [DisassociateEntities] e como trabalhar com elas, pois utilizo uma entidade customizada em uma erlacionamento N:N.


       Muito obrigado.

    quinta-feira, 16 de julho de 2009 16:06
  • Bruno,

    As Mensagens mencionadas são usadas em Plugins para entidades em um relacionamento N:N.

    Por exemplo, o Ivan citou as entidades [contact] e [new_curso]. No momento em que o usuário adicionar um novo curso (ou vários) para um contato, via Message [AssociateEntities] o CRM executará seu Plugin. Se o usuário excluir um curso (ou vários) para um contato, a Message ativada será a [DisassociateEntities].

    Link : http://msdn.microsoft.com/en-us/library/cc155954.aspx

    P.S.: Detalhe importante, [AssociateEntities] e [DisassociateEntities] somente funciona para entidades PADRÃO do sistema...

    []
    Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)
    quinta-feira, 16 de julho de 2009 16:45
  • Gilberto,

    Eu e o Bruno, estamos tentando fazer algo mais simples, como o Hello World. O código está logo abaixo:


    using
    System;
    using System.Collections.Generic;
    using System.Text;
    using Microsoft.Crm.Sdk;
    using Microsoft.Crm.SdkTypeProxy;
    namespace Plugin___teste
    {
        public class HelloWorldPlugin: IPlugin
        {
            public void Execute(IPluginExecutionContext context)
            {
                // Call the Microsoft Dynamics CRM Web services here or perform
                // some other useful work.
                throw new InvalidPluginExecutionException("Hello world!");
            }
        }
    }

    O código foi compilado com sucesso e o plugin registrado na entidade contact como: Update, Post Stage e Synchronous. Usando o Plugin Registration Tool.

    Então deveria aparecer a mensagem "Hello World" quando um contato fosse alterado e em seguida salvo. Porém, quando salvo aparece um erro no CRM, informando para tentar a operação novamente.

    Não sabemos o pq desse erro, visto que esse é o código mais simples que tinhamos como exemplo.

    Vc tem alguma sugestão do que devemos fazer para solucionar?

    Desde já obrigado.

    Anderson M. de Freitas

    quarta-feira, 22 de julho de 2009 12:11
  • Olá Anderson,

    O código está correto.

    Provavelmente vc não [assinou] sua DLL, que é um recurso do [.NET Strong Name] exigido pelo Plugin.

    Para assinar faça o seguinte:

    - Remova o registro da DLL no Plugin Registration Tool;

    - Abra as propriedades do projeto;
    - Cique no link [Signing];
    - Clique no checkbox [Sign the Assembly];
    - No Combobox [Choose a strong name key file] clique em [New];
    - Informe um valor para o campo [Key file name] e desmarque a opção [Protect my key file with a password];
    - Compile novamente a DLL, atualize o [Server\Bin\Assembly] do CRM e registre a DLL.

    []


    Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)
    quarta-feira, 22 de julho de 2009 13:27
  • Exato Gilberto.

    Muito obrigado pela sua ajuda.

    Anderson M. de Freitas
    quarta-feira, 22 de julho de 2009 13:44