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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 17.12.2010, 13:56   #1  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (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:03   #3  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,689 / 405 (17) +++++++
Регистрация: 23.03.2006
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Как проще всего заблокировать menuItemButton если запись в соответствующем DataSource не выбрана (DataSource пуст либо фильтром скрыты все записи)? Почему такое поведение не предусмотренно по умолчанию?
не предусмотренно по умолчанию т.к. в этом нет смысла. проверяйте наличие курсора непосредственно внутри вызываемого класса или формы

Последний раз редактировалось ice; 17.12.2010 в 14:28.
Старый 17.12.2010, 14:25   #4  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от lev Посмотреть сообщение
далее в методе active нужного dataSource вызываю этот метод.
Может быть я конечно что-то делаю не так, но у меня не происходит события active для пустого datasource . Версия AX2009
Старый 17.12.2010, 14:27   #5  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,689 / 405 (17) +++++++
Регистрация: 23.03.2006
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Может быть я конечно что-то делаю не так, но у меня не происходит события active для пустого datasource . Версия AX2009
для пустого не вызывается active()
Старый 17.12.2010, 14:48   #6  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Решил в событии leaveRecord() датасурса всегда дизейблить кнопку, а в active() разблокировать.
Да и ещё по умолчанию в самом дизайнере, либо в ините формы, заблокировать кнопку, на случай если сразу после открыти формы datasource уже пуст.

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

Последний раз редактировалось S.Kuskov; 17.12.2010 в 15:08.
Старый 17.12.2010, 15:01   #7  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,689 / 405 (17) +++++++
Регистрация: 23.03.2006
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Решил в событии leaveRecord() датасурса всегда дизейблить кнопку, а в active() разблокировать.
Да и ещё по умолчанию в самом дизайнере, либо в ините формы, заблокировать кнопку, на случай если сразу после открыти формы datasource уже пуст.
и так на каждой форме, куда добавите кнопку?
Старый 17.12.2010, 15:13   #8  
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:17   #9  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от ice Посмотреть сообщение
и так на каждой форме, куда добавите кнопку?
Только на тех, в которых есть требование её скрывать . У меня не было задачи исключить проверки в коде на пустой курсор, у меня была задача отобразить недоступную кнопку в случае, когда нажатие на неё некоректно.
Старый 17.12.2010, 15:25   #10  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от lev Посмотреть сообщение
изначально, этот метод вызывается в init(). затем в active() главного дата сорса, к которому приджойнены остальные, и затем в active() остальных дата сорсов. и все. все нормально работает
А если удалить из грида единственную запись или наложить такой фильтр, условию которого не удовлетворит ни одна из записей и грид опустеет, тогда также вызовется activeButton?
Старый 17.12.2010, 15:31   #11  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,689 / 405 (17) +++++++
Регистрация: 23.03.2006
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Только на тех, в которых есть требование её скрывать . У меня не было задачи исключить проверки в коде на пустой курсор, у меня была задача отобразить недоступную кнопку в случае, когда нажатие на неё некоректно.
можно было разместить кнопку в выпадающем меню, и блокировать кнопку при нажатии на кнопку меню. а проверку в вызываемом классе все равно придется делать, тк если его вызывут из кода, то он некорректно отработает
За это сообщение автора поблагодарили: S.Kuskov (1).
Старый 17.12.2010, 15:33   #12  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от ice Посмотреть сообщение
можно было разместить кнопку в выпадающем меню, и блокировать кнопку при нажатии на кнопку меню. а проверку в вызываемом классе все равно придется делать, тк если его вызывут из кода, то он некорректно отработает
про выпадающее меня согласен.
Но тема не про это, а про отдельный menuItemButton.
И иногда кнопки должны быть просто на форме, без всяких MenuButton.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
За это сообщение автора поблагодарили: S.Kuskov (1).
Старый 17.12.2010, 15:35   #13  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от lev Посмотреть сообщение
про выпадающее меня согласен.
Но тема не про это, а про отдельный menuItemButton.
И иногда кнопки должны быть просто на форме, без всяких MenuButton.
Сейчас у меня именно такой случай
Старый 17.12.2010, 15:38   #14  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
А если удалить из грида единственную запись или наложить такой фильтр, условию которого не удовлетворит ни одна из записей и грид опустеет, тогда также вызовется activeButton?
При удалении не помню (скорее всего нет), после фильтра не вызовется...
но тут уже подстраховывает проверка в самой функции
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 17.12.2010, 15:40   #15  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
кстати, можно попробовать добавить на active() формы вызов этого метода. по идее active() формы должен вызываться всегда когда форма обновляется (не уверен, надо проверять), тогда вообще никаких проблем. и не надо в дата сорсах ничего писать
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 17.12.2010, 16:13   #16  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Проверил active() формы - работает только при активации окна, а не при любом его обновлении (оно и правильно). Здесь скорее нужно ловить манипуляции с источником данных, прекрыть и executeQuery() и delete(), но это не спортивно . Вот было бы прекрасно если бы такое поведение кнопки регулировалось каким-нибудь стандартным свойством. Мне кажется в этом будет смысл. На мой взгляд, текущее положение вещей создаёт какую-никакую но всё-таки потенциальная угрозу ошибки, вдруг в каком-нибудь месте системы нет соответствующей проверки в коде.
Старый 24.12.2010, 09:57   #17  
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   #18  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Как проще всего заблокировать menuItemButton если запись в соответствующем DataSource не выбрана (DataSource пуст либо фильтром скрыты все записи)? Почему такое поведение не предусмотренно по умолчанию?
Потому что проверка наличия буфера и его валидности традиционно выполняется в main или в конструкторе класса, вызываемого menuItemButton-ом
__________________
-ТСЯ или -ТЬСЯ ?
Старый 24.12.2010, 11:02   #19  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Vadik Посмотреть сообщение
Потому что проверка наличия буфера и его валидности традиционно выполняется в main или в конструкторе класса, вызываемого menuItemButton-ом
Про проверки в коде согласен. Но
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
У меня не было задачи исключить проверки в коде на пустой курсор, у меня была задача отобразить недоступную кнопку в случае, когда нажатие на неё некоректно.

Цитата:
Сообщение от titov Посмотреть сообщение
Есть метод, который вызывается всегда - display - можно этим воспользоваться
titov, спасибо. Оно работает!
Старый 24.12.2010, 11:31   #20  
Кирилл
Гость
 
n/a
Лишние контролы как-то уж совсем круто.
Я в подобных случаях запрещал отдельно лежащую на форме кнопку в executeQuery датасорса, а в active разрешал.
Если пользователь наложил такой фильтр что нет записей, то executeQuery сработает, а active нет.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Невозможно создать запись 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, время: 20:43.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.