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 class PreEventPlugin : 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));
    // Create or retrieve some data that will be needed by the post event
    // 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}");
   // Pass the data to the post event plug-in in an execution context shared
   // variable named PrimaryContact.
   context.SharedVariables.Add("PrimaryContact", (Object)contact.ToString());
   }
 }
 //Post Event Plugin
 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"]);
     // Do something with the contact.
       }
     }
  }
}