Как я могу экспортировать массив из Dynamics AX 2009 через c #? - PullRequest
0 голосов
/ 30 декабря 2010

Я извлекаю данные из 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();
     }
}

Ответы [ 2 ]

1 голос
/ 30 декабря 2010

Вы можете проверить, является ли поле массивом (код 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 голосов
/ 31 декабря 2010

Вы всегда можете безопасно использовать объект следующим образом:

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