Занимаюсь апгрейдом класса.
Раньше замечательно работало сравнение с 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.");
}
}