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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.09.2025, 23:11   #1  
online
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,995 / 3293 (117) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
X++:
public static System.Object getEnumValue(System.Enum  _o)
{
    System.Object                               ret;
    System.Reflection.Assembly                  assembly;
    System.Reflection.ConstructorInfo           constructorInfo;
    System.Type                                 enumType,
                                                enumGenericType,
                                                genericType;
    System.Type[]                               enumTypes;
    System.Object[]                             enumValues;
    str                                         enumTypeStr,
                                                enumValueStr,
                                                assemblyStr;

    if (! CLRInterop::isNull(_o))
    {
        try
        {
            enumValueStr    = _o.ToString();
            enumType        = _o.GetType();
            enumTypeStr     = enumType.ToString();

            assembly        = enumType.get_Assembly(); //определяем .net сборку (по ENUM)
            assemblyStr     = assembly.ToString();
            enumGenericType = assembly.GetType (#OpenXmlGenericEnumValue); //тип DocumentFormat.OpenXml.EnumValue`1
            assembly        = null;

            if (CLRInterop::isNull(enumGenericType))
            {
                enumType = null;
                throw error (strFmt(".net сборка '%1'(ENUM '%2') не содержит дженерик-тип %3", assemblyStr, enumTypeStr, #OpenXmlGenericEnumValue));
            }

            //инициируем массив типов (с единственным элементом = enumType)
            enumTypes = new System.Type[1]();
            enumTypes.SetValue(enumType, 0);
            enumType = null;

            genericType     = enumGenericType.MakeGenericType   (enumTypes); //создаем generic DocumentFormat.OpenXml.EnumValue`1, приведенный к типу enumTypes
            enumGenericType = null;

            if (CLRInterop::isNull(genericType) || ! genericType.get_IsGenericType())
            {
                throw error (strFmt("ENUM '%1' не является дженериком", enumTypeStr));
            }

            constructorInfo = genericType.GetConstructor        (enumTypes); //конструктор (для ENUM generic типа)
            genericType     = null;
            enumTypes       = null;

            //инициируем массив занчений значение ENUM (с единственным элементом= enumValueStr)
            enumValues = new System.Object[1]();
            enumValues.SetValue (CLRInterop::parseClrEnum(enumTypeStr, enumValueStr), 0);

            ret = constructorInfo.Invoke(enumValues); //создаем объект ENUM generic типа (с значением = enumValueStr)

            constructorInfo = null;
            enumValues      = null;
        }
        catch
        {
            error (WMSCOMPrint::getClrErrorMessage());
        }
    }

    return ret;
}
Цитата:
- метод создания дженерика еще немного подрихтовал(+ добавил комментарии)
За это сообщение автора поблагодарили: S.Kuskov (10).
Теги
.net, ado, generic, net

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
emeadaxsupport: When browsing AX 2009 Role Centers, you get an error: An unexpected error has occurred on systems with .NET Framework v4.0 installed Blog bot DAX Blogs 1 28.07.2010 08:24
AX.NET: интеграция .NET-приложений с Аксаптой и (будущие) возможности облачных вычислений gl00mie DAX: Программирование 2 23.04.2010 00:47
jinx: Microsoft Dynamics AX und .NET - Erstellen eines Termins in Outlook Blog bot DAX auf Deutsch 0 03.11.2007 00:33
Inside Dynamics AX 4.0: Working with the .NET Business Connector Blog bot DAX Blogs 0 04.10.2007 05:15
Как при импорте задать значение определенного поля? mvf DAX: Программирование 3 04.05.2005 16:26

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

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

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