31.07.2014, 10:52 | #1 |
Участник
|
UnitOfWork на форме
Добрый день, уважаемые знатоки. Подскажите пожалуйста как можно реализовать на форме создание заголовка и множества строк с использованием механизма UnitOfWork. Для случая заголовка и одной строки - работает, но при добавлении второй строки - идет попытка сохранения записи заголовка и записи строки.
|
|
31.07.2014, 10:59 | #2 |
Участник
|
А в чем собственно проблема? "Фишка" UnitOfWork в том что одновременно сохраняються все датасорсы между writing и written
|
|
31.07.2014, 11:03 | #3 |
Участник
|
Проблема в том, что при попытке добавить вторую строку, происходит запись заголовка и первой строки. А нам этого не нужно. Нужно, чтобы одновременно записались и заголовок, и все строки. Если в коде использовать UnitOfWork, то так все и работает. А на форме у нас не получается это реализовать. Может быть мы что-то не так делаем
|
|
31.07.2014, 11:19 | #4 |
Участник
|
Насколько я понимаю он групирует вашу шапку и строки в 1 юнит и вызывает запись для всего юнита, так что неважно какая это строка 1, 2 или 25.
|
|
31.07.2014, 11:25 | #5 |
Участник
|
Я с Вами полностью согласна, что так должно работать. Так почему же у нас только при Ctr + N второй строки уже запись идет и заголовка и первой строки?
|
|
31.07.2014, 12:42 | #6 |
Участник
|
Вы создаете 1 строку , не сохраняете ее, жмете ctr+N он в супере create вызывает запись для певой строки потом initValue() второй строки ...
|
|
31.07.2014, 13:19 | #7 |
Участник
|
Да именно так при попытке добавить вторую строку в гриде идет попытка сохранения записи и заголовка и строки соответвенно
Вопрос как раз в том как на форме работающей по технологи UnitOfWorks добавлять несколько строк в гриде в связанной таблице и чтобы сохранять набитые заголовок и строки только при выходе из формы или по кнопке сохранить.А при выходе из формы по escape не сохранять ничего. Может кто может встречался в стандарном функционале с подобной формой. |
|
31.07.2014, 13:33 | #8 |
Участник
|
Как реализовать на форме создание заголовка и множества строк с использованием механизма UnitOfWork -
Выставить свойство ChangeGroupMode в ImplicitInnerOuter. Тут подробнее - MSDN Цитата:
при добавлении второй строки - идет попытка сохранения записи заголовка и записи строки.
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0 |
|
31.07.2014, 13:59 | #9 |
Участник
|
) что то мы все не можем понять друг друга ))
про свойство ChangeGroupMode в курсе с ним и работаем Давайте начнем сначала от поставленной задачи )) Есть следующая задача сделать форму в которой обслуживаются 2 таблицы Header и Lines. Cоответственно в шапке формы поля таблицы Header после чего отображется грид связанной таблицы Lines в которой можно добавлять несколько строк. Задача стоит в том чтобы если пользователь набил данные заголовка( Header) и НЕСКОЛЬКО связанных строк (LInes) и после чего передумал и нажал на форме ESCAPE не нужно сохранять ни Заголовок ни Строки. |
|
31.07.2014, 14:12 | #10 |
Участник
|
никак
|
|
31.07.2014, 14:29 | #11 |
Участник
|
Точно никак ?
Програмно при помощи класса UnitOfWork это позволяет сделать В этом то вроде как и суть UnitOfWork |
|
31.07.2014, 14:43 | #12 |
Участник
|
По моему вам журнал надо.
Разнесли - значит принято. Нет - значит все записи времянка. Или статус на Header заведите - принято или нет. Если совсем в лоб - перекрывайте task и ловите свой Esc (#define.taskEsc(1313) в #Task). Если очень хочется UnitOfWork использовать для того чтобы в БД все ушло 1 запросом - делайте форму с временной таблицой, если нажали OK - посылайте все данные из временных таблиц в БД через UnitOfWork. ИМХО оверкил.
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0 |
|
31.07.2014, 14:51 | #13 |
Участник
|
Цитата:
ИМХО плохая поставнока задачи. Сделаете как советуют выше с журналом и будет как везде "пускай безобразно но однообразно" |
|
31.07.2014, 15:04 | #14 |
Участник
|
Я не пытаюсь придумывать велосипед )) Это не мои хотелки это требование заказчика. А Заказчик всегда прав))
А UnitOfWork по сути для этого и предназначен одним запросом добавлять заголовок и строки но в реализации его в пользовательском интерфейсе AX видимо не что то недокрутили или чего то я не понимаю . Заказчик видит что есть форма которая работает с UnitOfWork и позволяет не сохранять данные по желанию пользователя. И говорит хочу так же но с гридом . |
|
31.07.2014, 16:02 | #15 |
Участник
|
Реализовать как журнал или с использованием временной таблицы тоже не вариант так как необходимо встроиться в уже существующую тяжелую форму в которой порядка 10 датасоурсов и 2 класса обработчика и переделывать ее под временную таблицу практически нереально и очень трудоемко
проще всего в такой ситуации удалить все что было создано при выходе по escape но мне это совсем не нравится. |
|
31.07.2014, 16:17 | #16 |
Участник
|
Цитата:
Сообщение от Ramil
Реализовать как журнал или с использованием временной таблицы тоже не вариант так как необходимо встроиться в уже существующую тяжелую форму в которой порядка 10 датасоурсов и 2 класса обработчика и переделывать ее под временную таблицу практически нереально и очень трудоемко
проще всего в такой ситуации удалить все что было создано при выходе по escape но мне это совсем не нравится. |
|
31.07.2014, 16:43 | #17 |
Участник
|
Мне самому не нравится эта идея но описанная вами проблема решается достаточно просто.В заголовке можно завести поле статус черновик и анализировать его при удалении и при использовании.
|
|
31.07.2014, 17:05 | #18 |
Участник
|
1) Ок, если это существующаю форма вы готовы везде где это используеться прокинуть свой статус "черновик".
2) Надо еще запретить другим пользователям использовать\редактировать этот черновик 3) Если 1 пользователь открыл 2 раза эту форму и 1 закрыл по ескейпу, как вы узнаете что надо удалить, а что оставить?) я думаю еще куча подобного найдеться... может проще отговорить заказчика и сделать журналом? |
|
31.07.2014, 17:22 | #19 |
Участник
|
Да определить что нужно удалить не проблема я не собираюсь тупо удалять все записи со статусом черновик а при выходе из формы создания записи определять текущую запись и ее удалять при необходимости все это решаемо.
Есть задача реализовать ее можно множеством способов но у каждого способа есть трудоемкость соотвественно деньги а заказчик считает каждую копейку. Да и я уже сказал что такой метод тоже меня не устраивает и я склоняюсь к UnitOfWork который по идее должен это позволять. Вы бы вместо критики все же тогда обьяснили почему UnitOfWork програмно позволяет это делать а через форму нет. |
|
01.08.2014, 08:10 | #20 |
Участник
|
Для того чтобы при переходе на новую строку старая автоматически не пыталась сохраниться попробуйте на датасурсе перекрыть метод leaveRecord и передать в super false.
|
|
Теги |
unitofwork |
|
|