Usuário com melhor resposta
Adicionar entidade customizavél em um plugin

Pergunta
-
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
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
-
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 -
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).
[] -
-