在AX报告中,用户可以选择不同的范围。我试图表明用于在报告中过滤用户的标准甚至
表达式"parameter!CustomerAccount.Value"
不起作用,因为此过滤器不是静态参数。
用户可以使用查询中的任何表以及表中的任何字段和任何条件。我正在锁定技巧以获取哪个表,哪个字段及其使用的标准。
答案 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()));
}
}
}
}
享受:)