0

次のコードスニペットを使用して、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();
     }
}
4

2 に答える 2

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
    }
}
于 2010-12-30T13:38:00.733 に答える
0

次のように、いつでも安全にオブジェクトをキャストできます。

var o = ax.CreateAxaptaObject() as AxaptaObject;
if(o != null)
{
...code
}
于 2010-12-31T13:33:15.070 に答える