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 Nov  4  1
2024 Aug  4  1
2024 Apr  45  4
2024 Mar  129  4
2024 Feb  224  3
2024 Jan  29  7
2023 Dec  24  6
2023 Nov  351  5
2023 Oct  474  12
2023 Sep  1202  9
2023 Aug  313  6
2023 Jul  46  6
2023 Jun  26  4
2023 May  44  5
2023 Apr  66  5
2023 Mar  182  6
2023 Feb  158  5
2023 Jan  65  4
2022 Dec  95  7
2022 Nov  282  2
2022 Sep  13  1
2022 Aug  32  2
2022 Jun  11  2
2022 May  6  2
2022 Apr  12  2
2022 Mar  2  1
2022 Feb  2  1
2022 Jan  1  1
2021 Dec  4  1
2021 Nov  2  1
2021 Oct  2  1
2021 Sep  14  1
2021 Aug  49  5
2021 Jul  50  4
2021 Jun  1657  5
2021 May  40  3
2021 Apr  2202  3
2021 Mar  208  5
2021 Feb  2553  7
2021 Jan  3769  9
2020 Dec  520  7
2020 Sep  80  3
2020 Aug  767  3
2020 Jul  134  1
2020 Jun  93  3
2020 Apr  89  3
2020 Mar  19  2
2020 Feb  34  5
2020 Jan  47  7
2019 Dec  17  4
2019 Nov  38  1
2019 Jan  23  2
2018 Dec  110  4
2018 Nov  68  3
2018 Oct  18  3
2018 Sep  1221  11
2018 Aug  7  2
2018 Jun  18  1
2018 Jan  70  2
2017 Sep  588  5
2017 Aug  17  1
2017 Jul  17  2
2017 Jun  64  2
2017 May  21  1
2017 Apr  38  2
2017 Mar  138  4
2017 Feb  830  4
2016 Dec  207  3
2016 Nov  917  8
2016 Oct  317  10
2016 Sep  772  6
2016 Aug  39  1
2016 Jun  1883  6
2016 May  112  3
2016 Jan  72  2
2015 Dec  640  6
2015 Nov  4  1
2015 Oct  13  1
2015 Sep  1471  6
2015 Aug  14  1
2015 Jul  129  2
2015 Jun  11  1
2015 May  20  1
2015 Apr  30  3
2015 Mar  80  3
2015 Jan  5343  4
2014 Dec  17  1
2014 Nov  2260  4
2014 Oct  69  1
2014 Sep  107  2
2014 Aug  5319  1
2014 Jul  49  2
2014 Apr  2592  12
2014 Mar  303  17
2014 Feb  222  6
2014 Jan  1510  16
2013 Dec  21  2
2013 Nov  693  2
2013 Oct  256  3
2013 Sep  11  1
2013 Aug  40  3
2013 Jul  214  1
2013 Apr  61  6
2013 Mar  2357  10
2013 Feb  131  3
2013 Jan  350  2
2012 Nov  61  2
2012 Oct  518  10
Tag Cloud
Interested in our services? Still not sure about project details? get a quote