Usuário com melhor resposta
Como conseguir o id(Guid) do item que está sendo usado para fazer um relacionamento N:N

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
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
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) -
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 -
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
-
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 -