AXForum  
Вернуться   AXForum > Блоги > AnGor
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

Оценить эту запись

Использование Data Methods в SSRS (AX 2009, SSRS).

Запись от AnGor размещена 22.06.2015 в 17:59

В качестве источника данных для Datasets часто используются Data Methods, возвращающие результат типа System.Data.DataTable.
У меня появилась необходимость использовать результат работы статического метода класса из 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);
}
и использование в Visual Studio в Data Methods:
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;
    }
Размещено в Без категории
Просмотров 8731 Комментарии 0
Всего комментариев 0

Комментарии

 


Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 08:56.