|
![]() |
#1 |
Участник
|
пока у меня получается следующая чудовищная конструкция:
но она: 1. работает через полный перебор объектов AOT 2. должна знать о подчиненных элементах (table.Extensions) в общем - фигня какая-то. Хочу отметить, что набор методов явно писался в переходные времена, когда еще не было решено что будет ключом - int Id или String Name. Также, набор методов явно писало несколько абсолютно равнодушных и криворуких людей, которые проектировали под единственный сценарий использования - сначала загрузить все в память (в кэш-объект), потом работать только с этим объектом (стиль SysModelMetaData). Другие сценарии при программировании похоже даже не рассматривались. Либо я чего-то не понимаю. Собственно отсюда и вопрос ветки: Как правильно получить элементы AOT заданной модели? В X++? В SQL? в акс2012? в акс7? А extension? X++: protected set getTableNamesFromModels() { boolean inModel(str modelDisplayName, str objname, System.Type type) { var models = Microsoft.Dynamics.Ax.Xpp.MetadataSupport::GetModelsOfMetadataArtifact(objName, type); var modelsEnumerator = models.getEnumerator(); while (modelsEnumerator.moveNext()) { Microsoft.Dynamics.AX.Metadata.MetaModel.ModelInfo modelInfo = modelsEnumerator.Current; if( ModelDisplayName == modelInfo.DisplayName ) { return true; } } return false; } set result = new set(Types::String); var modelName = 'Fleet Management Extension'; var axTableType = new Microsoft.Dynamics.AX.Metadata.MetaModel.AxTable(); var axTableExtType = new Microsoft.Dynamics.AX.Metadata.MetaModel.AxTableExtension(); var t = Microsoft.Dynamics.Ax.Xpp.MetadataSupport::TableNames(); // Why Enumerator? while ( t.moveNext() ) { var tname = t.get_current(); if ( inModel(ModelName, tname, axTableType.GetType()) ) { result.add(tname); continue; } var tExt = Microsoft.Dynamics.Ax.Xpp.MetadataSupport::GetTableExtensionNames(tname); // Why collection? var tExtEnum = tExt.GetEnumerator(); while( tExtEnum.moveNext() ) { var tExtName = tExtEnum.Get_Current(); if ( inModel(ModelName, tExtName, axTableExtType.GetType()) ) { result.add(tExtName); continue; } } } return result; } Последний раз редактировалось mazzy; 10.08.2017 в 11:27. |
|
|
За это сообщение автора поблагодарили: sukhanchik (5). |
Теги |
ax2012, ax7, модель |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|