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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 17.12.2010, 13:56   #1  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Заблокировать menuItemButton если запись не выбрана
Как проще всего заблокировать menuItemButton если запись в соответствующем DataSource не выбрана (DataSource пуст либо фильтром скрыты все записи)? Почему такое поведение не предусмотренно по умолчанию?
Старый 17.12.2010, 14:02   #2  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
я обычно в методах формы пишу метод, что то типа activeButton. В этом методе пишу что то типа:
X++:
MymenuItemButton.Enabled(DataSource.RecId != 0);
т.е. все управление нужными кнопками пишу в нем.
далее в методе active нужного dataSource вызываю этот метод.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 17.12.2010, 14:25   #3  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от lev Посмотреть сообщение
далее в методе active нужного dataSource вызываю этот метод.
Может быть я конечно что-то делаю не так, но у меня не происходит события active для пустого datasource . Версия AX2009
Старый 17.12.2010, 14:27   #4  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,732 / 406 (17) +++++++
Регистрация: 23.03.2006
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Может быть я конечно что-то делаю не так, но у меня не происходит события active для пустого datasource . Версия AX2009
для пустого не вызывается active()
Старый 17.12.2010, 14:03   #5  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,732 / 406 (17) +++++++
Регистрация: 23.03.2006
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Как проще всего заблокировать menuItemButton если запись в соответствующем DataSource не выбрана (DataSource пуст либо фильтром скрыты все записи)? Почему такое поведение не предусмотренно по умолчанию?
не предусмотренно по умолчанию т.к. в этом нет смысла. проверяйте наличие курсора непосредственно внутри вызываемого класса или формы

Последний раз редактировалось ice; 17.12.2010 в 14:28.
Старый 17.12.2010, 15:13   #6  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от ice Посмотреть сообщение
не предусмотренно по умолчанию т.к. в этом нет смысла. проверяйте наличие курсора непосредственно внутри вызываемого класса или формы
изначально, этот метод вызывается в init(). затем в active() главного дата сорса, к которому приджойнены остальные, и затем в active() остальных дата сорсов. и все. все нормально работает
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 17.12.2010, 15:25   #7  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от lev Посмотреть сообщение
изначально, этот метод вызывается в init(). затем в active() главного дата сорса, к которому приджойнены остальные, и затем в active() остальных дата сорсов. и все. все нормально работает
А если удалить из грида единственную запись или наложить такой фильтр, условию которого не удовлетворит ни одна из записей и грид опустеет, тогда также вызовется activeButton?
Старый 17.12.2010, 15:38   #8  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
А если удалить из грида единственную запись или наложить такой фильтр, условию которого не удовлетворит ни одна из записей и грид опустеет, тогда также вызовется activeButton?
При удалении не помню (скорее всего нет), после фильтра не вызовется...
но тут уже подстраховывает проверка в самой функции
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 17.12.2010, 14:48   #9  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Решил в событии leaveRecord() датасурса всегда дизейблить кнопку, а в active() разблокировать.
Да и ещё по умолчанию в самом дизайнере, либо в ините формы, заблокировать кнопку, на случай если сразу после открыти формы datasource уже пуст.

Исправление: не leaveRecord а просто leave(). При потери гридом фокуса ввода событие leave не происходит, в отличии от leaveRecord.

Последний раз редактировалось S.Kuskov; 17.12.2010 в 15:08.
Старый 17.12.2010, 15:01   #10  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,732 / 406 (17) +++++++
Регистрация: 23.03.2006
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Решил в событии leaveRecord() датасурса всегда дизейблить кнопку, а в active() разблокировать.
Да и ещё по умолчанию в самом дизайнере, либо в ините формы, заблокировать кнопку, на случай если сразу после открыти формы datasource уже пуст.
и так на каждой форме, куда добавите кнопку?
Старый 17.12.2010, 15:17   #11  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от ice Посмотреть сообщение
и так на каждой форме, куда добавите кнопку?
Только на тех, в которых есть требование её скрывать . У меня не было задачи исключить проверки в коде на пустой курсор, у меня была задача отобразить недоступную кнопку в случае, когда нажатие на неё некоректно.
Старый 17.12.2010, 15:31   #12  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,732 / 406 (17) +++++++
Регистрация: 23.03.2006
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Только на тех, в которых есть требование её скрывать . У меня не было задачи исключить проверки в коде на пустой курсор, у меня была задача отобразить недоступную кнопку в случае, когда нажатие на неё некоректно.
можно было разместить кнопку в выпадающем меню, и блокировать кнопку при нажатии на кнопку меню. а проверку в вызываемом классе все равно придется делать, тк если его вызывут из кода, то он некорректно отработает
За это сообщение автора поблагодарили: S.Kuskov (1).
Старый 17.12.2010, 15:33   #13  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от ice Посмотреть сообщение
можно было разместить кнопку в выпадающем меню, и блокировать кнопку при нажатии на кнопку меню. а проверку в вызываемом классе все равно придется делать, тк если его вызывут из кода, то он некорректно отработает
про выпадающее меня согласен.
Но тема не про это, а про отдельный menuItemButton.
И иногда кнопки должны быть просто на форме, без всяких MenuButton.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
За это сообщение автора поблагодарили: S.Kuskov (1).
Старый 26.12.2010, 19:02   #14  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Проверки в коде - это хорошо, это правильно, без них не обойтись, это даже не обсуждается. Ещё раз процетирую себя
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
У меня не было задачи исключить проверки в коде на пустой курсор, у меня была задача отобразить недоступную кнопку в случае, когда нажатие на неё некоректно.
Я думаю, мы бы здесь не спорили стоит ли блокировать кнопки или нет, если бы данная возможность была бы предусмотрена ядром системы, и для получения требуемого эфекта не нужно было бы перекрывать кучу методв или добавлять фиктивные контролы.

Вопрос, почему в системе этого не предусмотрено? Много ли смысла в передаче пустого курсор из формы (нормальной аксаптовской формы) в код? Т.е. создавая menuItemButton и связывая его с конкретным источником данных, разве мы не подразумеваем использование этой кнопки только в контексте какой-то (одной или нескольких в случае мультиселекта) записи?

P.S.: Cам я несколько раз использовал возможность передачи пустого курсора в различных целях. Например, для получения ссылки на временую таблицу (в результате обработки в неё добавлялись записи), либо для доступа через полученный курсор к связанному с ним источнику данных (в этом случае вообще было не важно есть ли в курсоре данные или нет). Но не думаю что, использовать для этого args.record() оправдано, в таких случаях вполне можно обойтись и без него. И честно говоря в первый раз был удивлён когда данная комбинация сработала. Не было это... интуитивно понятным что ли.
Старый 26.12.2010, 19:21   #15  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,320 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Вопрос, почему в системе этого не предусмотрено? Много ли смысла в передаче пустого курсор из формы (нормальной аксаптовской формы) в код? Т.е. создавая menuItemButton и связывая его с конкретным источником данных, разве мы не подразумеваем использование этой кнопки только в контексте какой-то (одной или нескольких в случае мультиселекта) записи?
Ядро ж как и приложение - писали люди. Наверняка воспользовались принципом 80% / 20%. Или что-то еще сыграло - сие науке неизвестно. Но МС, купив АХ явно не стал себе ставить задачу по устранению данного неудобства в качестве приоритетной
__________________
Возможно сделать все. Вопрос времени
Старый 26.12.2010, 20:17   #16  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Много ли смысла в передаче пустого курсор из формы (нормальной аксаптовской формы) в код? Т.е. создавая menuItemButton и связывая его с конкретным источником данных, разве мы не подразумеваем использование этой кнопки только в контексте какой-то (одной или нескольких в случае мультиселекта) записи?
Во-первых, формы, вызываемые через пункты меню, могут использоваться не только для обработки уже имеющихся записей, но и для создания новых. Во-вторых, за счет ограничения доступности кнопки в зависимости от наличия записи нельзя гарантировать, что форма, вызываемая по кнопке, не окажется в ситуации, когда соответствующей записи для обработки нет: если вызываемая форма использует dynalink, то после ее открытия можно изменить запрос на вызывающей форме таким образом, чтобы не выбралось ни одной записи, - в результате запись, переданная вызываемой форме, пропадет. Опять же, если вызываемая форма использует dynalink, то такая ситуация в общем случае ничем не будет отличаться от ситуации, когда ей изначально не была передана запись.
Старый 17.12.2010, 15:40   #17  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
кстати, можно попробовать добавить на active() формы вызов этого метода. по идее active() формы должен вызываться всегда когда форма обновляется (не уверен, надо проверять), тогда вообще никаких проблем. и не надо в дата сорсах ничего писать
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 17.12.2010, 16:13   #18  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Проверил active() формы - работает только при активации окна, а не при любом его обновлении (оно и правильно). Здесь скорее нужно ловить манипуляции с источником данных, прекрыть и executeQuery() и delete(), но это не спортивно . Вот было бы прекрасно если бы такое поведение кнопки регулировалось каким-нибудь стандартным свойством. Мне кажется в этом будет смысл. На мой взгляд, текущее положение вещей создаёт какую-никакую но всё-таки потенциальная угрозу ошибки, вдруг в каком-нибудь месте системы нет соответствующей проверки в коде.
Старый 24.12.2010, 09:57   #19  
titov is offline
titov
Участник
 
73 / 87 (3) ++++
Регистрация: 23.12.2005
Адрес: Казань
Есть метод, который вызывается всегда - display - можно этим воспользоваться

Создать контрол, к нему дисплейный метод, возращающий recid текущей записи, а также модифицирующий блокирование кнопки, плюс вывод label = false и размеры контрола = 0. "Лишний, технический" контрол практически не изменяет дизайн.

ниже проект

SharedProject_FormMenuItemButton.xpo
За это сообщение автора поблагодарили: S.Kuskov (2).
Старый 24.12.2010, 10:29   #20  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Как проще всего заблокировать menuItemButton если запись в соответствующем DataSource не выбрана (DataSource пуст либо фильтром скрыты все записи)? Почему такое поведение не предусмотренно по умолчанию?
Потому что проверка наличия буфера и его валидности традиционно выполняется в main или в конструкторе класса, вызываемого menuItemButton-ом
__________________
-ТСЯ или -ТЬСЯ ?
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Невозможно создать запись Poleax DAX: Программирование 6 10.08.2010 16:27
Не корректно сохраняет запись в inventTable Starling DAX: Программирование 8 31.03.2008 15:30
Очень просто: создать новую запись в таблице Hobo DAX: Программирование 20 11.07.2006 13:02
Ошибка при импорте демоданных (Axapta 3.0 CIS SP1) KocDm DAX: Администрирование 2 11.08.2005 12:04
Исчезает запись в плане счетов zarik DAX: Прочие вопросы 6 03.05.2005 10:32

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

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

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