Loading...

How to Write and Understand a Dynamics CRM Plugin

How to Write and Understand a Dynamics CRM Plugin

 Here’s a sample plugin code in Dynamics CRM written in C#, along with a detailed explanation of each line. This plugin will update the "Description" field of an entity whenever a record is created.



Sample Plugin Code

using System;                           // For basic .NET types
using Microsoft.Xrm.Sdk;                // Provides key interfaces for CRM plugin development
using Microsoft.Xrm.Sdk.Query;          // For performing queries against CRM data

namespace SamplePluginNamespace           // Custom namespace for the plugin
{
    public class SamplePlugin : IPlugin  // Plugin class implementing the IPlugin interface
    {
        public void Execute(IServiceProvider serviceProvider)
        {
            // STEP 1: Retrieve the context of the plugin
            IPluginExecutionContext context = 
                (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));

            if (context.MessageName != "Create" || context.Stage != 40) 
                return;  // Exit if the message is not 'Create' or it is not in the 'PostOperation' stage

            // STEP 2: Obtain the organization service
            IOrganizationServiceFactory serviceFactory = 
                (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
            IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);

            // STEP 3: Retrieve the target entity from the input parameters
            Entity targetEntity = (Entity)context.InputParameters["Target"];

            try
            {
                // STEP 4: Update the 'Description' field with a custom message
                targetEntity["description"] = $"Record created on {DateTime.Now}";

                // STEP 5: Persist changes back to the database
                service.Update(targetEntity);
            }
            catch (Exception ex)
            {
                // STEP 6: Handle errors and rethrow as an InvalidPluginExecutionException
                throw new InvalidPluginExecutionException($"An error occurred in the SamplePlugin: {ex.Message}", ex);
            }
        }
    }
}

Line-by-Line Explanation

  1. using System;

    • Imports basic .NET library types such as DateTime and exceptions.
  2. using Microsoft.Xrm.Sdk;

    • Imports CRM SDK interfaces for plugins such as IPlugin, IPluginExecutionContext, and IOrganizationService.
  3. using Microsoft.Xrm.Sdk.Query;

    • Enables querying CRM entities when interacting with data.
  4. namespace SamplePluginNamespace

    • Defines a custom namespace to organize the code logically and avoid naming conflicts.
  5. public class SamplePlugin : IPlugin

    • Implements the IPlugin interface, making this class recognized by Dynamics CRM as a plugin.
  6. public void Execute(IServiceProvider serviceProvider)

    • The main method executed when the plugin is triggered, as required by the IPlugin interface.
  7. Retrieve plugin execution context:

    IPluginExecutionContext context = 
        (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
    
    • Retrieves the execution context, which contains all information about the triggered event.
  8. Validate event type and stage:

    if (context.MessageName != "Create" || context.Stage != 40) 
        return;
    
    • Ensures the plugin executes only for the Create message in the PostOperation stage.
  9. Create organization service:

    IOrganizationServiceFactory serviceFactory = 
        (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
    IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);
    
    • Creates an organization service instance for interacting with CRM data.
  10. Retrieve the target entity:

    Entity targetEntity = (Entity)context.InputParameters["Target"];
    
    • Extracts the target record being created.
  11. Update the Description field:

    targetEntity["description"] = $"Record created on {DateTime.Now}";
    
    • Sets the Description field value dynamically based on the current date and time.
  12. Persist changes to CRM:

    service.Update(targetEntity);
    
    • Updates the record in the database with the new value in the Description field.
  13. Handle exceptions:

    catch (Exception ex)
    {
        throw new InvalidPluginExecutionException($"An error occurred in the SamplePlugin: {ex.Message}", ex);
    }
    
    • Catches runtime exceptions and throws them as InvalidPluginExecutionException for debugging or logging purposes.

Usage Details

  • Registration: Use the Plugin Registration Tool to register this plugin in CRM for the Create message.
  • Target Entity: Ensure the target entity has a field named description. Adjust the field name accordingly if different.

This plugin demonstrates essential patterns like validation, service access, and error handling, ensuring robust development in Dynamics CRM.

Published on:

Learn more
Power Platform , D365 CE & Cloud
Power Platform , D365 CE & Cloud

Dynamics 365 CE, Power Apps, Powerapps, Azure, Dataverse, D365,Power Platforms (Power Apps, Power Automate, Virtual Agent and AI Builder), Book Review

Share post:

Related posts

Enhancing Knowledge Retrieval with Microsoft Copilot Agents in Dynamics CRM and SharePoint

Studies show that 70% of employees spend unnecessary time searching for information across multiple systems, leading to productivity losses an...

1 month ago

{How to} become MCT Microsoft Certified Trainer on Microsoft Dynamics 365 Customer Engagement step by step instructions

Hello Everyone,Today i am going to share guidelines on becoming Microsoft Certified Trainer on Microsoft Dynamics 365 Customer Engagement or P...

2 months ago

Default Value vs. Current Value in Dynamics 365 CE: Key Differences

In Dynamics 365 CE (Customer Engagement), environment variables are used to manage configuration settings for solutions. When dealing with env...

2 months ago

Dynamics 365 CE Solution Import Failed in Azure DevOps Pipelines

Got the below error while importing Dynamics CRM Solution via Azure DevOps Pipeline. 2024-12-18T23:14:20.4630775Z ]2024-12-18T23:14:20.74...

3 months ago

Exploring the Differences: Managed vs. Unmanaged Solutions in Dynamics CRM/Dataverse

In Dynamics CRM/Dataverse, solutions are central to Application Lifecycle Management (ALM), providing a structured way to manage, package, and...

5 months ago

Effective Strategies for Debugging Plugins in Dynamics CRM

In a recent interview, I was asked about debugging plugins in Dynamics CRM. The interviewer specifically wanted to know my approach to plugin ...

5 months ago

Is Microsoft Dynamics CRM Affordable for Small Nonprofits?

Satish Reddy By Satish Reddy | Reading time 6 mins When considering a CRM solution, affordability is often a primary concern for small no...

7 months ago

How Microsoft Dynamics CRM Services Helps a Startup Nonprofit

Satish Reddy By Satish Reddy | Reading time 6 mins For startup nonprofits, the right Customer Relationship Management (CRM) system can be...

8 months ago

Easy Plugin Registration Tool Installation for Dynamics 365 CE Developers

Hi Folks, Are you a Power Platform or Dynamics 365 CE Developer, you would definitely need to work on Plugin Registration tool at any given po...

8 months ago
Stay up to date with latest Microsoft Dynamics 365 and Power Platform news!
* Yes, I agree to the privacy policy