Блокировка. Инкремент в динамике Crm Plugin? - PullRequest
0 голосов
/ 20 апреля 2020

Я хотел бы реализовать внутренний счетчик для динамических плагинов CRM. Но я не уверен, что это хорошая идея или не касается многопоточности, и т. Д. c.

Было бы так:

sealed class Counter
{
    private int current = 0;

    public int NextValue()
    {
        return Interlocked.Increment(ref this.current);
    }

    public void Reset()
    {
        this.current = 0;
    }
}

возможно, это может быть проблемой в Плагины динамики?

Спасибо за ваши мысли по этому поводу.

1 Ответ

2 голосов
/ 21 апреля 2020

Не ясно, какова цель этого счетчика. Это какая-то деловая логика c или просто статистика?

Если вам нужен счетчик для нумерации объектов, то можно использовать функцию OOB https://docs.microsoft.com/en-us/dynamics365/customerengagement/on-premises/developer/create-auto-number-attributes

D365 имеет распределенные развертывания. Один и тот же плагин может быть запущен на доменах приложений FE, Asyn c или Sandbox, и обычно каждый из них имеет несколько экземпляров. Так что если вы действительно хотите написать свой собственный распределенный счетчик, вам придется заставить его работать на любом количестве разных доменов приложений. Многопоточность здесь не может помочь. Все случаи должны полагаться на единый источник правды. Это должна быть какая-то внешняя служба или БД организации.

Некоторые разработчики уже исследовали эту проблему и написали статьи с фрагментами кода:

PS Также есть коммерческие решения для автонумерации \ счетчиков на рынок.

...