none
Como conseguir o id(Guid) do item que está sendo usado para fazer um relacionamento N:N RRS feed

  • Pergunta

  •                  Olá pessoal!
            Tenho uma entidade new_curso que tem um relacionamento N:N com a entidade contact, que indica alunos interessados em participar do curso. Quando itens contact(neste caso interessados) são  inseridos no relacionamento desejo contar o número de interessados.
            Para isso, estou tentando usar um plugin a partir do exemplo em http://msdn.microsoft.com/en-us/library/bb928436.aspx que me foi apresentado pelo nosso amigo Gilberto Tezini. Neste exemplo, é usado o id do usuário para a clausula where da query.
            Porém no meu caso preciso do id do new_curso que se chama new_cursoid. Como posso obter este id? Ele está dentro de context.InputParameters.Properties[<nomeparametro>]? Qual o nome do parametro? Alguém pode me ajudar!?
                         Agradeço a atenção de todos!
                                 Ivan Luís Duarte
    quinta-feira, 30 de abril de 2009 15:12

Respostas

  • Ivan,

    Existe uma [limitação] no CRM referente a execução de Plugins para relacionamentos N:N. Acontece que quando vc adiciona, por exemplo, um contato na lista para a entidade [Curso], via Plugin, você captura isto através da message [AssociateEntities]. Porém, para entidades customizadas não aparece esta message na tela do [Plugin Registration Tool] do CRM.

    POR MINHA CONTA E RISCO, e como conheço o modelo de dados do CRM, [habilitei na mão] para que a opção [AssociateEntities] apareça para entidades [customizadas] do CRM.

    Segue Script para habilitar tal message:

    USE NomeDaSuaOrganizacao_MSCRM

    DECLARE @DisassociateEntitiesFilterId uniqueidentifier
    DECLARE @AssociateEntitiesFilterId uniqueidentifier
    SET @DisassociateEntitiesFilterId = (SELECT SdkMessageId FROM SdkMessageBase WHERE [Name] = 'DisassociateEntities')
    SET @AssociateEntitiesFilterId = (SELECT SdkMessageId FROM SdkMessageBase WHERE [Name] = 'AssociateEntities')

    UPDATE SdkMessageFilterBase SET IsCustomProcessingStepAllowed = 1 WHERE SdkMessageId = @DisassociateEntitiesFilterId AND PrimaryObjectTypeCode = 0
    UPDATE SdkMessageFilterBase SET IsCustomProcessingStepAllowed = 1 WHERE SdkMessageId = @AssociateEntitiesFilterId AND PrimaryObjectTypeCode = 0


    E exemplo de Plugin:

    using System;
    using System.Collections.Generic;
    using System.Text;
    using Microsoft.Crm.Sdk;
    using Microsoft.Crm.SdkTypeProxy;
    using System.Data.SqlClient;

    namespace PluginCRM4
    {
        public class ContactCource_AssociatedEntity : IPlugin
        {
            public void Execute(IPluginExecutionContext context)
            {
                // Representa a 1a entidade
                Moniker m1 = (Moniker)context.InputParameters.Properties["Moniker1"];

                // Representa a 2a entidade
                Moniker m2 = (Moniker)context.InputParameters.Properties["Moniker2"];
            }
        }
    }


    Lembrando que se vc adicionar 100 Contatos no Curso o Plugin é executado 100 vezes.

    []


    Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)
    • Marcado como Resposta Ivan Duarte quinta-feira, 30 de abril de 2009 19:07
    quinta-feira, 30 de abril de 2009 18:17

Todas as Respostas

  • Olá Ivan,

    Antes de te passar a forma de recuperar o ID, me confirme em que momento vc pretende executar seu Plugin; quando estiver adicionando um [Contato] no Curso?

    []
    Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)
    quinta-feira, 30 de abril de 2009 15:53
  •            Olá Gilberto!

         Sim, seria quando os contatos fossem adicionados na relação!
         Só que como é um relacionamento N:N o usuário pode inserir mais de um contato por vez. Mas não acho que será problema se eu for até a tabela de relação e der um select count... usando o new_cursoid como parametro para a clausula where.

                       Obrigado pela sua atenção!
                                 Ivan Luís Duarte

    quinta-feira, 30 de abril de 2009 16:43
  • Ivan,

    Existe uma [limitação] no CRM referente a execução de Plugins para relacionamentos N:N. Acontece que quando vc adiciona, por exemplo, um contato na lista para a entidade [Curso], via Plugin, você captura isto através da message [AssociateEntities]. Porém, para entidades customizadas não aparece esta message na tela do [Plugin Registration Tool] do CRM.

    POR MINHA CONTA E RISCO, e como conheço o modelo de dados do CRM, [habilitei na mão] para que a opção [AssociateEntities] apareça para entidades [customizadas] do CRM.

    Segue Script para habilitar tal message:

    USE NomeDaSuaOrganizacao_MSCRM

    DECLARE @DisassociateEntitiesFilterId uniqueidentifier
    DECLARE @AssociateEntitiesFilterId uniqueidentifier
    SET @DisassociateEntitiesFilterId = (SELECT SdkMessageId FROM SdkMessageBase WHERE [Name] = 'DisassociateEntities')
    SET @AssociateEntitiesFilterId = (SELECT SdkMessageId FROM SdkMessageBase WHERE [Name] = 'AssociateEntities')

    UPDATE SdkMessageFilterBase SET IsCustomProcessingStepAllowed = 1 WHERE SdkMessageId = @DisassociateEntitiesFilterId AND PrimaryObjectTypeCode = 0
    UPDATE SdkMessageFilterBase SET IsCustomProcessingStepAllowed = 1 WHERE SdkMessageId = @AssociateEntitiesFilterId AND PrimaryObjectTypeCode = 0


    E exemplo de Plugin:

    using System;
    using System.Collections.Generic;
    using System.Text;
    using Microsoft.Crm.Sdk;
    using Microsoft.Crm.SdkTypeProxy;
    using System.Data.SqlClient;

    namespace PluginCRM4
    {
        public class ContactCource_AssociatedEntity : IPlugin
        {
            public void Execute(IPluginExecutionContext context)
            {
                // Representa a 1a entidade
                Moniker m1 = (Moniker)context.InputParameters.Properties["Moniker1"];

                // Representa a 2a entidade
                Moniker m2 = (Moniker)context.InputParameters.Properties["Moniker2"];
            }
        }
    }


    Lembrando que se vc adicionar 100 Contatos no Curso o Plugin é executado 100 vezes.

    []


    Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)
    • Marcado como Resposta Ivan Duarte quinta-feira, 30 de abril de 2009 19:07
    quinta-feira, 30 de abril de 2009 18:17
  •                   Olá Gilberto!
            Mais uma vez, obrigado pela sua atenção e paciência!
            Percebi que em m1.Id vem o id do objeto que integra a relação.
            Mas do que se trata m1.Name? É o nome da tabela? Se não for como posso diferenciar m1 de m2 para saber qual dos dois contém o id do curso?
                       Aguardo resposta e agradeço novamente!
                                Ivan Luís Duarte
    quinta-feira, 30 de abril de 2009 18:57
  • Ivan,

    [Name] é nome da Entidade.

    []
    Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)
    quinta-feira, 30 de abril de 2009 18:59