簡體   English   中英

如何獲取AOT對象(例如表)屬於ax7中的模型?

[英]How to get AOT objects (tables for example) belongs to a model in ax7?

假設我需要獲取屬於model AOT objects

  • 例如表對象
  • 我需要TablesTable Extensions
  • 結果對象可以是treeNodeDictTable

問題:如何從模型中獲取AOT對象?

  1. X ++?
  2. T-SQL?
  3. C#代碼?

謝謝。


例如:有一個型號名稱Fleet Management Extension 我可以使用Visual Studio獲取對象。 如何從X ++,T-SQL,C#獲取此對象?

在此處輸入圖片說明


我當前的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; } 

X ++: https//gist.github.com/mazzy-ax/4d4d06ec2fddd885b67527623467aee8

class Tables
{
    public static void Main(Args _args)
    {
        str aosServiceBin = 'C:\AOSService\webroot\bin';
        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();
        var provider = metadataProviderFactory.CreateRuntimeProvider(runtimeProviderConfiguration);

        // object names
        print provider.Tables.ListObjectsForModel('FleetManagement');
        print provider.Tables.ListObjectsForModel('FleetManagementExtension');
        print provider.TableExtensions.ListObjectsForModel('FleetManagement');
        print provider.TableExtensions.ListObjectsForModel('FleetManagementExtension');

        // single object by name
        var custTransMetaData = provider.Tables.Read('CustTrans');
    }

}

Powershell腳本: https : //gist.github.com/mazzy-ax/292f2ce1a8e79c39d1fc753bfca9c529

$aosServiceBin = 'C:\AOSService\webroot\bin'
$packageDir = 'C:\AOSService\PackagesLocalDirectory'

# or 
add-type -path (Join-Path $aosServiceBin 'Microsoft.Dynamics.ApplicationPlatform.Environment.dll')
$environment = [Microsoft.Dynamics.ApplicationPlatform.Environment.EnvironmentFactory]::GetApplicationEnvironment()
$packageDir = $environment.get_Aos().get_PackageDirectory()

# it's kind of magic
add-type -path (Join-Path $aosServiceBin 'Microsoft.Dynamics.Ax.Metadata.Storage.dll')
$runtimeProviderConfiguration = New-Object Microsoft.Dynamics.AX.Metadata.Storage.Runtime.RuntimeProviderConfiguration $packageDir
$metadataProviderFactory =  New-Object Microsoft.Dynamics.AX.Metadata.Storage.MetadataProviderFactory
$provider = $metadataProviderFactory.CreateRuntimeProvider($runtimeProviderConfiguration)

# object names
$provider.Tables.ListObjectsForModel('FleetManagement').count
$provider.Tables.ListObjectsForModel('FleetManagementExtension').count
$provider.TableExtensions.ListObjectsForModel('FleetManagement').count
$provider.TableExtensions.ListObjectsForModel('FleetManagementExtension').count

# single object by name
$provider.Tables.Read('CustTrans')

C#,T-SQL可以在自己的映像中創建。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM