quarta-feira, 10 de dezembro de 2008

>> CRM 4.0 Plugin - Dicas no uso do IPluginExecutionContext

Segue algumas dicas no uso do parâmetro que é passado para nosso plugin, o IPluginExecutionContext.

1 - Detectar a Origem da execução do Plugin (Alteração ou Conversão de um registro em outro).

Por exemplo, para saber se a execução do seu Plugin tem como origem a Conversão de uma Quota em Pedido.

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

public class Main_Plugin: IPlugin
{
public void Execute(IPluginExecutionContext context)
{
Boolean IsConvertionMode = (context.CallerOrigin.GetType() == typeof(AsyncServiceOrigin) && context.Depth > 1);


2 - Função genérica para recuperar o ID do registro do CRM para os Eventos de CREATE, UPDATE e DELETE.

public static Guid GetIDParam(DynamicEntity de, IPluginExecutionContext context, string propertyName)
{
Guid ret = Guid.Empty;

if (context.MessageName.Equals("Create"))
ret = (Guid)context.OutputParameters[ParameterName.Id];

else if (context.MessageName.Equals("Update"))
ret = ((Key)de.Properties[propertyName]).Value;

else if (context.MessageName.Equals("Delete"))
{
Moniker mon = (Moniker)context.InputParameters.Properties["Target"];
ret = mon.Id;
}

return ret;
}

3 - Passando dados entre Plugins

Compartilhar dados entre Plugins fica fácil com uso da Collection SharedVariables.

Imagine um Plugin de Account, com os Eventos de PRE-Update e POST-Update configurados. Uma determinada ação deverá ser tomada no evento de POST-Update; porém a ação somente será executada se ANTES da alteração do Account o registro possuia um status específico para um campo de Picklist.

Isto é possível 'guardando' o valor do Picklist na Collection SharedVariables (no PRE-Update) e consultando esta collection no POST-Update.

Segue template de código:

public class AccountPreHandler : IPlugin
{
public void Execute(IPluginExecutionContext context)
{
context.SharedVariables["statusAcct"] = [Get Picklist Value];
}
}

public class AccountPostHandler : IPlugin
{
public void Execute(IPluginExecutionContext context)
{
if (context.SharedVariables.Contains("statusAcct"))
{
int statusAcct = (int)context.SharedVariables["statusAcct"];
if (statusAcct==1)
// Do something...
}
}
}

Nenhum comentário:

Postar um comentário

<< Ao enviar um comentário, favor clicar na opção [Enviar por e-mail comentários de acompanhamento para gtezini@gmail.com] >>