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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 22.05.2012, 16:27   #1  
alexbn is offline
alexbn
Участник
 
46 / 11 (1) +
Регистрация: 23.04.2004
параметры типов (type parameters) в Ax
Доброго времени суток.
есть ли способ использовать параметры типов(type parameters) при вызове из Ax?
для получения составного типа?
например:
c#
Код:
public class ClassS <T>
{
....
}

ClassS<int> ClassS = new ClassS<int>();
======================================
AX 2009 SP1 RU7, SQL server 2008 r2
Старый 22.05.2012, 16:34   #2  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
В явном виде нет. Есть тип AnyType. Можно при помощи него сделать что-нибудь похожее.

Расскажите что именно вы пытаетесь реализовать. Может быть найдётся более стандартный для аксапты способ
Старый 22.05.2012, 16:59   #3  
alexbn is offline
alexbn
Участник
 
46 / 11 (1) +
Регистрация: 23.04.2004
конкретнее OpenXml

Код:
   str                                                     relId;
    System.Exception                                        ex;
    DocumentFormat.OpenXml.Packaging.SpreadsheetDocument    package;
    DocumentFormat.OpenXml.Packaging.WorkbookPart           workbookPart;
    DocumentFormat.OpenXml.Packaging.WorksheetPart          worksheetPart;
    DocumentFormat.OpenXml.Spreadsheet.Worksheet            worksheet;
...........
;

    new InteropPermission(InteropKind::ComInterop).assert();

    try
    {

        package  = DocumentFormat.OpenXml.Packaging.SpreadsheetDocument::Create("c:\\test.xlsx", DocumentFormat.OpenXml.SpreadsheetDocumentType::Workbook);
        workbookPart    = package.AddWorkbookPart();
        worksheetPart   = workbookPart.AddNewPart();
// в реале надо 
// worksheetPart   = workbookPart.AddNewPart<worksheetPart>();
// либо 
// worksheetPart   = workbookPart.AddNewPart(of worksheetPart)();
// а так валится с руганью в сторону позднего связывания (логично)
} 

    }
    catch (Exception::CLRError)
    {
        ex = CLRInterop::getLastException();
        package.Close();
        info(ex.get_Message() );
    }
CodeAccessPermission::revertAssert();
Старый 22.05.2012, 17:45   #4  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
А чем не устраивает стандартное семейство классов SysExcel?
Старый 22.05.2012, 21:08   #5  
someOne is offline
someOne
Участник
Аватар для someOne
 
173 / 423 (15) +++++++
Регистрация: 11.12.2008
Адрес: Москва
Цитата:
Сообщение от alexbn Посмотреть сообщение
Доброго времени суток.
есть ли способ использовать параметры типов(type parameters) при вызове из Ax?
Решением может быть написание этого фрагмента кода во внешней DLL (на C# в VS), и уже затем ее использовать в аксапта, соответственно подключив в Reference
Старый 23.05.2012, 06:29   #6  
alexbn is offline
alexbn
Участник
 
46 / 11 (1) +
Регистрация: 23.04.2004
Цитата:
Сообщение от someOne Посмотреть сообщение
Решением может быть написание этого фрагмента кода во внешней DLL (на C# в VS), и уже затем ее использовать в аксапта, соответственно подключив в Reference
этот вариант существует конечно. но что-то лень писать обработчики на каждый возможный тип )))
хотя.... можно же проще. Только всё равно таскать за собой обработчик... не айс

Последний раз редактировалось alexbn; 23.05.2012 в 08:05.
Старый 23.05.2012, 06:30   #7  
alexbn is offline
alexbn
Участник
 
46 / 11 (1) +
Регистрация: 23.04.2004
Цитата:
Сообщение от gl00mie Посмотреть сообщение
А чем не устраивает стандартное семейство классов SysExcel?
выполнение на клиенте.
Старый 23.05.2012, 08:06   #8  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
А перебить свойство RunOn у десятка-другого классов - не судьба?..
Дженерики в Х++ не поддерживаются вплоть до АХ 2012 включительно, так что в ближайшее время непосредственная работа с OpenXml в Аксапте, без дополнительных прослоек, вам не грозит.

Последний раз редактировалось gl00mie; 23.05.2012 в 08:11.
Старый 23.05.2012, 08:22   #9  
alexbn is offline
alexbn
Участник
 
46 / 11 (1) +
Регистрация: 23.04.2004
Цитата:
Сообщение от gl00mie Посмотреть сообщение
А перебить свойство RunOn у десятка-другого классов - не судьба?...
не вариант.
пруфлинк есть?

Вот много тут тем по поводу как запустить excel на сервере, менять удостоверения, прописывать права. и постоянно наталкиваться на проблемы с памятью, удостоверениями и т.п.
Учитывая, что вообще, как я понял, microsoft office не предполагает серверной автоматизации (это логично).

Последний раз редактировалось alexbn; 23.05.2012 в 08:39.
Старый 23.05.2012, 08:38   #10  
alexbn is offline
alexbn
Участник
 
46 / 11 (1) +
Регистрация: 23.04.2004
Цитата:
Сообщение от gl00mie Посмотреть сообщение
.. так что в ближайшее время непосредственная работа с OpenXml в Аксапте, без дополнительных прослоек, вам не грозит.
это как раз уже понятно.
просто могла существовать стандартная обертка для такого случая. поэтому поинтересовался. Спасибо за ответы.
Старый 23.05.2012, 09:03   #11  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Взаимодействие с Excel через .NET (семейство классов SysExcel)
SysExcel и есть стандартная обертка

Последний раз редактировалось gl00mie; 23.05.2012 в 09:06.
Старый 23.05.2012, 09:30   #12  
alexbn is offline
alexbn
Участник
 
46 / 11 (1) +
Регистрация: 23.04.2004
Цитата:
Сообщение от gl00mie Посмотреть сообщение
спасибо - посмотрю ваш вариант.
Старый 23.05.2012, 14:14   #13  
someOne is offline
someOne
Участник
Аватар для someOne
 
173 / 423 (15) +++++++
Регистрация: 11.12.2008
Адрес: Москва
Цитата:
Сообщение от alexbn Посмотреть сообщение
не вариант.
пруфлинк есть?

Вот много тут тем по поводу как запустить excel на сервере, менять удостоверения, прописывать права. и постоянно наталкиваться на проблемы с памятью, удостоверениями и т.п.
Учитывая, что вообще, как я понял, microsoft office не предполагает серверной автоматизации (это логично).
Есть сторонние компоненты NET, которые позволяют работать с файлами екселя без самого екселя.
(Это, кстати, будет работать значительно быстрее чем сам ексель)

Например
http://www.gemboxsoftware.com/spread...FcSIDgod11TZ1w

или
http://www.aspose.com/categories/.ne...t/default.aspx

Они будут прекрасно работать на стороне сервера.
Чем вам не серверная автоматизация ? Правда они платные...
Старый 23.05.2012, 14:38   #14  
VORP is offline
VORP
Участник
Аватар для VORP
 
146 / 95 (4) ++++
Регистрация: 26.05.2006
Вызывать Generic функции из аксапты можно, если использовать .NET рефлекшен:
System.Reflection.MethodInfo - makeGenericMethod
За это сообщение автора поблагодарили: alexbn (1), Logger (10), S.Kuskov (3), someOne (3).
Старый 25.05.2012, 12:09   #15  
someOne is offline
someOne
Участник
Аватар для someOne
 
173 / 423 (15) +++++++
Регистрация: 11.12.2008
Адрес: Москва
Цитата:
Сообщение от VORP Посмотреть сообщение
Вызывать Generic функции из аксапты можно, если использовать .NET рефлекшен:
System.Reflection.MethodInfo - makeGenericMethod
Спасибо! Навело на мысль!!!

Я думал что, например, такой код из C#
X++:
System.Collections.Generic.List<int> l = new System.Collections.Generic.List<int>();

l.Add(1);
l.Add(2);

Console.WriteLine(l.Count);
В Аксапте сделать не реально. Но оказалось что можно, с изварещениями конечно:
X++:
static void Job67(Args _args)
{
    System.Type                     type;
    System.Object                   myIntList;
    System.Reflection.MethodInfo    methodAdd;
    System.Reflection.PropertyInfo  propertyCount;
    System.Object[]                 parameters;
    
    System.Object[]                 nil;
    
    System.Object                   nl;
    int                  cnt;
    ;
    type = System.Type::GetType("System.Collections.Generic.List`1[System.Int32]");
    
    myIntList = System.Activator::CreateInstance(type);
    
    methodAdd = type.GetMethod("Add");
    
    parameters = new System.Object[1]();

    parameters.SetValue(1, 0);
    methodAdd.Invoke(myIntList, parameters);
    
    parameters.SetValue(2, 0);
    methodAdd.Invoke(myIntList, parameters);
    
    propertyCount = type.GetProperty("Count");
    
    nil = new System.Object[0]();
    
    cnt = propertyCount.GetValue(myIntList, nil);
    
    info(strFmt("%1", cnt));
}
Может поможет кому...
За это сообщение автора поблагодарили: mazzy (2), Lemming (1), alexbn (1), sukhanchik (6), Logger (10), b_nosoff (1), Morpheus (2), coolibin (3), Krasher (1), perestoronin (1), S.Kuskov (3), plumbum (3), Cardagant (1), Товарищ ♂uatr (1), MazZzDaI (1).
Старый 05.06.2015, 13:03   #16  
Товарищ ♂uatr is offline
Товарищ ♂uatr
Участник
Аватар для Товарищ ♂uatr
MCBMSS
 
268 / 829 (28) +++++++
Регистрация: 23.10.2012
Добрый день!
(вопрос относится к данной теме весьма косвенно)
Чем можно инициализировать .Net Delegate class? А именно: System.EventHandler.

Последний раз редактировалось Товарищ ♂uatr; 05.06.2015 в 14:42.
Старый 05.06.2015, 15:10   #17  
makbeth is offline
makbeth
Участник
Аватар для makbeth
КОРУС Консалтинг
 
43 / 52 (2) ++++
Регистрация: 15.05.2007
Адрес: Санкт-Петербург
Цитата:
Сообщение от Товарищ ♂uatr Посмотреть сообщение
Чем можно инициализировать .Net Delegate class? А именно: System.EventHandler.
В 2012 есть обертка для обработчиков событий на X++ в виде ManagedEventHandler.
В более ранних версиях - не получится ничем.
За это сообщение автора поблагодарили: Товарищ ♂uatr (1), Logger (1).
Теги
.net, clr, generic, type parameters, полезное

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
emeadaxsupport: New Content for Microsoft Dynamics AX 2012 : October 2011 Blog bot DAX Blogs 0 27.10.2011 17:11
axinthefield: Dynamics AX Event IDs Blog bot DAX Blogs 0 01.03.2011 22:11
daxdilip: Whats New in Dynamics AX 2012 (A brief extract from the recently held Tech Conf.) Blog bot DAX Blogs 7 31.01.2011 12:35
dynamics-ax: Dynamics AX 2012 - Table & Type Hierarchies Blog bot DAX Blogs 0 27.01.2011 00:13
axStart: Microsoft Dynamics AX 2009 Hot Topics Web Seminar Series Blog bot DAX Blogs 0 06.08.2008 12:05

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 11:42.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.