15.05.2013, 16:53 | #1 |
Участник
|
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 |
северный Будда
|
Я бы сделал так
1) Пишете отдельный класс. В классе диалог с модифицируемом полем. Инитите поле диалога текущим значением
2) по нажатию ОК в диалоге форматируете введённое. Если форматирование прошло успешно - модифицируете поле таблицы 3) Вешаете запуск класса на кнопку в форме и ставите нужный security на его менюайтем
__________________
С уважением, Вячеслав |
|
15.05.2013, 17:57 | #3 |
Developer
|
В такой постановке поле достаточно модифицировать в ds.field.validate() перед super() или в table.validatefield() перед проверками. Тогда и форматированное значение пройдет все запланированные проверки, и throw exception приведет к откату введенного пользователем значения.
|
|
15.05.2013, 19:12 | #4 |
Участник
|
2vallys: Спасибо, но нехорошо в validate менять значение поля(. Для этого как раз modified существует.
2pitersky: Редактируется поле на гриде на форме, если я еще доп диалог повешу на него, то меня повесят в свою очередь пользователи... |
|
15.05.2013, 20:25 | #5 |
Developer
|
Цитата:
FormDataObject.modified Method: Notifies that the field has been successfully validated and modified in the current record |
|
16.05.2013, 08:50 | #6 |
Участник
|
|
|
16.05.2013, 09:49 | #7 |
северный Будда
|
Цитата:
Если же предполагается путешествие по форме с последовательной правкой 20-30 полей, то да, мой вариант не подойдёт.
__________________
С уважением, Вячеслав |
|