2017-08-09 6 views
0

は、私はAOT objectstreeNodeDictTable AOTオブジェクト(テーブルなど)を取得するにはax7のモデルに属していますか?

質問することができ、テーブルは私がTables必要

  • Table Extensions
  • 結果オブジェクトをオブジェクトたとえばmodel

    • に属して取得する必要があると想定します。どのようにモデルからAOTオブジェクトを取得します。

      1. X ++?
      2. T-SQL?
      3. C#コード?

      ありがとうございます。


      例:モデル名はFleet Management Extensionです。私はVisual Studioでオブジェクトを取得できます。 x ++、t-sql、c#からこのオブジェクトを取得する方法?


      私の現在のx ++コード

      enter image description here

      。それはひどいです。

      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; 
      } 
      
  • +0

    サンプルコードはありますか? –

    +0

    いいえ、コードはありません。そして私はこのコードを書く方法を知らない。 例を追加し、問題のスクリーンショットを追加しました。 – mazzy

    +0

    X ++、SQL、C#のうちの3つ、あるいは1つで十分ですか? –

    答えて

    1

    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は、自分自身のイメージで作成することができます。

    関連する問題