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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.07.2019, 12:02   #1  
Perc is offline
Perc
Участник
 
194 / 57 (2) ++++
Регистрация: 05.03.2005
Через столько лет пришлось озадачится, что же все таки делает метод setCurrent. И правильного ответа здесь не нашел. Но выяснил.
setCurrent пихает данные из текущего курсора FormDataSource в кэш данных FormDataSource. Пример для понимания. cliked на форме с датасорсом table1:
X++:
void clicked()
{
    Table1   t1;
    ;
    super();
    info(strFmt("%1", table1.field1));
    t1.data(table1);
    t1.field1 = "новое значение";
    table1.data(t1);
    table1_DS.setCurrent();
    info(strFmt("%1", table1.field1));
}
Замысловатое изменение field1 через data() делалось для того чтобы не сработал write на датасорсе. Метод table1.data(t1) не провоцирует форму автоматически сохранять запись.
И получается что этот код не меняет данных в БД, но форма будет отображать "новое значение" в поле "field1" на всех записях на которых вызовете clicked(). Пока не произойдет вызов executeQuery() или reread().
А без setCurrent() форма не хранит "новое значение" и сбрасывает, например, при переходе к другой записи.
Проверял на DAX2012.
Старый 23.07.2019, 16:48   #2  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,449 / 1792 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Что изменится в вашем примере если закомментировать строку с table1_DS.setCurrent(); ?

Чем вас не устроил ответ 2004 года про активный датасурс?
Старый 24.07.2019, 04:11   #3  
Perc is offline
Perc
Участник
 
194 / 57 (2) ++++
Регистрация: 05.03.2005
Издеваетесь). Ответ 2004 не устроил тем, что он не раскрывает смысла метода. Возможно он также делает и датасорс активным в некоторых случаях, с этим не разбирался, но это точно не его основное назначение.
Цитата:
Что изменится в вашем примере если закомментировать строку с table1_DS.setCurrent(); ?
Ну ответ выше). Без setCurrent - форма не сохраняет новое значение. Не таблица, а именно форма.У меня новое значение сбрасывается если я передвигаюсь на новую запись.
Надо попробовать и становится понятно)
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как вызвать метод для поля в FormDataSource? Maxim Gorbunov DAX: Программирование 3 08.05.2007 11:28
FormDataSource sassas DAX: Функционал 13 05.08.2004 17:25
Различные типы связей (LinkType) для FormDataSource Maxim Gorbunov DAX: База знаний и проекты 1 16.05.2004 13:20
Гибрид FormTableControl и FormDataSource Андре DAX: Программирование 27 01.10.2003 09:58
Собственный SQL запрос в FormDataSource Alexey DAX: База знаний и проекты 0 20.12.2001 00:35
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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