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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.07.2012, 10:06   #1  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2494 (89) +++++++++
Регистрация: 20.08.2005
А о какой версии Аксаты идет речь?

Помнится, при попытке передать серверную временную таблицу на клиентский курсор с помощью вызова setTmpData() в трешке, валилась клиентская сессия.

Вообще, setTmpData() ничего не копирует, а устанавливает указатель на тотже временный файл, что и у передаваемого аргумента. При этом табличная переменная, вызывающая метод, так же оказывается на той стороне, что и аргумент.

При этом есть большой ньюанс.
Если табличная переменная находится на противоположной стороне от агргумента, в табличной переменной аргумента не было вставлено данных и в момент вызова функции счетчик ссылок аргумента равен 1, то вызывающая табличная перенная не поменяет своего положения, но файл временной таблицы будет пересоздан.
X++:
server class MyTable MyClass // Экземпляр класса будет создан на сервере
{
    MyTable myTable; 
}
public MyTable MyClass.getMyTableTmp()
{
    ;

    myTable.setTmp(); //табличная переменная создана на сервере
    //Здесь не важно заполнение. Клиентский курсор всегда переезжает на сервер
    return myTable;    
}
static server MyTable MyClass::getMyTableTmpStatic()
{
    MyTable myTable;
    ;

    myTable.setTmp(); //табличная переменная создана на сервере
    //Не заполняем myTable, если будет вставка, то клиентский курсор переедет на сервер
    return myTable;    
}
static client void processMyTable()
{
    MyTable myTable;
    MyClass myClass = new MyClass();
    ;

    myTable.setTmp(); //Таблиная переменная создана на клиенте
    myTable.setTmpData(MyClass::getMyTableTmpStatic()); //табличная переменная указывает на клиентский временный файл

    myTable = null;
    myTable.setTmp(); //Таблиная переменная создана на клиенте
    myTable.setTmpData(myClass.getMyTableTmp()); // табличная переменная будет указывать на серверный временный файл, копирования на клиент не будет
}
Последнее утверждение верно для DAX2009RU7 и выше.
Для более ранних версий, скорее всего, так же верно, но я не проверял

Замечу еще, что setTmpData() не сбрасывае и не устанавливает данные в самой табличной переменной. Т.е. если до вызова функции установить значения каких-либо полей, то они останутся уставновленными и после вызова функции. Но в файле временной таблицы этих данных не окажется (если не были вставлены в передаваемом курсоре, естественно) - select их не вернет
__________________
Axapta v.3.0 sp5 kr2

Последний раз редактировалось AndyD; 25.07.2012 в 10:10.
За это сообщение автора поблагодарили: sukhanchik (2), lev (5), Eldar9x (3).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
передача бинарных файлов с клиента на AOS и обратно corvax DAX: Программирование 9 01.04.2014 15:05
Join временной таблицы в запросе yahenz DAX: Программирование 12 24.04.2012 14:59
Display метод временной таблицы выполняется в компании DAT S.Kuskov DAX: Программирование 4 15.04.2011 20:11
Передача временной таблицы в batch DTD DAX: Программирование 10 30.04.2008 13:55
Передача временной таблицы 6apcyk DAX: Программирование 11 09.08.2006 17:32
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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