06.10.2017, 16:16 | #1 |
Участник
|
А как в 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."); } } |
|