Sample: Azure aware custom plug-in
Updated: November 29, 2016
Applies To: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online
This is a sample custom plug-in that can post the pipeline execution context to the Microsoft Azure Service Bus.
This sample code is for Microsoft Dynamics 365 (online & on-premises). Download the Microsoft Dynamics CRM SDK package. It can be found in the following location in the download package:
SampleCode\CS\Azure\Plug-ins\SandboxPlugin.cs
Requirements
For more information about the requirements for running the sample code provided in this SDK, see Use the sample and helper code.
Demonstrates
The plug-in demonstrates how to obtain the execution context and the tracing service from the service provider parameter of the Execute method. The plug-in then posts the context to the Microsoft Azure Service Bus endpoint and writes information to the trace log to facilitate debugging.
Example
using System; using System.Diagnostics; using System.Threading; using System.Runtime.Serialization; using System.ServiceModel; using System.ServiceModel.Channels; using System.ServiceModel.Description; using Microsoft.Xrm.Sdk; namespace Microsoft.Crm.Sdk.Samples { /// <summary> /// A custom plug-in that can post the execution context of the current message to the Windows /// Azure Service Bus. The plug-in also demonstrates tracing which assist with /// debugging for plug-ins that are registered in the sandbox. /// </summary> /// <remarks>This sample requires that a service endpoint be created first, and its ID passed /// to the plug-in constructor through the unsecure configuration parameter when the plug-in /// step is registered.</remarks> public sealed class SandboxPlugin : IPlugin { private Guid serviceEndpointId; /// <summary> /// Constructor. /// </summary> public SandboxPlugin(string config) { if (String.IsNullOrEmpty(config) || !Guid.TryParse(config, out serviceEndpointId)) { throw new InvalidPluginExecutionException("Service endpoint ID should be passed as config."); } } public void Execute(IServiceProvider serviceProvider) { // Retrieve the execution context. IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext)); // Extract the tracing service. ITracingService tracingService = (ITracingService)serviceProvider.GetService(typeof(ITracingService)); if (tracingService == null) throw new InvalidPluginExecutionException("Failed to retrieve the tracing service."); IServiceEndpointNotificationService cloudService = (IServiceEndpointNotificationService)serviceProvider.GetService(typeof(IServiceEndpointNotificationService)); if (cloudService == null) throw new InvalidPluginExecutionException("Failed to retrieve the service bus service."); try { tracingService.Trace("Posting the execution context."); string response = cloudService.Execute(new EntityReference("serviceendpoint", serviceEndpointId), context); if (!String.IsNullOrEmpty(response)) { tracingService.Trace("Response = {0}", response); } tracingService.Trace("Done."); } catch (Exception e) { tracingService.Trace("Exception: {0}", e.ToString()); throw; } } } }
Microsoft Dynamics 365
© 2016 Microsoft. All rights reserved. Copyright