21.07.2022, 11:46 | #21 |
Участник
|
Не могу детально пояснить. Очень большая загруженность сейчас.
Просто внимательно посмотрите примеры данные по ссылкам. Там все работает аналогично вызовам методов через SysDictClass / SysDictTable |
|
16.10.2023, 11:28 | #22 |
Участник
|
Цитата:
Сообщение от 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 указать значение для горизонтальных и вертикальных границ. Вот тут хороший пример: 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); 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 |
Участник
|
Готового примера нет.
Но как я понимаю, вам надо не дженерик тип вызвать, а дженерик конструктор для типа "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> Я поигрался недавно с этим, получил рабочий код, но пока отложил, так как коллега написал сборку обертку, которая в аксапту выставляет классы обертки над дженериками, так что без всего этого можно обойтись стало. Последний раз редактировалось Logger; 16.10.2023 в 13:18. |
|
|
За это сообщение автора поблагодарили: LETTO (3). |
16.10.2023, 13:17 | #24 |
Участник
|
Dll-ка кафки нужной версии во вложении
|
|
16.10.2023, 13:24 | #25 |
Участник
|
В моем случае тоже приходил null в аксапте
Не получалось создать тип Confluent.Kafka.ConsumerBuilder`2 Похоже аксапта просто не находила нужный тип в сборке теми методами которыми я пытался делать (там в джобе закомменченный код) В итоге пришлось извращаться. Брать другой обычный (не generic) тип из библиотеки Confluent.Kafka Для него получать System.Reflection.Assembly и уже при помощи экземпляра этого типа получать Confluent.Kafka.ConsumerBuilder`2 попробуйте также. |
|
16.10.2023, 13:42 | #26 |
Участник
|
|
|
Теги |
.net, ado, generic, net |
|
|