0

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

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

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

在此处输入图像描述

4

1 回答 1

0

这个方法效果很好^_^

(((我用它女贞而不是静态的))

    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()));
        }
    }
 }
}

请享用 :)

于 2013-02-12T09:25:54.153 回答