Использование Data Methods в SSRS (AX 2009, SSRS).
Запись от AnGor размещена 22.06.2015 в 17:59
В качестве источника данных для Datasets часто используются Data Methods, возвращающие результат типа System.Data.DataTable.
У меня появилась необходимость использовать результат работы статического метода класса из AX, который возвращает временную таблицу. Т.е. захотелось использовать в качестве источника данных временную таблицу из AX.
По сути - надо написать алгоритм, преобразовывающий тип Таблица AX в System.Data.DataTable.
Предлагаю к вниманию метод такого класса:
Далее пример использования этого метода в методе класса :
и использование в Visual Studio в Data Methods:
У меня появилась необходимость использовать результат работы статического метода класса из AX, который возвращает временную таблицу. Т.е. захотелось использовать в качестве источника данных временную таблицу из AX.
По сути - надо написать алгоритм, преобразовывающий тип Таблица AX в System.Data.DataTable.
Предлагаю к вниманию метод такого класса:
X++:
public static System.Data.DataTable doConvert(Common _AXTable) { System.Data.DataTable ssrsTable = new System.Data.DataTable("SSRSTable"); System.Data.DataColumnCollection columns = ssrsTable.get_Columns(); System.Data.DataColumn idColumn; System.Data.DataRowCollection dataRows; System.Data.DataRow dataRow; DictTable dictTable; DictField dictField; int field; int fieldId; ; dictTable = new DictTable(_AXTable.TableId); for (field=1; field <= dictTable.fieldCnt(); field++) { fieldId = dictTable.fieldCnt2Id(field); dictField = new DictField(_AXTable.TableId, fieldId); switch (dictField.baseType()) { case Types::Integer : idColumn = new System.Data.DataColumn(dictField.name(), System.Type::GetType("System.Int32")); break; case Types::Date : idColumn = new System.Data.DataColumn(dictField.name(), System.Type::GetType("System.DateTime")); break; case Types::Enum : idColumn = new System.Data.DataColumn(dictField.name(), System.Type::GetType("System.Int32")); break; case Types::Real : idColumn = new System.Data.DataColumn(dictField.name(), System.Type::GetType("System.Double")); break; case Types::String : idColumn = new System.Data.DataColumn(dictField.name(), System.Type::GetType("System.String")); break; default : idColumn = new System.Data.DataColumn(dictField.name(), System.Type::GetType("System.String")); break; } columns.Add(idColumn); } while select _AXTable { dataRows = ssrsTable.get_Rows(); dataRow = ssrsTable.NewRow(); for (field=1; field <= dictTable.fieldCnt(); field++) { fieldId = dictTable.fieldCnt2Id(field); dictField = new DictField(_AXTable.TableId, fieldId); dataRow.set_Item(dictField.name(),_AXTable.(fieldId)); } dataRows.Add(dataRow); } return ssrsTable; }
X++:
class UNG_InventSumDateEngine { } public static System.Data.DataTable getInventTransFinValueQtySSRS(DateInvent _OnDate) { UNG_InventTransValueQty InventTransValueQty; UNG_tmpInventTransValueQty tmpInventTransValueQty; ; tmpInventTransValueQty = UNG_InventSumDateEngine::getInventTransValueQty(InventTransValueQty, _OnDate, NoYes::No); return UNG_ConvertTable2SSRSDataTable::doConvert(tmpInventTransValueQty); }
X++:
public static System.Data.DataTable UNG_InventTransFinValueQty(DateTime onDate) { var ax = Microsoft.Dynamics.Framework.Reports.SessionManager.GetSession(); var dt = new System.Data.DataTable(); dt = (System.Data.DataTable)ax.CallStaticClassMethod("UNG_InventSumDateEngine", "getInventTransFinValueQtySSRS", onDate); return dt; }
Всего комментариев 0