|  16.03.2018, 13:19 | #1 | 
| Участник | Плагины, транзакции, автонумерация 
			
			Платформа Dynamics 365. Колхозю автонумерацию (готовые решения просьба не предлагать  ). Есть сущность "Нумератор", хранящая актуальный номер + сущность "Правило нумерации", задающее некие настройки. Помниться был такой способ создания автонумерации, когда делаешь плагин, в нем сначала обновляешь какое то мусорное поле записи нумератора, потому считываешь номер и обновляешь его новым значением. Плагины выполняются в транзакции, поэтому после первого "мусорного" обновления запись нумератора блокируется и это не дает номерам задваиваться при одновременной попытке получения номера. Сделал плагин на Post-RetrieveMultiple для сущности "Правило нумерации", в котором делаю все вышеописанное со связанной записью "Нумератор", но при тестировании получаю задвоенные номера. Чего то я не понимаю... Либо я не в Лондоне, либо Эйфелева башня не в Лондоне... Почему номера задваиваются?.. Может плагины на запрос данных (вроде Retrieve и RetrieveMultiple) не выполняются в транзакции? Это было бы конечно логично, что информации про это я как то не нашел. | 
|  | 
|  16.03.2018, 16:45 | #2 | 
| Чайный пьяница | 
			
			Вопрос - почему вы используете RetrieveMultiple сущности "Правило нумерации", а не Create сущности, для которой собственно автономерацию и делаете?
		 
				__________________ Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit | 
|  | 
|  16.03.2018, 17:10 | #3 | 
| Участник | 
			
			Потому что планирую сделать получение номера не только при создании записи, а, например, в WF. Нумерация записи при создании - это лишь частный случай (в моих нынешних реалиях, к тому же, не особо нужный).
		 | 
|  | 
|  16.03.2018, 17:56 | #4 | 
| Moderator | 
			
			+1 за Create, хотя идея с RetrieveMultiple мне понравилась. Полагаю, идея была сделать а-ля сиквенс? Мне очень сомнительно, что чтение тоже делается в транзакции, но вы легко можете это проверить: IPluginExecutionContext имеет свойство IsInTransaction. p.s. Сделайте хотя бы на Retrieve, а то ваш нумератор будет наматывать при каждом просмотре списка сущности "Правило нумерации". Как вариант, сделайте строковый альтернативный ключ и ретривьте по нему. Увы не нашел, поддерживается ли этот сценарий. Возможно работает только с Create или Update. 
				__________________ http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.   MS Certified Dirty Magic Professional Последний раз редактировалось Артем Enot Грунин; 16.03.2018 в 18:02. | 
|  | 
|  19.03.2018, 09:23 | #5 | 
| Участник | Цитата: Сделанно специально на RetrieveMultiple, потому что это позволяет "передавать в запрос параметры" через условие поиска. В зависимости от этих "параметров" происходит или не происходит генерация номера. | 
|  | 
|  19.03.2018, 09:52 | #6 | 
| Участник | Цитата: 
		
			Сообщение от ZooY
			   Помниться был такой способ создания автонумерации, когда делаешь плагин, в нем сначала обновляешь какое то мусорное поле записи нумератора, потому считываешь номер и  обновляешь его новым значением. Плагины выполняются в транзакции, поэтому после первого "мусорного" обновления запись нумератора блокируется и это не дает номерам задваиваться при одновременной попытке получения номера. Опишите подробнее для чего Вам нужны правила нумерации. В большинстве случаев все реализуется на уровне сущности автонумерации, даже несколько разных вариантов номеров для 1 сущности, но, не универсально. Если Вы заранее показываете пользователю номер, то у Вас будут пропуски в нумерации, если пользователь не сохранит запись и закроет форму создания. | 
|  | 
|  19.03.2018, 10:50 | #7 | 
| Участник | Цитата: Цитата: Хочется сделать просто и универсальное решение. Собственно с RetrieveMultiple и Lock оно вполне получилось, но хотелось узнать, почему не получилось с транзакциями. Цитата:   | 
|  |