welcome to XRM blog

Keep in touch with latest CRM/ERP articles

To remain competitive your organisation must be efficient across the business process spectrum. To do so you need to take sound decisions based on a balance between the cost and risk. To do so you will be heavily dependent on your content management in itself needs...

image
Blog

Overview of Concurrency Control Techniques in CRM with Example

By Anurag on 10/5/2023

What are the techniques for Concurrency Control?

1.Locking: Locking mechanisms include shared locks (read locks) and exclusive locks (write locks). Shared locks allow multiple users to read data concurrently, while exclusive locks grant write access to only one user at a time. Locks prevent conflicts by enforcing a "wait your turn" approach.

2.Timestamping: Timestamps are assigned to data transactions, allowing the system to track when each change occurred. Conflicts are resolved based on these timestamps, with the most recent update typically taking precedence.

3. Versioning: Versioning assigns a unique version number to each data record. Users can modify records independently, and conflicts are resolved by comparing version numbers. This method provides a clear history of changes.

Generating Unique Auto Numbers in CRM with Concurrency Control: A Plugin Example

Method 1 -

Requirement: A plugin that

  • Can be applied to any numbering series.
  • Generates a unique number for each individual record.

Create custom auto number table where each row will represent a specific numbering series (Account, Policy, claims, etc.)

Need an action that can be called on the creation of a new record that will,

A.Look into the table to choose the numbering series to use.

B. Place a write lock on the number series.

C. Queue up any subsequent request for that number series.

D. Hand off the numbering to the requesting record.

E. Once transaction is committed update the number to the next.

F. Release Write lock for next request in the queue.

Precondition: I have created a table called "new_numberseries" as the numbering table and added the required fields to the number series table. Additionally, I have set up an auto-number field on the account entity.

Step 1: Setting up the Development Environment

1. Open Visual Studio (e.g., Visual Studio 2017 or any other version).

2. Create a new Class Library (.NET Framework) project using .NET Framework 4.6.2. The name used for the project will be the same as the name of the assembly.

3. Install the SDK CoreAssembly from NuGet Package Manager to access CRM functionality. In Solution Explorer, right-click the project, and then select 'Manage NuGet Packages' from the context menu.

4. thrSelect Browse and search for Microsoft.CrmSdk.CoreAssemblies and install the latest version. You must choose 'I Accept' in the License Acceptance dialog.

Step 2: Writing the Plugin Code

1. Add the following using statements to the top of the Autonumber.cs file:

2. Implement the IPlugin interface by editing the class.

3. Replace the contents of the Execute method with the following code (the necessary code to implement concurrency control for generating unique auto numbers on CRM entities). Here's an example of the code:

4. Now, add the following code after the execute method. The below code includes two methods one for acquiring a lock and another for releasing the lock.

Step 3: Registering the Plugin

1. Build the project, navigate to the "Build" tab (or "Rebuild" if necessary) and then copy the path. Then, use the Plugin Registration Tool to register your plugin in a CRM environment of your choice.

2. After registering your plugin, add the plugin step. In my case, I added the plugin step of the "create" event on the "account" entity.

Method 2 -

Instead of creating additional fields for tracking locks or clearing them afterward, this approach also utilizes a custom table for Auto Number generation. Here's a step-by-step guide:

1. Create a "Lock" Field:

In the custom table designed for Auto Number generation, create a new text field named "Locked" (you can choose any appropriate name).

2. Retrieve the Record:

When you need to retrieve a record from this custom table, which stores a sequence or series, initiate the retrieval process.

3. Update the "Lock" Field:

Immediately upon retrieving the record, update the "Locked" field with a value. A commonly used value can be the current date and time, obtained using DateTime.Now.ToString().

4. Proceed with Logic:

Now, you can proceed with the rest of your logic, confident that the record is locked for your exclusive use.

5. Unlock Mechanism:

After you've completed your plugin or process, there's no need to explicitly clear the "Locked" field. The concept is to modify a non-essential field in the series/sequence record immediately upon retrieval. When you update the field, it locks the record, preventing other threads from reading it until your plugin has finished its task.

Implementing a locking mechanism with a "Locked" field in a custom table is a practical and effective approach for generating unique auto numbers in a CRM entity. By following this method, you can ensure data consistency, prevent conflicts, and streamline your auto-number generation process.

AutoNumberGeneration
ConcurrencyControlTechniques
PluginCodeImplementation
Author
Blog Calendar
Blog Calendar List
2024 Apr  17  4
2024 Mar  29  4
2024 Feb  25  3
2024 Jan  7  7
2023 Dec  10  6
2023 Nov  34  5
2023 Oct  99  12
2023 Sep  220  9
2023 Aug  61  7
2023 Jul  31  5
2023 Jun  20  4
2023 May  43  5
2023 Apr  33  5
2023 Mar  90  6
2023 Feb  107  5
2023 Jan  38  4
2022 Dec  94  7
2022 Nov  252  2
2022 Sep  13  1
2022 Aug  27  2
2022 Jun  7  2
2022 May  3  2
2022 Apr  6  2
2022 Mar  1  1
2022 Feb  2  1
2022 Jan  1  1
2021 Dec  3  1
2021 Nov  2  1
2021 Oct  1  1
2021 Sep  11  1
2021 Aug  37  5
2021 Jul  36  4
2021 Jun  1226  5
2021 May  31  3
2021 Apr  2025  3
2021 Mar  188  5
2021 Feb  2113  7
2021 Jan  3039  9
2020 Dec  438  7
2020 Sep  74  3
2020 Aug  673  3
2020 Jul  127  1
2020 Jun  75  3
2020 Apr  68  3
2020 Mar  12  2
2020 Feb  27  5
2020 Jan  34  7
2019 Dec  17  4
2019 Nov  29  1
2019 Jan  23  2
2018 Dec  67  4
2018 Nov  68  3
2018 Oct  18  3
2018 Sep  1139  11
2018 Aug  7  2
2018 Jun  13  1
2018 Jan  68  2
2017 Sep  585  5
2017 Aug  17  1
2017 Jul  17  2
2017 Jun  62  2
2017 May  21  1
2017 Apr  35  2
2017 Mar  135  4
2017 Feb  773  4
2016 Dec  203  3
2016 Nov  826  8
2016 Oct  304  10
2016 Sep  701  6
2016 Aug  39  1
2016 Jun  1874  6
2016 May  110  3
2016 Jan  71  2
2015 Dec  473  6
2015 Nov  4  1
2015 Oct  13  1
2015 Sep  1464  6
2015 Aug  14  1
2015 Jul  128  2
2015 Jun  10  1
2015 May  20  1
2015 Apr  30  3
2015 Mar  80  3
2015 Jan  5335  4
2014 Dec  17  1
2014 Nov  2257  4
2014 Oct  68  1
2014 Sep  107  2
2014 Aug  5277  1
2014 Jul  48  2
2014 Apr  2578  12
2014 Mar  300  17
2014 Feb  220  6
2014 Jan  1510  16
2013 Dec  21  2
2013 Nov  689  2
2013 Oct  256  3
2013 Sep  11  1
2013 Aug  40  3
2013 Jul  214  1
2013 Apr  57  6
2013 Mar  2287  10
2013 Feb  127  3
2013 Jan  343  2
2012 Nov  57  2
2012 Oct  499  10
Tag Cloud
Interested in our services? Still not sure about project details? get a quote