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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 03.11.2011, 15:39   #1  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,941 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
? SysSetupFormRun и ValidateWrite
Коллеги, возможно ли как-то в Аксапте реализовать универсальную валидацию сохранения записи для произвольной формы ?

Например, есть метод SysSetupFormRun.Task()
с его можно ловить произвольное событие или нажатие комбинации клавиш.

Есть SysSetupFormRun.selectControl()
с его можно ловить получение фокуса произвольным элементом управления.

Есть Info.formNotify()
можно ловить события на форме.

Я не нашел как можно было бы поймать вызов ValidateWrite на произвольном датасорсе любой формы. Возможно это сделать в Аксапте ?
Старый 03.11.2011, 18:26   #2  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,438 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Теоретически вызов методов датасурсов Write и ValidateWrite может быть иницирован непостредственно из кода. Например часто Write принудительно дёргается из modifiedField. Т.е., вообще говоря, вызовы методов датасурса не обязаны быть связаны с событиями дизайна формы.
Старый 03.11.2011, 18:35   #3  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,941 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Не обязаны конечно.
Но и метод task() можно из кода дернуть и setFocus() на контроле из кода тоже можно дернуть, но тем не менее все эти методы есть на sysSetupformRun.

Хотя, чего мы к нему (sysSetupformRun) привязались, может это можно как-то по другому сделать ?
Старый 03.11.2011, 19:34   #4  
Pustik is offline
Pustik
Участник
 
807 / 372 (14) ++++++
Регистрация: 04.06.2004
Цитата:
Сообщение от Logger Посмотреть сообщение
Хотя, чего мы к нему (sysSetupformRun) привязались, может это можно как-то по другому сделать ?
А как иначе, если говорить об универсальности?
__________________
-Ты в гномиков веришь?
-Нет.
-А они в тебя верят, смотри, не подведи их.
Старый 04.11.2011, 00:11   #5  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
А что, через task не ловится? Еще стоит заглянуть в форму sysTaskRecorder (AX2009) - функционал для автоматизации написания пользовательский инструкций (кстати, очень полезная вещь), отлавливает наверное любое телодвижение пользователя, вплоть до переходов по главному меню. Возможно, там что- то подходящее найдется.
За это сообщение автора поблагодарили: Pustik (2).
Старый 04.11.2011, 19:55   #6  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от Logger Посмотреть сообщение
Коллеги, возможно ли как-то в Аксапте реализовать универсальную валидацию сохранения записи для произвольной формы?
По-моему, нет.
Цитата:
Сообщение от Logger Посмотреть сообщение
Например, есть метод SysSetupFormRun.Task()
Этот метод во многом хорош, но:
  • в коде могут встретиться клинические случаи, когда форма создается напрямую, минуя classFactory и пункты меню - в этом случае форма будет классом FormRun, а не SysSetupFormRun;
  • кроме #taskSave (272) сохранение записи и предшествующий вызов validateWrite() также может вызываться при навигации по записям, что в task() ловится как #taskArrowUp (1281) или #taskArrowDown (1282); очевидно, также, что не всякое событие ArrowUp/ArrowDown на форме приведет к попытке сохранения какой бы то ни было записи на форме;
  • есть еще такая вещь как сохранение записи перед нажатием кнопки (см. свойство SaveRecord кнопок - по умолчанию равно Yes), так вот, исходя из тестов на пробной форме стек вызовов при этом выглядит так:
    Код:
    \Forms\Form1\Data Sources\table1\Methods\validateWrite
    \Classes\FormDataSource\leaveRecord
Т.е. в общем случае, как минимум, никакой метод SysSetupFormRun не вызывается перед validateWrite().
За это сообщение автора поблагодарили: Logger (3).
Старый 05.11.2011, 01:41   #7  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,941 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Да, все верно.
Я понимаю что для вызова ValidateWrite() нет соответсвующего task.
Упомянул про task(), selectControl(), formNotify() чисто для примера.
Старый 22.02.2013, 05:13   #8  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,941 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Аналогичный вопрос про метод Active() на датасорсе.
В принципе он решен, но обработчик на SysSetupFormRun всегда принимает один дефолтный датасорс. Непонятно как при вызове понять текущий датасорс, на котором дернулся Active(), если датасорсов несколько.
Старый 25.02.2013, 08:20   #9  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
647 / 350 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Цитата:
Сообщение от Logger Посмотреть сообщение
Аналогичный вопрос про метод Active() на датасорсе.
В принципе он решен, но обработчик на SysSetupFormRun всегда принимает один дефолтный датасорс. Непонятно как при вызове понять текущий датасорс, на котором дернулся Active(), если датасорсов несколько.
На каждый DS цепляется отдельный active(). Все остальные DS цепляются к дефолтному в иерархической структуре.
__________________
// no comments
Старый 25.02.2013, 13:54   #10  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,941 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от dech Посмотреть сообщение
На каждый DS цепляется отдельный active(). Все остальные DS цепляются к дефолтному в иерархической структуре.
Я это понимаю.
Но как это поможет мне понять из
\Classes\SysSetupFormRun\active_W

для какого XXX_ds.Active() он вызван ?
Старый 25.02.2013, 17:11   #11  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Мда, засада... в голову приходит только анализ стека вызовов и сопоставление найденных там строк "*XX_DS\active" с названиями DS в дизайне формы, хотя это совсем какой-то извратный способ
За это сообщение автора поблагодарили: Logger (3).
Старый 25.02.2013, 18:29   #12  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,941 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Изврат, да.
Но нас этим не испугаешь

Спасибо за идею.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
RecordInsertList и validatewrite IKA DAX: Программирование 2 23.02.2010 19:27
validateWrite и две таблицы IKA DAX: Программирование 7 16.07.2009 07:19
DAX 4.0 SP2 EE FP1 RU HRP - RpayTblSpecTimeTable.validateWrite() Bishop DAX: Программирование 6 10.09.2008 15:27
edit-методы и validateWrite() на DataSource gl00mie DAX: Программирование 6 30.06.2008 17:50
При повторном вызове linkActive проваливается в validateWrite(Строки общего журнала ГК) Lemming DAX: Программирование 6 25.10.2007 13:50
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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