IPluginExecutionContext contains information that describes the run-time environment that the plug-in is executing in, information related to the execution pipeline, and entity business information. The context is contained in the System.IServiceProvider parameter that is passed at run-time to a plug-in through its Execute method.
// obtain the execution context from the service provider.
IPluginExecutionContext context = (IPluginExecutionContext)
serviceProvider.GetService (typeof (IPluginExecutionContext));
The execution
context is passed to each registered plug-in in the pipeline when they are
executed. Each plug-in in the execution pipeline is able to modify writable
properties in the context. For example, given a plug-in registered for a
pre-event and another plug-in registered for a post-event, the post-event
plug-in can receive a context that has been modified by the pre-event plug-in.
The same situation applies to plug-ins that are registered within the same
stage.
All the
properties in IPluginExecutionContext are read-only. However, your
plug-in can modify the contents of those properties that are collections.
Access
to the Organization Service
To access the
Microsoft Dynamics CRM organization service, it is required that plug-in
code create an instance of the service through the ServiceProvider.GetService method.
// Obtain the organization service reference.
IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)
serviceProvider.GetService (typeof (IOrganizationServiceFactory));
IOrganizationService service = serviceFactory.CreateOrganizationService (context.UserId);
Input
and Output Parameters
The InputParameters property contains the data
that is in the request message currently being processed by the event execution
pipeline. Your plug-in code can access this data. The property is of type ParameterCollection where the keys to access the
request data are the names of the actual public properties in the request. As
an example, take a look at CreateRequest. One property of CreateRequest is named Target which is of type Entity. This is the entity
currently being operated upon by the platform. To access the data of the entity
you would use the name “Target” as the key in the input parameter collection.
You also need to cast the returned instance.
// The InputParameters collection contains all the data passed in the message request.
if (context.InputParameters.Contains("Target") &&
context.InputParameters["Target"] is Entity)
{
// Obtain the target entity from the input parmameters.
Entity entity = (Entity)context.InputParameters["Target"];
Similarly,
the OutputParameters property contains the data
that is in the response message, for example CreateResponse, currently
being passed through the event execution pipeline. However, only synchronous
post-event and asynchronous registered plug-ins have OutputParameters populated as the response is
the result of the core platform operation. The property is of type ParameterCollection where the keys to access the
response data are the names of the actual public properties in the response.
Pre
and Post Entity Images
There are some events where images are not available. For example,
only synchronous post-event and asynchronous registered plug-ins have PostEntityImages populated. In addition, the create
operation does not support a pre-image and a delete operation does not support
a post-image.
Note: - Registering for pre or post images to access entity
attribute values results in improved plug-in performance as compared to
obtaining entity attributes in plug-in code through RetrieveRequest or RetrieveMultipleRequest requests.
Only entity
attributes that are set to a value or null are available in the pre or post entity images
No comments:
Post a Comment