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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.09.2008, 19:20   #6  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Если это запрос через COM-объекты, то попробуй принимать значения как тип ComVariant

X++:
ComVariant retVal;
;

retVal = Choose.();

// Если ожидается значение типа int
print retVal.int();
pause;

// Если ожидается значение типа str
print retVal.bStr ();
pause;
Можно сделать анализ типа возвращенного значения через свойство comVariant.variantType() для написания универсальной обработки

Вот выдрал метод по преобразованию типов ComVariant из своего класса на Ax2.5

X++:
// Преобразование полученного значения
anyType getValue(ComVariant _comVariant)
{
//    Com     comValue;
    ;

    switch (_comVariant.variantType())
    {
    case COMVariantType::VT_BOOL :
        return _comVariant.boolean();       // boolean
    case COMVariantType::VT_BSTR :
        return _comVariant.bStr();          // str
    case COMVariantType::VT_UI1 :
        return _comVariant.byte();          // int
    case COMVariantType::VT_I1 :
        return _comVariant.char();          // int
    case COMVariantType::VT_CY :
        return _comVariant.currency();      // real
    case COMVariantType::VT_DATE :
        return _comVariant.date();          // date
    case COMVariantType::VT_DECIMAL :
        return _comVariant.decimal();       // real
    case COMVariantType::VT_R8 :
        return _comVariant.double();        // real
    case COMVariantType::VT_R4 :
        return _comVariant.float();         // real
    case COMVariantType::VT_DISPATCH :
//        return _comVariant.iDispatch();           // дескриптор COM-интерфейса. Число.
        return COM::createFromVariant(_comVariant); // Преобразую в ссылку на объект
    case COMVariantType::VT_I4 :            // int
        return _comVariant.int();
//        return _comVariant.long();          // теоретически, это должно быть VT_I8, но такого значения нет, поэтому VT_I4 читается как int()
    case COMVariantType::VT_UNKNOWN :
        //return _comVariant.iUnknown();                // дескриптор COM-интерфейса. Число.
        return COM::createFromVariant(_comVariant);     // Преобразую в ссылку на объект
    case COMVariantType::VT_ERROR :
        return _comVariant.sCode();         // int
    case COMVariantType::VT_I2 :
        return _comVariant.short();         // int

    case COMVariantType::VT_UI4 :
        return _comVariant.uInt();         // int
        //return _comVariant.uLong();         // теоретически, это должно быть VT_UI8, но такого значения нет, поэтому VT_I4 читается как int()
    case COMVariantType::VT_UI2 :
        return _comVariant.uShort();        // int
    case COMVariantType::VT_VARIANT :
        return _comVariant.variant();       // COMVariant
    case COMVariantType::VT_SAFEARRAY :
        return _comVariant.safeArray();     // array
    default :
        throw error(strFmt("Неизвестны правила обработки типа %1", _comVariant.variantType()));

    }
}
За это сообщение автора поблагодарили: niktata (1).
Теги
интеграция, 1c

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как сделать фильтр по группе пользователей? Zabr DAX: Программирование 12 08.04.2009 11:40
Перебор всех таблиц, имеющих поле определенного типа AKIS-Falcon DAX: Программирование 8 11.02.2005 17:07
Синхронизация таблиц при изменении EDT z_av DAX: Программирование 1 16.12.2004 11:55
Передача нескольких временных таблиц в отчет Pegiy DAX: Программирование 5 03.06.2004 17:44
Связывание нескольких таблиц jan_psn DAX: Программирование 11 18.11.2003 05:23

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

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

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