- 
								
																
																
									Dynamics 365 C# Plugin Template
									C#
									A C# plugin template for Dynamics 365 is a reusable code structure that simplifies custom plugin development while following best practices.
								 
							 	
						
						
						A C# plugin template for Dynamics 365 is a reusable code structure that simplifies custom plugin development while following best practices. It includes components like context retrieval, validation, and error handling, allowing developers to focus on specific business logic efficiently.
using System;
using Microsoft.Xrm.Sdk;
namespace MyDynamicsPlugins
{
    public class CreateContactPlugin : IPlugin
    {
        public void Execute(IServiceProvider serviceProvider)
        {
            // Obtain the tracing service
            ITracingService tracingService = (ITracingService)serviceProvider.GetService(typeof(ITracingService));
            // Obtain the plugin execution context
            IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
            // Obtain the organization service reference
            IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
            IOrganizationService orgService = serviceFactory.CreateOrganizationService(context.UserId);
            try
            {
                tracingService.Trace("CreateContactPlugin: Execution started...");
                // Check if the plugin is triggered by 'Create' message
                if (context.MessageName == "Create" && context.InputParameters.Contains("Target"))
                {
                    // 'Target' is the entity to be created
                    Entity entity = (Entity)context.InputParameters["Target"];
                    // Make sure it's a Contact entity
                    if (entity.LogicalName == "contact")
                    {
                        // Implement your custom logic here
                        tracingService.Trace("CreateContactPlugin: Processing contact creation.");
                        // Example: Check if 'description' field is empty
                        if (!entity.Contains("description") || string.IsNullOrWhiteSpace(entity["description"].ToString()))
                        {
                            entity["description"] = "Auto-filled description by plugin";
                            tracingService.Trace("CreateContactPlugin: Description field auto-filled.");
                        }
                    }
                }
                tracingService.Trace("CreateContactPlugin: Execution completed successfully.");
            }
            catch (Exception ex)
            {
                // Trace the error
                tracingService.Trace("CreateContactPlugin: {0}", ex.ToString());
                // Raise an exception so it appears in the user interface or logs
                throw new InvalidPluginExecutionException("An error occurred in the CreateContactPlugin.", ex);
            }
        }
    }
}