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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 07.07.2004, 16:04   #1  
TravellerInTime is offline
TravellerInTime
Участник
Аватар для TravellerInTime
 
130 / 36 (2) +++
Регистрация: 14.07.2003
Адрес: Россия, Тула
Что надо сделать, чтобы пердать Variant Array как параметр в метод COM обекта?
Старый 07.07.2004, 16:12   #2  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Передавать - не передавал, а получал через COMVariant.safeArray()
__________________
-ТСЯ или -ТЬСЯ ?
Старый 07.07.2004, 16:14   #3  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
KERNDOC://Classes/COMVariant/safeArray

а тут пример с передачей
__________________
-ТСЯ или -ТЬСЯ ?
Старый 08.07.2004, 08:14   #4  
TravellerInTime is offline
TravellerInTime
Участник
Аватар для TravellerInTime
 
130 / 36 (2) +++
Регистрация: 14.07.2003
Адрес: Россия, Тула
Цитата:
Сообщение от Vadik
KERNDOC://Classes/COMVariant/safeArray
а тут пример с передачей

Это первое, что я сделал - но это не работает.

<div class='XPPtop'>X++</div><div class='XPP'>
COMVariant a = [color=:blue]new[/color] ComVariant(COMVariantInOut::IN, COMVariantType::VT_SAFEARRAY);
Array arr;

arr = [color=:blue]new[/color] Array(Types::Integer);
arr.value(1, 0);
arr.value(2, 0);
a.safeArray(arr, COMVariantType::VT_VARIANT);
cell = cellSet.Item(a);</div>

Имеем:
[id(00000000), propget, vararg, helpcontext(0x00315634)]
Cell* Item([in] SAFEARRAY(VARIANT)* idx);

Обрати внимание, что idx передается по ссылке - может в этом проблема?
Старый 08.07.2004, 11:21   #5  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
А можно привести кусок X++ кода целиком?
Иначе гадать я могу, а проверять - нет
__________________
-ТСЯ или -ТЬСЯ ?
Старый 08.07.2004, 12:35   #6  
TravellerInTime is offline
TravellerInTime
Участник
Аватар для TravellerInTime
 
130 / 36 (2) +++
Регистрация: 14.07.2003
Адрес: Россия, Тула
Цитата:
Сообщение от Vadik
А можно привести кусок X++ кода целиком?
Иначе гадать я могу, а проверять - нет
Кусок кода привести я, конечно, могу, но работать он у вас не будет.
Класс Cellset - это результат запроса к кубу OLAP, а самого куба у вас, естественно, нет.

Насколько я понимаю, вы уже работали с какими-то COM объектами в Аксапте. Может среди этих объектов найдется объект, у которого есть метод, принимающий Variant Array в качестве входного параметра, тогда вы смело можете на нем проверять свои идеи.
Старый 08.07.2004, 12:46   #7  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от TravellerInTime
Кусок кода привести я, конечно, могу, но работать он у вас не будет.
Класс Cellset - это результат запроса к кубу OLAP, а самого куба у вас, естественно, нет.

Насколько я понимаю, вы уже работали с какими-то COM объектами в Аксапте. Может среди этих объектов найдется объект, у которого есть метод, принимающий Variant Array в качестве входного параметра, тогда вы смело можете на нем проверять свои идеи.
Ну, кубов-то у меня есть немного. Хотя, вдруг там такой специфичный куб

Входных параметров COMVariantType::VT_SAFEARRAY не использовал.

Проверить хочется, но не сейчас, попозже

Ну и если решение отыщется - опубликуйте, если не жалко
__________________
-ТСЯ или -ТЬСЯ ?
Старый 08.07.2004, 13:13   #8  
TravellerInTime is offline
TravellerInTime
Участник
Аватар для TravellerInTime
 
130 / 36 (2) +++
Регистрация: 14.07.2003
Адрес: Россия, Тула
Написал Job, который использует демобазу в OLAPе.
Соответственно в connectionString имя сервера замениь надо.

<div class='XPPtop'>X++</div><div class='XPP'>
#define.ADOMDCellset([color=:red]"ADOMD.Cellset"[/color])
#define.ADODBConnection([color=:red]"ADODB.Connection"[/color])
[color=:blue]static[/color] [color=:blue]void[/color] Job1(Args _args)
{
   COM connection = [color=:blue]new[/color] COM(#ADODBConnection);
   COM cellSet = [color=:blue]new[/color] COM(#ADOMDCellset);
   COM axes, axis0, axis1;
   COM positions0, positions1, position0, position1;
   COM members, member;
   COM cell;
   COMVariant a = [color=:blue]new[/color] ComVariant(COMVariantInOut::IN, COMVariantType::VT_SAFEARRAY);
   Array arr;
   [color=:blue]str[/color] connectionString = [color=:red]"Provider=msolap; Datasource=SQLTEST; Initial Catalog=FoodMart 2000"[/color];
   [color=:blue]str[/color] selectString =
[color=:red]"select\r\n"[/color]+
[color=:red]"    {[Measures].[Unit Sales]} on columns,\r\n"[/color]+
[color=:red]"    order(except([Promotion Media].[Media Type].members,{[Promotion Media].[Media Type].[No Media]}),[Measures].[Unit Sales],DESC) on rows\r\n"[/color]+
[color=:red]"from Sales"[/color];
   [color=:blue]int[/color] i0, i1;
   [color=:blue]str[/color] printStr;
  ;

   connection.Open(connectionString);
   cellSet.Open(selectString, connection);
   axes = cellSet.Axes();
   axis0 = axes.Item(0);
   axis1 = axes.Item(1);
   positions0 = axis0.Positions();
   positions1 = axis1.Positions();

   [color=:blue]for[/color] (i1 = 0; i1 < positions1.[color=:blue]Count[/color](); i1++)
   {
       position1 = positions1.Item(i1);
       members = position1.Members();
       member = members.Item(0);
       printStr = member.Caption();

       [color=:blue]for[/color] (i0 = 0; i0 < positions0.[color=:blue]Count[/color](); i0++)
       {
           arr = [color=:blue]new[/color] Array(Types::Integer);
           arr.value(1, i0);
           arr.value(2, i1);
           a.safeArray(arr, COMVariantType::VT_VARIANT);
           cell = cellSet.Item(a);
           printStr += [color=:red]" "[/color]+cell.FormattedValue();
       }
       [color=:blue]print[/color] printStr;
   }
   cellSet.Close();
   connection.Close();
   [color=:blue]pause[/color];
}</div>
 

Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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