16.11.2015, 13:26 | #1 |
Участник
|
порядок обработки записей в форме с 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 |
Участник
|
AX создаст все записи в 1 транзакции одним вызовом, а потом вызовет метод дата соруса written. Вот там и пишите что вам надо
Последний раз редактировалось skuull; 16.11.2015 в 22:29. |
|
17.11.2015, 06:44 | #3 |
Участник
|
К сожалению, то что происходит во written - происходит в другой транзакции.
|
|
17.11.2015, 07:53 | #4 |
Участник
|
Цитата:
Цитата:
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 |
Участник
|
Хм, странно.
Попроверяю ещё, хотя когда я сделал throw error в written, часть данных у меня в базу оказались записанными. |
|
02.12.2016, 09:41 | #6 |
Участник
|
Цитата:
Предположим есть несколько таблиц на форме связанных по inner/outer join. При сохранении записей на каждом DataSource вызывается validateWrite и writing без транзакции, если везде всё прошло успешно, то система (где-то в ядре вызывает super() как на write) открывает транзакцию и записывает все данные в одной трнзакции в БД, закрывает транзакцию, после чего на каждом DataSource начинается вызов written. Т.о. взять и обернуть writing/written с вызовом super() между ними в одну транзакцию у меня не получилось и это очень печально |
|
Теги |
ax2012, unitofwork |
|
|