The message pipeline model defines a parameter collection of
custom data values in the execution context that is passed through the pipeline
and shared among registered plug-ins, even from different 3rd party developers.
This collection of data can be used by different plug-ins to communicate
information between plug-ins and enable chain processing where data processed
by one plug-in can be processed by the next plug-in in the sequence and so on.
This feature is especially useful in pricing engine scenarios where multiple
pricing plug-ins pass data between one another to calculate the total price for
a sales order or invoice. Another potential use for this feature is to
communicate information between a plug-in registered for a pre-event and a
plug-in registered for a post-event.
The name of the parameter that is used for passing information
between plug-ins is SharedVariables. This is a collection of
key\value pairs. At run time, plug-ins can add, read, or modify properties in
the SharedVariables collection. This provides a method of
information communication among plug-ins.
The name of the parameter that is used for passing information
between plug-ins is SharedVariables. This is a collection of
key\value pairs. At run time, plug-ins can add, read, or modify properties in
the SharedVariables collection.
This sample shows how to use SharedVariables to pass data from a pre-event
registered plug-in to a post-event registered plug-in.
using System;
// Microsoft Dynamics CRM namespace(s)
using Microsoft.Xrm.Sdk;
namespace Microsoft.Crm.Sdk.Samples
{
///
/// A plug-in that sends data to another plug-in through the SharedVariables
/// property of IPluginExecutionContext.
///
/// Register the PreEventPlugin for a pre-event and the
/// PostEventPlugin plug-in on a post-event.
///
//Preevent Plugin
{
public void Execute(IServiceProvider serviceProvider)
{
// Obtain the execution context from the service provider.
Microsoft.Xrm.Sdk.IPluginExecutionContext context = (Microsoft.Xrm.Sdk.IPluginExecutionContext)
serviceProvider.GetService(typeof(Microsoft.Xrm.Sdk.IPluginExecutionContext));
// plug-in. You could run a query, create an entity, or perform a calculation.
//In this sample, the data to be passed to the post plug-in is
// represented by a GUID.
Guid contact = new Guid("{74882D5C-381A-4863-A5B9-B8604615C2D0}");
// variable named PrimaryContact.
context.SharedVariables.Add("PrimaryContact", (Object)contact.ToString());
}
}
public class PostEventPlugin : IPlugin
{
public void Execute(IServiceProvider serviceProvider)
{
// Obtain the execution context from the service provider.
Microsoft.Xrm.Sdk.IPluginExecutionContext context = (Microsoft.Xrm.Sdk.IPluginExecutionContext)
serviceProvider.GetService(typeof(Microsoft.Xrm.Sdk.IPluginExecutionContext));
// Obtain the contact from the execution context shared variables.
if (context.SharedVariables.Contains("PrimaryContact"))
{
Guid contact =new Guid((string)context.SharedVariables["PrimaryContact"]);
}
}
}
}
No comments:
Post a Comment