如何通过c#从Dynamics AX 2009导出阵列?

如何通过c#从Dynamics AX 2009导出阵列?,c#,dynamics-ax-2009,axapta,C#,Dynamics Ax 2009,Axapta,我使用以下代码片段从c#中提取Dynamics AX 2009的数据。除了底层字段类型是维度的情况外,这一切都很好。我希望在返回数组类型时能够“展平”它们,但找不到任何方法。有什么想法吗 axRecord = ax.CreateAxaptaRecord(tableName); axRecord.ExecuteStmt(strQuery); // Loop through the set of retrieved records. using (StreamWriter sw = File.Cr

我使用以下代码片段从c#中提取Dynamics AX 2009的数据。除了底层字段类型是维度的情况外,这一切都很好。我希望在返回数组类型时能够“展平”它们,但找不到任何方法。有什么想法吗

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();
     }
}
axRecord=ax.CreateAxaptaRecord(tableName);
axRecord.ExecuteStmt(strQuery);
//循环遍历检索到的记录集。
使用(StreamWriter sw=File.CreateText(路径))
{
AxaptaObject axDictTable=ax.CreateAxaptaObject(“SysDictTable”,axRecord.get_字段(“tableid”);
outputRow=null;
列表ID=新列表();

对于(int i=1;i,您可以通过(X++代码)检查字段是否为数组,然后通过您的方法将其“展平”:

currentTable=新的SysDictTable(tablenum(ledgerJournalTable));
对于(i=0;i 1)
{
//你的代码
}
}

您始终可以像这样安全地投射对象:

var o = ax.CreateAxaptaObject() as AxaptaObject;
if(o != null)
{
...code
}
var o = ax.CreateAxaptaObject() as AxaptaObject;
if(o != null)
{
...code
}