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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.04.2011, 20:17   #1  
Geo is offline
Geo
Участник
Аватар для Geo
 
258 / 47 (2) +++
Регистрация: 04.04.2008
Подобная задача, только проще: как обновить DataSource из самой формы

Имею связанные по InnerJoin датасорсы и общий грид на них. По обычной Button вызывается (в Clicked()) обработка, меняющая значения в нескольких записях в подчиненной таблице. Хочу увидеть их обновленными в гриде.

Если делаю:
X++:
_ds.reread();
_ds.refresh();
, то обновляется только текущая запись. (Здесь и далее, х_ds - это главный датасорс.)

Если добавляю к этому
X++:
_ds.refreshEx();
(как работало на другой форме в практически аналогичном случае) - всё равно только текущая обновляется.

Если делаю
X++:
_ds.executeQuery();
, слетает фильтр пользователя, что нежелательно.

Если делаю, как написано в это теме:
X++:
anytype currentCursor;

currentCursor = _ds.cursor();

// обработка...

_ds.research();
_ds.findRecord(currentCursor);
, то курсор не остается на записи, а ускакивает таки на первую.

С подчиненным датасорсом тоже всё это пробовал - вообще ничего не обновляется.


Никак не удается обновить записи и при этом остаться на текущей
Старый 12.04.2011, 09:25   #2  
Peter Savintsev is offline
Peter Savintsev
Участник
 
246 / 119 (4) +++++
Регистрация: 14.12.2001
Какая версия AX? Если 2009, то у метода FormDataSource.research() появился булевый параметр _retainPosition, который позволяет сохранить позицию при обновлении данных формы.

Если версия более ранняя, то вроде так должно сработать:
X++:
Common common;

common.data();

// обработка...

_ds.research();
_ds.findRecord(common);
Как вариант модно вместо findRecord() использовать findValue(), с помощью которого можно найти запись по значению одного поля. В данном случае надо искать по уникальному полю, если оно есть, либо по RecId. Но если индекса по искомому полю нет, а записей много, этот вариант может долго отрабатывать:

X++:
anytype uniqueValue;

uniqueValue = x.UniqueField;

// обработка...

_ds.research();
_ds.findValue(fieldnum(X, UniqueField), SysQuery::value(uniqueValue));

Еще можно использовать element.args().lookupField() и element.args().lookupValue():
X++:
anytype uniqueValue;

uniqueValue = x.UniqueField;

// обработка...

element.args().lookupField(fieldnum(X, UniqueField)); 
element.args().lookupValue(SysQuery::value(uniqueValue));
_ds.research();
За это сообщение автора поблагодарили: Poleax (1), Geo (2), jeky (1).
Старый 12.04.2011, 18:56   #3  
Geo is offline
Geo
Участник
Аватар для Geo
 
258 / 47 (2) +++
Регистрация: 04.04.2008
Цитата:
Сообщение от Peter Savintsev Посмотреть сообщение
...
Спасибо, вариант с _ds.findValue() по сохраненному RecId помог. Работает без задержек.
А разве не все таблицы имеют индекс по RecId?

Версия AX 2009, но вызов _ds.research(true) не приводил к сохранению позиции, курсор всё равно скакал наверх.
Старый 12.04.2011, 19:06   #4  
Geo is offline
Geo
Участник
Аватар для Geo
 
258 / 47 (2) +++
Регистрация: 04.04.2008
Здесь же спрошу, поскольку было в примере.

Есть ли какая-то разница между SysQuery::value() и queryValue() ?
Старый 13.04.2011, 09:28   #5  
Peter Savintsev is offline
Peter Savintsev
Участник
 
246 / 119 (4) +++++
Регистрация: 14.12.2001
Цитата:
Сообщение от Geo Посмотреть сообщение
Здесь же спрошу, поскольку было в примере.

Есть ли какая-то разница между SysQuery::value() и queryValue() ?
Принципиальной разницы нет. queryValue на самом деле вызывает SysQuery::value()

\Classes\Global\queryValue:
X++:
static str queryValue(anytype A)
{
    return SysQuery::value(a);
}
То же самое, кстати, касается практически всех методов Global::query*
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Обновление DS формы из дочерней формы breakpoint DAX: Программирование 3 24.12.2008 15:54
Обновление таблицы в DataSource при ее изменении Андре DAX: База знаний и проекты 7 22.04.2008 13:16
Как получить указатель на отчёт когда пользователь выбрал Печать на принтер в просмотрщике, в форму SysPrintForm? rkorchagin DAX: Программирование 10 17.04.2008 11:59
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38
Как получить доступ к текущей строке в DataSource формы Maxim Gorbunov DAX: База знаний и проекты 0 28.11.2001 13:46
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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