如何在x ++中为morphx报告设置autosum属性

时间:2015-03-09 23:30:06

标签: axapta x++ dynamics-ax-2009 morph-x

我在报告的init()中有以下代码:

QueryBuildDataSource    qbdsTable;
QueryOrderByField       QueryOrderByFieldTransDate;
QueryOrderByField       QueryOrderByFieldDimZone
QueryOrderByField       QueryOrderByFieldDimCC;
;

super();

qbdsTable = query.dataSourceTable(tableNum(Table));
QueryOrderByFieldTransDate = qbdsTable.addOrderByField(fieldNum(Table, TransDate));
QueryOrderByFieldTransDate.autoSum(true);
QueryOrderByFieldDimZone = qbdsTable.addOrderByField(fieldNum(Table, DimZone),SortOrder::Descending);
QueryOrderByFieldDimZone.autoSum(true);
QueryOrderByFieldDimCC = qbdsTable.addOrderByField(fieldNum(Table, DimCostCenter));
QueryOrderByFieldDimCC.autoSum(true);

并且autosum属性正常运行(我已经为我用来计算这些小计的字段设置了SumAll属性。)

问题是,每当我尝试添加groupBy字段或选择字段时,autosum属性就不再受理(小计不再显示):

qbdsTable.addSelectionField(fieldNum(Table, AmountMST), selectionField::Sum);

qbdsTable.addGroupByField(fieldNum(Table, TransDate));

我试过用:

qbdsTable.addSortField(fieldNum(Table, TransDate));
qbdsTable.autoHeader(1, true);

但我有同样的问题

有没有人知道我如何在报告的相同数据上使用autosum和addGroupByField?

1 个答案:

答案 0 :(得分:0)

由于历史原因,旧样式AX报告在直接调用(在报告节点上运行)或通过报告菜单项时的行为方式不同。

第一个的执行顺序是:

  1. 初始化
  2. 对话框
  3. 第二个按照以下顺序通过班级RunbaseReportStd运行:

    1. 初始化
    2. 对话框
    3. 这很重要,因为您在用户进行了任何更改后更改了查询。

      所以将代码更改从init移到fetch,如下所示:

      public boolean fetch()
      {
          QueryBuildDataSource qbdsCustTrans = query.dataSourceTable(tableNum(CustTrans));
          ;
          qbdsCustTrans.addSelectionField(fieldNum(CustTrans, AmountMST), selectionField::Sum);
          qbdsCustTrans.addGroupByField(fieldNum(CustTrans, AccountNum));
          qbdsCustTrans.addGroupByField(fieldNum(CustTrans, TransDate));
          qbdsCustTrans.addGroupByField(fieldNum(CustTrans, CurrencyCode));
          //info(qbdsCustTrans.toString());
          return super();
      }
      

      只有通过菜单项调用时才能使用。 此外,当通过代码添加时,我无法使自动求和功能起作用。

      相反,您必须使用报告查询的排序节点添加订单和autosum。

      我不知道为什么,但也许这是因为您使用了在运行时生成的自动设计。