29.01.2016, 16:15 | #1 |
Участник
|
передать буфер врем таблицы на клиент через контракт
Controller класс вызывает серверный класс, заполняющий TempDB таблицу
Серверный класс возвращает курсор таблицы через contract Controller из operationReturnValue() получает контракт и ,соответственно, буфер таблицы Но: В результате на клиенте мне нужно перебрать записи таблицы, но, но когда делаю select, то получаю 0 записей, т.е он не ссылается, видимо, уже на таблицу саму, а просто буфер передается(заполненные поля переданного буфера я вижу в дебаггере) Как корректно передать указатель на врем таблицу? (или это принципиально невозможно, тк темп таблица в отдельном потоке создается и удаляется при завершении?) Последний раз редактировалось kitty; 29.01.2016 в 16:22. |
|
29.01.2016, 16:54 | #2 |
Гость
|
Судя по всяким SrsTmpTblMarshaller систему не
Либо можно использовать указанный класс. |
|
29.01.2016, 17:36 | #3 |
Участник
|
linkPhysicalTableInstance?
|
|
29.01.2016, 17:46 | #4 |
Banned
|
Передавать указатель как параметр
Table clientDeclared; :opulateTempDbOnServer(clientDeclared); |
|
|
За это сообщение автора поблагодарили: S.Kuskov (2). |
29.01.2016, 18:35 | #5 |
Участник
|
|
|
29.01.2016, 21:57 | #6 |
Участник
|
решение от ax_mct должно сработать https://community.dynamics.com/ax/f/33/t/127730
|
|
31.01.2016, 22:57 | #7 |
Читатель
|
Можете передавать имя таблицы в БД. Получить его можно через getPhysicalTableName на сервере, и указать на клиенте через useExistingTempDBTable. Для того, чтобы AOS не удалил временную таблицу при потере курсора на сервере, используйте takeOwnershipOfTempDBTable (не забудьте после окончания работы с таблицей вернуть этот параметр, иначе она так и повиснет в tempDb).
Последний раз редактировалось b_nosoff; 31.01.2016 в 22:59. |
|
|
За это сообщение автора поблагодарили: S.Kuskov (2). |
01.02.2016, 15:26 | #8 |
Участник
|
Цитата:
Сообщение от S.Kuskov
решение от ax_mct должно сработать https://community.dynamics.com/ax/f/33/t/127730
Делаю так: Переменная объявлена в классе-контракте и этот атрибут сделан невидимым В контроллере вызывается серверный класс, в нем из переданного контроллером контракта достается эта переменная-буфер и присваивается локальной переменной. (linkPhysTableInstance) При завершении работы серверного метода, он возвращает контракт В методе afterOperation контроллера вынимается из возвращенного контракта буфер, но в нем 0 записей... |
|
01.02.2016, 15:34 | #9 |
Участник
|
У таблиц типа tempDB можно с помощью getPhysicalTableName(), как указывалось выше, получить название физической таблицы в базе. Попробуйте проследить, сохраняется ли у вас название физической таблицы по мере передачи данных через контракт.
|
|