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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 21.07.2022, 11:46   #21  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,953 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Не могу детально пояснить. Очень большая загруженность сейчас.
Просто внимательно посмотрите примеры данные по ссылкам.
Там все работает аналогично вызовам методов через SysDictClass / SysDictTable
Старый 16.10.2023, 11:28   #22  
LETTO is offline
LETTO
Участник
 
342 / 59 (2) ++++
Регистрация: 14.07.2022
Цитата:
Сообщение от DesparioN Посмотреть сообщение
Если не сложно, можете раскрыть тему более подробно?

X++:
System.Type                                                     enumValue;
System.Reflection.MethodInfo                          methodInfo;


enumValue = System.Type::GetType("DocumentFormat.OpenXml.EnumValue`1");
methodInfo = enumValue.GetMethod("Value");
А что собственно дальше?

В частности мне надо в DocumentFormat.OpenXml.Spreadsheet.Alignment указать значение для горизонтальных и вертикальных границ.
Коллеги, может у кого есть пример создания типа "DocumentFormat.OpenXml.EnumValue`1" в аксапте. Уже голову сломал.
Вот тут хороший пример:
https://wiki.programstore.ru/primer-...rammy-v-excel/
Но там используется метод OXMLExp::getEnumValue(), а кода нет.

В reflection более менее разбираюсь. Но всё равно не выходит

ЗЫ Ну а если есть готовый код по вставке картинки в XMLExcelReport_RU в XML буду оооочень благодарен.

На С# вот такой простой код:
X++:
            DocumentFormat.OpenXml.EnumValue<DocumentFormat.OpenXml.Drawing.BlipCompressionValues> value;

            value = new DocumentFormat.OpenXml.EnumValue<DocumentFormat.OpenXml.Drawing.BlipCompressionValues>(DocumentFormat.OpenXml.Drawing.BlipCompressionValues.Print);
В аксапте возвращает null (тот же код в C# выдает значение)
X++:
    enumObject = CLRInterop::parseClrEnum('DocumentFormat.OpenXml.Drawing.BlipCompressionValues', 'Print');

    enumType = System.Type::GetType("DocumentFormat.OpenXml.Drawing.BlipCompressionValues, DocumentFormat.OpenXml, Version=2.5.5631.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35");
    enumValueType = System.Type::GetType("DocumentFormat.OpenXml.EnumValue`1, DocumentFormat.OpenXml, Version=2.5.5631.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35");

    typeParams = new System.Type[1]();
    typeParams.SetValue(enumType, 0);

    genericType = enumValueType.MakeGenericType(typeParams);

    Object = System.Activator::CreateInstance(genericType, 
              CLRInterop::parseClrEnum('DocumentFormat.OpenXml.Drawing.BlipCompressionValues', 'Print'));

Последний раз редактировалось LETTO; 16.10.2023 в 13:08.
Старый 16.10.2023, 13:10   #23  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,953 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Готового примера нет.

Но как я понимаю, вам надо не дженерик тип вызвать, а дженерик конструктор для типа "DocumentFormat.OpenXml.EnumValue`1"
т.е. сам этот тип "DocumentFormat.OpenXml.EnumValue`1" не получится использовать, нужно конкретный производный тип подставить.

Копайте в эту сторону.

У меня была похожая задача.
Делали обмен с кафкой, используя .net компонент Confluent.Kafka.dll
там вся библиотека построена на дженериках.

и для того чтобы заменить одну строку C# кода такого вида
X++:
consumer = new ConsumerBuilder<String, String>(config).Build();
в джобе пришлось написать десяток строк кода.
Сначала создаем в аксапте объект с типом Confluent.Kafka.ConsumerBuilder`2
а затем для него создаем экземпляр System.Reflection.ConstructorInfo
constructorInfo = System.Type.GetConstructor(...)
при помощи которого уже и вызываем конструктор типа
X++:
new ConsumerBuilder<String, String>
Во вложении простой проект с примером джобика (KafkaGenericTest) и ссылками на документацию
Я поигрался недавно с этим, получил рабочий код, но пока отложил, так как коллега написал сборку обертку, которая в аксапту выставляет классы обертки над дженериками, так что без всего этого можно обойтись стало.
Вложения
Тип файла: zip PKoz_NetGenericConstructor_dev.zip (7.7 Кб, 122 просмотров)

Последний раз редактировалось Logger; 16.10.2023 в 13:18.
За это сообщение автора поблагодарили: LETTO (3).
Старый 16.10.2023, 13:17   #24  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,953 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Dll-ка кафки нужной версии во вложении
Вложения
Тип файла: zip Confluent.Kafka.zip (89.0 Кб, 101 просмотров)
Старый 16.10.2023, 13:24   #25  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,953 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
В моем случае тоже приходил null в аксапте
Не получалось создать тип Confluent.Kafka.ConsumerBuilder`2
Похоже аксапта просто не находила нужный тип в сборке теми методами которыми я пытался делать (там в джобе закомменченный код)
В итоге пришлось извращаться. Брать другой обычный (не generic) тип из библиотеки Confluent.Kafka
Для него получать System.Reflection.Assembly и уже при помощи экземпляра этого типа получать Confluent.Kafka.ConsumerBuilder`2

попробуйте также.
Старый 16.10.2023, 13:42   #26  
LETTO is offline
LETTO
Участник
 
342 / 59 (2) ++++
Регистрация: 14.07.2022
Цитата:
Сообщение от Logger Посмотреть сообщение
Копайте в эту сторону.
constructorInfo = System.Type.GetConstructor(...)
Спасибо огромное
Object удалось получить. И вроде даже все как надо.
Теги
.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, время: 17:01.