如何在报告中获取静态范围

时间:2013-02-12 08:37:57

标签: dynamics-ax-2009 dynamics-ax-2012 axapta ax

在AX报告中,用户可以选择不同的范围。我试图表明用于在报告中过滤用户的标准甚至

表达式"parameter!CustomerAccount.Value"不起作用,因为此过滤器不是静态参数。

用户可以使用查询中的任何表以及表中的任何字段和任何条件。我正在锁定技巧以获取哪个表,哪个字段及其使用的标准。

enter image description here

1 个答案:

答案 0 :(得分:0)

这种方法效果很好^ _ ^

((我用privet而不是静态))

    static void getQueryRanges2(Args _args)
{
 Query query;
 QueryRun queryRun;
 QueryBuildDataSource qbd;
 QueryBuildRange range;
 QueryFilter filter;
 int cnt, filtercnt, i,j, k;
 DictTable dictTable;
 DictField dictField;
 str fieldLabel;
 ;
 query = new query(queryStr(smmSalesCustItemStatistics));
 queryRun = new QueryRun(query);
 queryRun.prompt();
 query = queryRun.query();  for(i = 1; i <= query.dataSourceCount(); i++)
 {
    cnt = query.dataSourceNo(i).rangeCount();
    filtercnt = 0;
    if(!query.dataSourceNo(i).embedded())
    {
        filtercnt = query.queryFilterCount(query.dataSourceNo(i));
    }
    dictTable = new DictTable(query.dataSourceNo(i).table());
    for (k=1; k<= filtercnt; k++)
    {
        filter = query.queryFilter(k, query.dataSourceNo(i));
        dictField = new DictField(query.dataSourceNo(i).table(), fieldname2id(query.dataSourceNo(i).table(), filter.field()));
        info (strFmt("%1, %2. Range = %3", dictTable.label(), dictField.label(), filter.value()));
    }
    for (j=1; j<=cnt; j++)
    {
        range = queryRun.query().dataSourceNo(i).range(j);
        dictField = new DictField(query.dataSourceNo(i).table(), fieldname2id( query.dataSourceNo(i).table(), range.AOTname()));
        if(range.value())
        {
            info(strfmt("%1, %2. Range = %3",dictTable.label(), dictField.label(), range.value()));
        }
    }
 }
}

享受:)