2013-04-09 2 views
2

Возможно ли написать метод x ++ (или C# CLR), который динамически создает новый объект класса и/или методы в AOT?Dynamics AX 2012: динамически создавать класс

makeCustomClass(string className) 
{ 
    //create new class with name className; 
    //populate methods into that class; 
} 

Я даже не уверен, с чего начать с этого, поэтому некоторый образец кода будет большой помощью.

+0

Обнаружена статья, которая может быть именно тем, что мне нужно. http://kashperuk.blogspot.com/2006/11/today-i-want-to-write-about-using-class.html Будет опубликован как ответ, если он будет работать. – Brad

ответ

7

Вот решение:

static void MakeClass(Args _args) 
{ 
    ClassBuild classBuild; 
    DictClass dictClass; 
    ; 
    classBuild = new ClassBuild("TRN_ClassBuild", false); 
    classBuild.addMethod("test", 
     @"void test() 
     { 
      ; 
      print 'Hello'; 
      pause; 
     }"); 

    classBuild.addMethod("test2", 'void test2()\n{\n}'); 
    classBuild.addSourceToMethod("test2", @" 
     str testVar; 
     ; 
     testVar = 'TRN_ClassBuild'; 
     info('We created a Class ' + testVar + ' and can use its methods.'); 
     TreeNode::findNode('Classes\\'+TestVar).AotNewWindow();"); 

    classBuild.classNode().AOTcompile(); 

    box::info(strFmt("Creating class %1 with 2 methods. Code of method test2:\n\n%2", classBuild.name(), 
     classBuild.getMethodImplementation("test2", false).AOTgetSource())); 

    dictClass = new DictClass(className2Id(classBuild.name())); 
    dictClass.callObject('test2', dictClass.makeObject()); 
} 

плагиатом следующей статье, а затем поднят на работу в AX 2012 R2. http://kashperuk.blogspot.com/2006/11/today-i-want-to-write-about-using-class.html

1

У вас есть хорошие примеры на Конфигуратор продукции классов (PBA префикс), как PB создает некоторые классы для моделей во время процесса компиляции.

+0

Спасибо. Я взгляну. – Brad

+0

Также загляните в класс XppSource. Есть некоторые «фрагменты», которые вы можете использовать. –

Смежные вопросы