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