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