Показать сообщение отдельно
Старый 06.10.2017, 16:16   #1  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
А как в ax7 код метода получить?
Занимаюсь апгрейдом класса.
Раньше замечательно работало сравнение с OLD-слоем.
Фиг с ним, сделал себе функцию вывода контента методов в текстовый файл.

Для ax2012 все тупо, просто, быстро.
А вот в ax7 выяснилось, что DictMethod.getSource - obsolete.

хорошо, напрягся, переписал на Metadata.
но и в нем axMethod.Source - пустой.
Хотя axCalss.Declaration - вполне себе X++ код показывает.

Ветку Channel9: Peter Villadsen and Gustavo Plancarte: X++ to MSIL
Мне не нужен .net код, мне нужен X++ код.

как можно получить?


================================
ax2012
X++:
static void Job2(Args _args)
{
    SysDictClass dc = new SysDictClass(classNum(EInvoiceCFDIXMLDocReader_MX));
    TextBuffer text = new TextBuffer();

    SetEnumerator se = dc.methods().getEnumerator();
    SysDictMethod dm;

    Map mm = new Map(Types::String, Types::String);
    MapEnumerator me;

    while( se.moveNext() )
    {
        dm = se.Current();
        mm.insert(dm.name(), dm.getSource());
    }

    me = mm.getEnumerator();
    while( me.moveNext() )
    {
        text.appendText(me.currentValue());
        text.appendText('\n');
    }

    text.toClipboard();
    info("done.");
}

ax7.1 :
X++:
class ClassMethods
{
    public static void main(Args _args)
    {
        TextBuffer text = new TextBuffer();
    
        str packageDir = 'C:\AOSService\PackagesLocalDirectory';

        //or
        var environment = Microsoft.Dynamics.ApplicationPlatform.Environment.EnvironmentFactory::GetApplicationEnvironment();
        packageDir = environment.get_Aos().get_PackageDirectory();

        // it's kind of magic
        var runtimeProviderConfiguration = New Microsoft.Dynamics.AX.Metadata.Storage.Runtime.RuntimeProviderConfiguration(packageDir);
        var metadataProviderFactory =  New Microsoft.Dynamics.AX.Metadata.Storage.MetadataProviderFactory();
        Microsoft.Dynamics.AX.Metadata.Providers.IMetadataProvider provider = metadataProviderFactory.CreateRuntimeProvider(runtimeProviderConfiguration);




        Map mm = new Map(Types::String, Types::String);

        Microsoft.Dynamics.AX.Metadata.MetaModel.AxClass c = provider.Classes.Read('EInvoiceXMLDocReader_MX');
        for(int i=0; i<c.MethodCount(); ++i)
        {
            Microsoft.Dynamics.AX.Metadata.MetaModel.AxMethod m = c.GetMethod(i);
            mm.insert(m.Name, m.Source);
        }

        MapEnumerator me = mm.getEnumerator();
        while( me.moveNext() )
        {
            text.appendText(me.currentValue());
            text.appendText('\n');
        }
        
        File::SendStringAsFileToUser(text.toString(), 'methods.txt');
        info("done.");
    }

}
Миниатюры
Нажмите на изображение для увеличения
Название: ax7.PNG
Просмотров: 398
Размер:	65.7 Кб
ID:	11674  
__________________
полезное на axForum, github, vk, coub.