none
Adicionar entidade customizavél em um plugin RRS feed

  • Pergunta

  • Bom dia,

    Gostaria de saber como crio uma entidade no SdkTypeProxy, para quando for usar um plugin ela apareça no projeto.

    Obrigado desde já...
    quarta-feira, 11 de fevereiro de 2009 13:07

Respostas

  • Olá Tiago,

    Você pode trabalhar de duas formas:

    1 - Se utilizando da [Microsoft.Crm.Sdk], de forma a converter para uma [DynamicEntity] a entidade customizada, que está sendo passada como parâmetro para seu Plugin.

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

    public class PluginSample : IPlugin
    {
        public void Execute(IPluginExecutionContext context)
        {
            DynamicEntity entity = (DynamicEntity)context.InputParameters.Properties["Target"];
            .
            .
            .
        }
    }

    E trabalharia com a DynamicEntity, acessando seus atributos, como mostra o exemplo abaixo:

    for (int i = 0; i < entity.Properties.Length; i++)
    {
       if (entity.Properties[i].Name.ToLower() == "fullname")
       {
          StringProperty property = (StringProperty) entity.Properties[i];
          fullname = property.Value;
          break;
       }
    }



    2 - Ou adicionando a [Web References] do CRM (por exemplo, http://localhost:5555/mscrmservices/2007/crmservice.asmx) no seu projeto de Plugin, no VS.NET, para acessar diretamente a Entidade Customizada.

    Por exemplo, se você [adicionou a Web References] e a chamou de [dynamicsCrmSdk], e seu projeto se chama [PluginSample], seu código ficaria:

    using Microsoft.Crm.Sdk;
    using Microsoft.Crm.SdkTypeProxy;
    using dynamicsCrmSDK = PluginSample.dynamicsCrmSDK;

    public class PluginSample : IPlugin
    {
        public void Execute(IPluginExecutionContext context)
        {
          dynamicsCrmSDK.CrmAuthenticationToken token = new dynamicsCrmSDK.CrmAuthenticationToken();
          token.AuthenticationType = 0;
          token.OrganizationName = "Nome da Sua Organizacao";
       
          dynamicsCrmSDK.CrmService service = new dynamicsCrmSDK.CrmService();
          service.CrmAuthenticationTokenValue = token;
          service.Credentials = System.Net.CredentialCache.DefaultCredentials;

          // Nos Eventos de CREATE (PRE/POST) podemos recuperar o ID da Entidade da seguinte forma:
         Guid retId = (Guid)context.OutputParameters[ParameterName.Id];
         dynamicsCrmSDK.new_entidade entidade_customizada = service.Retrieve("new_entidade", retId, new dynamicsCrmSDK.AllColumns());
          .
          .
          .
        }
    }

    []

    Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com/)

    • Marcado como Resposta Tiago Cardoso quinta-feira, 12 de fevereiro de 2009 14:57
    quarta-feira, 11 de fevereiro de 2009 14:59

Todas as Respostas

  • Olá Tiago,

    Você pode trabalhar de duas formas:

    1 - Se utilizando da [Microsoft.Crm.Sdk], de forma a converter para uma [DynamicEntity] a entidade customizada, que está sendo passada como parâmetro para seu Plugin.

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

    public class PluginSample : IPlugin
    {
        public void Execute(IPluginExecutionContext context)
        {
            DynamicEntity entity = (DynamicEntity)context.InputParameters.Properties["Target"];
            .
            .
            .
        }
    }

    E trabalharia com a DynamicEntity, acessando seus atributos, como mostra o exemplo abaixo:

    for (int i = 0; i < entity.Properties.Length; i++)
    {
       if (entity.Properties[i].Name.ToLower() == "fullname")
       {
          StringProperty property = (StringProperty) entity.Properties[i];
          fullname = property.Value;
          break;
       }
    }



    2 - Ou adicionando a [Web References] do CRM (por exemplo, http://localhost:5555/mscrmservices/2007/crmservice.asmx) no seu projeto de Plugin, no VS.NET, para acessar diretamente a Entidade Customizada.

    Por exemplo, se você [adicionou a Web References] e a chamou de [dynamicsCrmSdk], e seu projeto se chama [PluginSample], seu código ficaria:

    using Microsoft.Crm.Sdk;
    using Microsoft.Crm.SdkTypeProxy;
    using dynamicsCrmSDK = PluginSample.dynamicsCrmSDK;

    public class PluginSample : IPlugin
    {
        public void Execute(IPluginExecutionContext context)
        {
          dynamicsCrmSDK.CrmAuthenticationToken token = new dynamicsCrmSDK.CrmAuthenticationToken();
          token.AuthenticationType = 0;
          token.OrganizationName = "Nome da Sua Organizacao";
       
          dynamicsCrmSDK.CrmService service = new dynamicsCrmSDK.CrmService();
          service.CrmAuthenticationTokenValue = token;
          service.Credentials = System.Net.CredentialCache.DefaultCredentials;

          // Nos Eventos de CREATE (PRE/POST) podemos recuperar o ID da Entidade da seguinte forma:
         Guid retId = (Guid)context.OutputParameters[ParameterName.Id];
         dynamicsCrmSDK.new_entidade entidade_customizada = service.Retrieve("new_entidade", retId, new dynamicsCrmSDK.AllColumns());
          .
          .
          .
        }
    }

    []

    Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com/)

    • Marcado como Resposta Tiago Cardoso quinta-feira, 12 de fevereiro de 2009 14:57
    quarta-feira, 11 de fevereiro de 2009 14:59
  • Gilberto mais uma vez obrigado pela ajuda...

    Escolhi a primeira opção por achar mais simples, porém ela está com alguns problemas de sintaxe:

    for (int i = 0; i < entity.Properties.Length; i++) //Só possui .Count
    {
       if (entity.Properties[i].Name.ToLower() == "fullname") //Não possui o atributo .Name
       {
          StringProperty property = (StringProperty) entity.Properties[i];
          fullname = property.Value;
          break;
       }
    }

    Poderia me ajudar?

    Obrigado
    quinta-feira, 12 de fevereiro de 2009 11:59
  • Olá Tiago,

    Segue novo código:

    string fullname = "";

    for (int i = 0; i < entity.Properties.Count; i++)
    {
     if (entity.Properties.Contains("fullname"))
     {
      fullname = entity.Properties["fullname"].ToString();
      break;
     }
    }

    P.S.: Lembrando que este código funciona para os Eventos de [Create/Update] do Plugin. Para [Delete], o processo é diferente. Também vale lembrar que no Envento de [Update] o CRM passa a DynamicEntity somente com os campos que foram alterados.

    P.S.2.: Particularmente eu prefiro trabalhar com a [2a opção] que te passei inicialmente, usando o Web Services do CRM (questões de limitação).

    []
    quinta-feira, 12 de fevereiro de 2009 13:18
  • Opa ai, não tem jeito mesmo se a segunda opção não possui limitações, vou usar ela então...rs Você colocou como opção dois, ai achei que era a pior! rs

    Vou fazer os testes e te aviso da resolução...

    Valeu
    quinta-feira, 12 de fevereiro de 2009 14:56
  • Muito obrigado era isso mesmo!

    quinta-feira, 12 de fevereiro de 2009 18:04