29.11.2016, 01:12 | #1 |
Участник
|
Dax12 форма ListPage: как скрыть/отобразить MenuItemButton без смены фокуса записи в гриде
Dax2012 R3
Добрый вечер, подскажите пожалуйста , с таким вопросом. Есть задача-на форме CustTableListPage нужно : 1. При смене фокуса 1.1 отобразить в ActionPane кнопку менюитем «Включить», скрыть кнопку менюитем «Выключить», если данное булево поле таблицы CustTable имеет значение Выключено, 1.2 отобразить кнопку менюитем «Выключить», скрыть кнопку менюитем «Включить», если данное булево поле табилцы CustTable имеет значение Включено Я смогла сделать отображение одного меню menuItemсButton и скрытие другого меню menuItemсButton при переходе от одной записи к другой в CustTableListPage в зависимости от значения данного булевого поля текущей записи Для этого я в классе CustTableListPageInteraction я добавила метод void VisibleCustSomeBlockButtons() {this.listPage().actionPaneControlVisible(formControlStr(CustTableListPage, SomeBlock_On),CustTable.SomeBlock_On == NoYes::No); this.listPage().actionPaneControlVisible(formControlStr(CustTableListPage, SomeBlock_Off),CustTable.SomeBlock_On == NoYes::Yes);} я вызываю этот метод из метода public void selectionChanged() этого же класса. 2. .Скрытие/отображение menuItemButton без смены фокуса. мне нужно сделать отображение одного menuItemButton и скрытие другого menuItemсButton на ActionPane в listPage (CustTableListPage) не переходя с одной записи на другую, а по выполнению классов ,которые меняют значение данного булевого поля в таблице CustTable.Т.е. нажали кнопку «Включить», запустился экземпляр класса выполнил некое действие , записал значение данного булевого поля в таблице CustTable =включено, и после этого кнопка «Включить» скрылась, отобразилась кнопка «Выключить.» Я думала ,что п.2. будет работать после всего того ,что я сделала для п.1. Но п. 2. не работает. кнопки не перерисовываются .но если я ухожу с данной записи и на нее возвращаюсь, то показывается уже новое,правильное состояние кнопок подскажите пожалуйста, как добиться корректной работы в п.2 |
|
29.11.2016, 08:37 | #2 |
Участник
|
Попробуйте следующие варианты :
1. Св-во AutoRefreshData. 2. Внутри вашей обработки, после выполнения кода обновления использовать *_ds.research(true), *_ds.findValue(...) 3. Посмотрите как работают стандартные кнопки в других формах, если на форме клиентов нет аналогичных доработок - например в форме Заказов, наверняка там после обработки документов меняется доступность кнопок журналов.
__________________
Sergey Nefedov |
|
|
За это сообщение автора поблагодарили: Aquarius (1). |
29.11.2016, 11:11 | #3 |
Участник
|
Добрый день
спасибо ,но: Св-во AutoRefreshData выставлено. не помогает. *_ds.research(true), *_ds.findValue(...) нельзя сделатьв классе CustTableListPageInteraction который работает с формой listPage Не могу пока найти решение. Может кто то что -то еще посоветует. |
|
29.11.2016, 12:50 | #4 |
Программатор
|
|
|
|
За это сообщение автора поблагодарили: Aquarius (1). |
29.11.2016, 13:24 | #5 |
Участник
|
Спасибо за советы,
у меня вроде получилось сделать смену отображения кнопок без смены фокуса записи, просто добавив к моему вышеописанному коду поставление свойств АutoDeclaration =yes у этих "menuItemButton"ов. AutoRefresh=yes был до этого выставлен. Best Practis error указал мне на это. Но сейчас еще буду более детально проверять. А, все-таки, правильно именно в методе public void selectionChanged() класса CustTableListPageInteraction вызывать метод этого же класса с this.listPage().actionPaneControlVisible(formControlStr(CustTableListPage, SomeBlock_On),CustTable.SomeBlock_On == NoYes::No)? Последний раз редактировалось Aquarius; 29.11.2016 в 13:51. |
|
29.11.2016, 13:56 | #6 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: Aquarius (1). |
29.11.2016, 16:06 | #7 |
Участник
|
Все таки не работает.
Столкнулась с тем что переданный в класс курсор таблицы с listpage содержит неправильное значение одного поля.код клиента правильный. как такое может быть: |
|
29.11.2016, 16:30 | #8 |
Участник
|
|
|
29.11.2016, 17:39 | #9 |
Участник
|
Напалм,
БОЛЬШОЕ-БОЛЬШОЕ СПАСИБО! Ваш последний совет вроде помог)) Я в классе сделала отдельный курсор и его инициализировала по коду клиента из курсора,передаваемого в класс. и все заработало, из нового курсора я читаю правильное значение нужного мне поля.. но вот теперь еще вопрос. У меня такие же кнопки на форме custTable, и когда я перехожу из custTablelistPage в форму custTable по Edit,нажимаю кнопку там, у меня меняется состояние отображения кнопок , закрываю форму custTable, попадаю в custTablelistPage,Там отображение не поменялось. как программно обновить новое состояние отображения кнопок custTablelistPage, после выполнения класс не из custTablelistPage а из custTable. Последний раз редактировалось Aquarius; 29.11.2016 в 18:17. |
|
29.11.2016, 19:28 | #10 |
Участник
|
В форме "CustTable" перекрыть метод "close" и вызвать "reread" и "refresh" для датасорса из формы "CustTableListPage" (получается через "element.args().record().dataSource()").
|
|
30.11.2016, 14:36 | #11 |
Участник
|
Спасибо, за последний совет. именно так получилось.custTablelistPage успешно обновляется
public void close() { FormDataSource callerDataSource; int positon; ; If (element.args() && element.args().record()) { callerDataSource = element.args().record().dataSource(); if (callerDataSource) { position =callerDataSource.getPosition(); callerDataSource.research(); callerDataSource.refresh(); callerDataSource.setPosition(position); } } super(); } |
|