AXForum  
Вернуться   AXForum > Microsoft Dynamics CRM > Dynamics CRM: Разработка
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.03.2018, 13:19   #1  
ZooY is offline
ZooY
Участник
Аватар для ZooY
 
330 / 43 (2) +++
Регистрация: 24.06.2008
Адрес: Россия, Москва
Плагины, транзакции, автонумерация
Платформа Dynamics 365.

Колхозю автонумерацию (готовые решения просьба не предлагать ).

Есть сущность "Нумератор", хранящая актуальный номер + сущность "Правило нумерации", задающее некие настройки.

Помниться был такой способ создания автонумерации, когда делаешь плагин, в нем сначала обновляешь какое то мусорное поле записи нумератора, потому считываешь номер и обновляешь его новым значением. Плагины выполняются в транзакции, поэтому после первого "мусорного" обновления запись нумератора блокируется и это не дает номерам задваиваться при одновременной попытке получения номера.

Сделал плагин на Post-RetrieveMultiple для сущности "Правило нумерации", в котором делаю все вышеописанное со связанной записью "Нумератор", но при тестировании получаю задвоенные номера.

Чего то я не понимаю... Либо я не в Лондоне, либо Эйфелева башня не в Лондоне... Почему номера задваиваются?.. Может плагины на запрос данных (вроде Retrieve и RetrieveMultiple) не выполняются в транзакции? Это было бы конечно логично, что информации про это я как то не нашел.
__________________
Моё: Cайт - Код
Старый 16.03.2018, 16:45   #2  
online
a33ik
Чайный пьяница
Аватар для a33ik
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,092 / 838 (34) +++++++
Регистрация: 02.07.2008
Адрес: Greenville, SC
Вопрос - почему вы используете RetrieveMultiple сущности "Правило нумерации", а не Create сущности, для которой собственно автономерацию и делаете?
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Читайте мой блог
Старый 16.03.2018, 17:10   #3  
ZooY is offline
ZooY
Участник
Аватар для ZooY
 
330 / 43 (2) +++
Регистрация: 24.06.2008
Адрес: Россия, Москва
Потому что планирую сделать получение номера не только при создании записи, а, например, в WF. Нумерация записи при создании - это лишь частный случай (в моих нынешних реалиях, к тому же, не особо нужный).
__________________
Моё: Cайт - Код
Старый 16.03.2018, 17:56   #4  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Аватар для Артем Enot Грунин
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,857 / 603 (28) +++++++
Регистрация: 16.08.2007
Адрес: Пермь!
+1 за Create, хотя идея с RetrieveMultiple мне понравилась. Полагаю, идея была сделать а-ля сиквенс?

Мне очень сомнительно, что чтение тоже делается в транзакции, но вы легко можете это проверить: IPluginExecutionContext имеет свойство IsInTransaction.

p.s. Сделайте хотя бы на Retrieve, а то ваш нумератор будет наматывать при каждом просмотре списка сущности "Правило нумерации". Как вариант, сделайте строковый альтернативный ключ и ретривьте по нему. Увы не нашел, поддерживается ли этот сценарий. Возможно работает только с Create или Update.
__________________
CRM, SharePoint и черная магия, снятие/наведение порчи. Быстро, дорого, гарантия.
Теперь и английский вариант! http://fixrm.wordpress.com/
MS Certified Dirty Magic Professional

Последний раз редактировалось Артем Enot Грунин; 16.03.2018 в 18:02.
Старый 19.03.2018, 09:23   #5  
ZooY is offline
ZooY
Участник
Аватар для ZooY
 
330 / 43 (2) +++
Регистрация: 24.06.2008
Адрес: Россия, Москва
Цитата:
Сообщение от Артем Enot Грунин Посмотреть сообщение
+1 за Create, хотя идея с RetrieveMultiple мне понравилась. Полагаю, идея была сделать а-ля сиквенс?
Да, причем основная идея в том, чтобы не зависеть от создания записи, а получать номер из WF или JS.

Цитата:
Сообщение от Артем Enot Грунин Посмотреть сообщение
p.s. Сделайте хотя бы на Retrieve, а то ваш нумератор будет наматывать при каждом просмотре списка сущности "Правило нумерации".
Сделанно специально на RetrieveMultiple, потому что это позволяет "передавать в запрос параметры" через условие поиска. В зависимости от этих "параметров" происходит или не происходит генерация номера.
__________________
Моё: Cайт - Код
Старый 19.03.2018, 09:52   #6  
Буденый is offline
Буденый
Участник
 
70 / 15 (1) ++
Регистрация: 07.06.2010
Адрес: Донецк
Цитата:
Сообщение от ZooY Посмотреть сообщение
Помниться был такой способ создания автонумерации, когда делаешь плагин, в нем сначала обновляешь какое то мусорное поле записи нумератора, потому считываешь номер и обновляешь его новым значением. Плагины выполняются в транзакции, поэтому после первого "мусорного" обновления запись нумератора блокируется и это не дает номерам задваиваться при одновременной попытке получения номера.
Есть такой способ, но для него нужно хранить Id-шники записей и обновлять их до чтения. Сложность такой реализации в том, что Вы должны сохранить Id записи и прописать в настройках (например в XML связка Id записи и имя сущности). И как Вы написали - использовать обновление до чтения настроек.

Опишите подробнее для чего Вам нужны правила нумерации. В большинстве случаев все реализуется на уровне сущности автонумерации, даже несколько разных вариантов номеров для 1 сущности, но, не универсально.

Если Вы заранее показываете пользователю номер, то у Вас будут пропуски в нумерации, если пользователь не сохранит запись и закроет форму создания.
Старый 19.03.2018, 10:50   #7  
ZooY is offline
ZooY
Участник
Аватар для ZooY
 
330 / 43 (2) +++
Регистрация: 24.06.2008
Адрес: Россия, Москва
Цитата:
Сообщение от Буденый Посмотреть сообщение
Есть такой способ, но для него нужно хранить Id-шники записей и обновлять их до чтения. Сложность такой реализации в том, что Вы должны сохранить Id записи и прописать в настройках (например в XML связка Id записи и имя сущности).
Хранить ID не обязательно, запись нумератора можно найти по ключу (я так и делаю). Хотя по сути это схожие действия, ведь все равно нужно хранить ключ.

Цитата:
Сообщение от Буденый Посмотреть сообщение
Опишите подробнее для чего Вам нужны правила нумерации. В большинстве случаев все реализуется на уровне сущности автонумерации, даже несколько разных вариантов номеров для 1 сущности, но, не универсально.
Правила нумерации нужны для организации, например, сквозной нумерации в рамках года, когда в зависимости от текущего года нужно брать номера из разных нумераторов.

Хочется сделать просто и универсальное решение. Собственно с RetrieveMultiple и Lock оно вполне получилось, но хотелось узнать, почему не получилось с транзакциями.

Цитата:
Сообщение от Буденый Посмотреть сообщение
Если Вы заранее показываете пользователю номер, то у Вас будут пропуски в нумерации, если пользователь не сохранит запись и закроет форму создания.
Это то понятно... Но когда я говорил о формировании номера в JS я скорее имел в виду OnSave формы или какие-нибудь дикие кейсы с предсоздание новой записи...
__________________
Моё: Cайт - Код
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
CRM 2011 Плагины kh_heckfy Dynamics CRM: Разработка 3 22.01.2015 15:03
Не работают плагины при создании или обновлении записей через мастер импорта данных SLK Dynamics CRM: Разработка 0 26.10.2012 08:41
Плагины на CRM Online 2011 работают не для всех пользователей Omalinka Dynamics CRM: Разработка 1 11.05.2011 08:44
Насколько опасны плагины Evgenia_f Dynamics CRM: Разработка 8 12.11.2008 11:21
CRM4, плагины и сборки. Alexandr Zhuravlev Dynamics CRM: Разработка 2 11.11.2008 10:42
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 18:46.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.