2010-12-30 11 views
0

次のコードスニペットを使用して、Dynamics AX 2009のデータをc#から取得しています。基礎となるフィールドタイプがディメンションである場合を除き、これはうまく動作します。私は配列型を返すときに配列型を "平坦化"できるようにしたいが、これを行う方法は見えない。誰のアイデアですか?Dynamics AX 2009からc#経由でアレイをエクスポートするにはどうすればよいですか?

axRecord = ax.CreateAxaptaRecord(tableName); 
axRecord.ExecuteStmt(strQuery); 

// Loop through the set of retrieved records. 
using (StreamWriter sw = File.CreateText(path)) 
{ 
    AxaptaObject axDictTable = ax.CreateAxaptaObject("SysDictTable",axRecord.get_Field("tableid")); 

    outputRow = null; 

    List<int> ids = new List<int>(); 

    for (int i = 1; i <= (int)axDictTable.Call("fieldCnt"); i++) 
    { 
      AxaptaObject axDictField = ax.CreateAxaptaObject("DictField", axRecord.get_Field("tableid"), axDictTable.Call("fieldCnt2ID", i)); 

      outputRow += ((string)axDictField.Call("Name")) + ","; 
      ids.Add((int)axDictTable.Call("fieldCnt2ID", i)); 
    } 


    sw.WriteLine(outputRow); 

    while (axRecord.Found) 
    { 
      outputRow = null; 

      foreach(int i in ids) 
       outputRow += axRecord.get_Field(i).ToString().Replace(",", "") + ","; 

      sw.WriteLine(outputRow); 
      axRecord.Next(); 
    } 
} 

答えて

1

あなたは、フィールドが(X ++コード)によって配列であるかどうかを確認し、それを「フラット化」するためにあなたの方法をこれを仕事ができる:

currentTable = new SysDictTable(tablenum(ledgerJournalTable)); 

for(i = 0;i<=currentTable.fieldCntWithoutSys();i++) 
{ 
    currentField = new SysDictField(currentTable.id(), currentTable.fieldCnt2Id(i)); 

    if(currentField.arraySize() > 1) 
    { 
     //your code 
    } 
} 
+0

ディメンションを操作できましたか? – Rod

0

あなたは常に安全のようにオブジェクトをキャストすることができますこれは

var o = ax.CreateAxaptaObject() as AxaptaObject; 
if(o != null) 
{ 
...code 
} 
関連する問題