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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 08.05.2019, 10:17   #1  
mikki_messer is offline
mikki_messer
Участник
 
91 / 20 (1) +++
Регистрация: 20.04.2010
Адрес: Ростов-на-Дону
.setTmpData не работает
Здравствуйте.

Столкнулся со странной ситуацией в Ax 2012 R3. Есть класс, наследник RunBase, с диалогом-формой. Класс выполняется на сервере. В конструкторе класса заполняется временная таблица InMemory с определёнными данными, передаётся в форму, пользователь может их откорректировать и по нажатию кнопки "ОК" передать в класс времянку с изменённными данными.

Делаю всё, как обычно, в классе делаю метод

X++:
public void setTmpTable1(TmpTable1 _tmpTable1)
{
    tmpTable1.setTmpData(_tmpTable1);
}
и не получаю данные в классе: в отладчике видно, что _tmpTable1 данные есть, а в tmpTable - нет.

Но если написать так:

X++:
public void setTmpTable1(TmpTable1 _tmpTable1)
{
    tmpTable1 = _tmpTable1;
}
все прекрасно работает, но меня терзают смутные сомнения в правильности такого подхода

Подскажите, пожалуйста, почему .setTmpData может не работать, а конструкция с присвоением - работает. А также, почему напрямую присваивать может быть плохо.

Спасибо!
Старый 08.05.2019, 10:53   #2  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,308 / 3540 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Первый вариант правильный, а отсутствие видимости данных означает, что Вы стоите не на той записи. Т.е. после setTmpData нужно будет еще select-ом спозиционироваться на нужную запись
__________________
Возможно сделать все. Вопрос времени
За это сообщение автора поблагодарили: mikki_messer (1).
Старый 13.05.2019, 17:25   #3  
mikki_messer is offline
mikki_messer
Участник
 
91 / 20 (1) +++
Регистрация: 20.04.2010
Адрес: Ростов-на-Дону
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
Первый вариант правильный, а отсутствие видимости данных означает, что Вы стоите не на той записи. Т.е. после setTmpData нужно будет еще select-ом спозиционироваться на нужную запись
Именно так, добавил в метод строчку и всё заработало:

X++:
public void setTmpTable1(TmpTable1 _tmpTable1)
{
    tmpTable1.setTmpData(_tmpTable1);
    select firstOnly forUpdate tmpTable1;       
}
Большое спасибо!

Последний раз редактировалось mikki_messer; 13.05.2019 в 17:25. Причина: Добавил форматирование кода
Старый 08.05.2019, 11:46   #4  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от mikki_messer Посмотреть сообщение
Подскажите, пожалуйста, почему .setTmpData может не работать, а конструкция с присвоением - работает. А также, почему напрямую присваивать может быть плохо.
Спасибо!
По этому поводу (затрагиваются оба вопроса) неплохое обсуждение в теме передача временной таблицы с клиента на сервер
За это сообщение автора поблагодарили: mikki_messer (1).
Старый 08.05.2019, 12:37   #5  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
> А также, почему напрямую присваивать может быть плохо

Табличная переменная для временной таблицы в аксапте это и единичная запись и итератор (положение текущей записи) и все записи сразу.

Если вы сделаете setTmpData то у вас будет отдельный курсор на те же данные - при навигации по нему при помощи next или выборках не будет изменяться исходный итератор и поля записи.

Если просто присвоите переменную, то это будет тот же самый интератор и та же самая запись (соответственно, при любых манипуляциях его положение будет сбиваться).
За это сообщение автора поблагодарили: mikki_messer (1).
Теги
ax 2012 r3

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Не работает SecurityUtil::sysAdminMode() Pandasama DAX: Программирование 1 05.09.2018 11:38
select crossCompany и Views - работает только для админов? DTD DAX: Программирование 11 26.03.2014 09:08
JOIN программно на форме не работает rohlenko DAX: Программирование 2 31.03.2005 15:41
Дополнительные возможности временных таблиц: метод setTmpData vitk DAX: База знаний и проекты 1 19.06.2002 17:53
HB_Tutorial_setTmpData - пример использования метода setTmpData vitk DAX: База знаний и проекты 0 10.12.2001 15:26

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

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

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