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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 15.05.2013, 16:53   #1  
IKA is offline
IKA
Участник
 
359 / 65 (3) ++++
Регистрация: 15.03.2006
AX2009: Throw error в modified()
Есть форма, на ней есть поле, в кот человек пишет значение, аксапта должна отформатировать значение и оставить уже отформатированное в этом поле.

Функция F, которая форматирует и возвращает отформатированную строку при некоторых условиях выкидывает ошибку.

Вызов F происходит на modified контрола формы.
Но, не смотря на ошибку, значение остается в поле и пользователь может сохранить по Ctrl+F неверное значение.
То есть, упрощенно, происходит то, что после выполнения кода, например, приведенного ниже, можно нажать кнопку Save и сохранится Table1.A = '22'. Такой же эффект, если modified на поле на DS формы.
X++:
public boolean modified()  // modified контрола , привязанного к Table1.A
{
    boolean ret;
    ;
    
    Table1.A = '22';
    throw error('tratata');

    ret = super();

    return ret;
}
Как это обойти? Понятно, что лучше :
1) переприсваивать значение на modifiedField таблицы,но на форме уже есть код на этом контроле и лучше пересчет вставить именно сюда.
2) лучше отдельно вызывать проверки в validate (до modified), но код класса вызывается из нескольких мест + в общем случае на modified могут же выбрасываться ошибки и хотелось бы узнать, как их обрабатывать.

Получается достигнуть желаемого(= не дать ввести и, уж тем более,сохранить запись с неправильным значением), написав try/catch в modified(), но это как-то не оч стандартный подход.

Как в идеале нужно решать подобную задачу?

AX2009
Старый 15.05.2013, 17:15   #2  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,506 / 428 (18) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
Я бы сделал так
1) Пишете отдельный класс. В классе диалог с модифицируемом полем. Инитите поле диалога текущим значением
2) по нажатию ОК в диалоге форматируете введённое. Если форматирование прошло успешно - модифицируете поле таблицы
3) Вешаете запуск класса на кнопку в форме и ставите нужный security на его менюайтем
__________________
С уважением,
Вячеслав
Старый 15.05.2013, 17:57   #3  
vallys is offline
vallys
Developer
 
146 / 108 (0) +++++
Регистрация: 18.01.2005
В такой постановке поле достаточно модифицировать в ds.field.validate() перед super() или в table.validatefield() перед проверками. Тогда и форматированное значение пройдет все запланированные проверки, и throw exception приведет к откату введенного пользователем значения.
Старый 15.05.2013, 19:12   #4  
IKA is offline
IKA
Участник
 
359 / 65 (3) ++++
Регистрация: 15.03.2006
2vallys: Спасибо, но нехорошо в validate менять значение поля(. Для этого как раз modified существует.

2pitersky: Редактируется поле на гриде на форме, если я еще доп диалог повешу на него, то меня повесят в свою очередь пользователи...
Старый 15.05.2013, 20:25   #5  
vallys is offline
vallys
Developer
 
146 / 108 (0) +++++
Регистрация: 18.01.2005
Цитата:
Сообщение от IKA Посмотреть сообщение
2vallys: Спасибо, но нехорошо в validate менять значение поля(. Для этого как раз modified существует.
Как раз в modified менять "не хорошо", особенно после super()
FormDataObject.modified Method: Notifies that the field has been successfully validated and modified in the current record
Старый 16.05.2013, 08:50   #6  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,437 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от IKA Посмотреть сообщение
Но, не смотря на ошибку, значение остается в поле и пользователь может сохранить по Ctrl+F неверное значение.
Перехватывайте исключение и возвращайте предыдущее значение в поле.
Старый 16.05.2013, 09:49   #7  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,506 / 428 (18) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
Цитата:
Сообщение от IKA Посмотреть сообщение
2pitersky: Редактируется поле на гриде на форме, если я еще доп диалог повешу на него, то меня повесят в свою очередь пользователи...
Это решение подходит в том случае, если человек делает атомарную обработку. Т.е. открыл форму - поменял поле в 2-3 строках - закрыл форму. Я не понимаю, почему вас пользователи должны повесить - в своё время я очень успешно отбился от повешения, когда разбил форму с гридом из 50 полей на несколько закладок

Если же предполагается путешествие по форме с последовательной правкой 20-30 полей, то да, мой вариант не подойдёт.
__________________
С уважением,
Вячеслав
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
sjakalax: The model store has been modified Blog bot DAX Blogs 0 23.01.2012 16:11
axinthefield: Choosing a Single Deployment or Multiple Deployments of AX2009 Blog bot DAX Blogs 0 15.06.2011 03:25
Shekhar: Dynamics AX2009 : Standalone Installation on Vista with Role centres and workflow. Blog bot DAX Blogs 0 30.03.2010 15:05
modified два раза два раза MironovI DAX: Программирование 5 14.07.2006 16:29
Транзакция в modified Gad DAX: Программирование 1 29.11.2005 19:54
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 04:24.