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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.11.2015, 13:26   #1  
Pandasama is offline
Pandasama
Участник
 
449 / 133 (5) +++++
Регистрация: 11.08.2014
Адрес: Барнаул
порядок обработки записей в форме с UnitOfWork
Ax2012
Проблема в следующем:
есть форма с реализованным на нем UnitOfWork (ChangeGroupMode выставлено в значение ImplicitInnerOuter)
На форме пара датасорсов через innerjoin и к ним ещё несколько датасорсов через outer
примерно так
datasource A <-- inner join <-- datasource B
datasource A <-- outer join <-- datasource C
datasource A <-- outer join <-- datasource D

При сохранении записи в форме наблюдается неустойчивое поведение в порядке сохранений записей в таблицу. Иногда сохраняется сначала D, C, B, A, а иногда - D, B, A и только потом C.
Из-за этого ломается некоторая бизнес-логика, которая работает при вставке в таблицу A и должна использовать значения из C.

Как задается порядок вставки записей в UintOfWork (особенно, в данном случае, на форме)? просто по иерархии джойнов? можно ли его как-то поменять?

UPD: собственно, возникла мысль, что упомянутую бизнес-логику "которая работает при вставке в таблицу A и должна использовать значения из C" - надо просто как-то завернуть в этот же UnitOfWork, т.е. вместо поиска в ней записи C и использования её данных/recid - использовать её данные в рамках UoW, которые будут вставлены позже. Это реализуемо?

Последний раз редактировалось Pandasama; 16.11.2015 в 14:13.
Старый 16.11.2015, 22:23   #2  
skuull is offline
skuull
Участник
Most Valuable Professional
Лучший по профессии 2014
 
699 / 752 (27) +++++++
Регистрация: 08.03.2013
Адрес: ХЗ
AX создаст все записи в 1 транзакции одним вызовом, а потом вызовет метод дата соруса written. Вот там и пишите что вам надо

Последний раз редактировалось skuull; 16.11.2015 в 22:29.
Старый 17.11.2015, 06:44   #3  
Pandasama is offline
Pandasama
Участник
 
449 / 133 (5) +++++
Регистрация: 11.08.2014
Адрес: Барнаул
К сожалению, то что происходит во written - происходит в другой транзакции.
Старый 17.11.2015, 07:53   #4  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Pandasama Посмотреть сообщение
К сожалению, то что происходит во written - происходит в другой транзакции.
Странно. Вот здесь https://msdn.microsoft.com/en-us/library/jj129662.aspx написано что должно происходить в одной.
Цитата:
You use the writing methods to perform any pre-write actions.
You use the written method for any post-write actions.
За это сообщение автора поблагодарили: Logger (1), Pandasama (1).
Старый 17.11.2015, 07:56   #5  
Pandasama is offline
Pandasama
Участник
 
449 / 133 (5) +++++
Регистрация: 11.08.2014
Адрес: Барнаул
Хм, странно.
Попроверяю ещё, хотя когда я сделал throw error в written, часть данных у меня в базу оказались записанными.
Старый 02.12.2016, 09:41   #6  
Dreadlock is offline
Dreadlock
Участник
Аватар для Dreadlock
 
298 / 224 (8) ++++++
Регистрация: 07.05.2009
Адрес: Москва
Цитата:
Сообщение от Pandasama Посмотреть сообщение
Хм, странно.
Попроверяю ещё, хотя когда я сделал throw error в written, часть данных у меня в базу оказались записанными.
Как я понял, это работает так:
Предположим есть несколько таблиц на форме связанных по inner/outer join.
При сохранении записей на каждом DataSource вызывается validateWrite и writing без транзакции, если везде всё прошло успешно, то система (где-то в ядре вызывает super() как на write) открывает транзакцию и записывает все данные в одной трнзакции в БД, закрывает транзакцию, после чего на каждом DataSource начинается вызов written. Т.о. взять и обернуть writing/written с вызовом super() между ними в одну транзакцию у меня не получилось и это очень печально
Теги
ax2012, unitofwork

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Итератор с поддержкой методов обратного вызова для обработки контролов на форме gl00mie DAX: Программирование 18 06.08.2013 22:16
Порядок пунктов меню на форме. pwp DAX: Программирование 2 15.03.2010 08:51
Управление изменением записей на форме. pwp DAX: Программирование 28 04.02.2010 16:00
вывод количества записей в таблице на web форме и указание текущей страницы таблицы bambuk1960 DAX: Программирование 1 06.07.2006 13:27
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38

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

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

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