在 AX 报告中,用户可以选择不同的范围。我试图表明用于过滤报告本身中的用户的标准甚至
该表达式"parameter!CustomerAccount.Value"
不起作用,因为此过滤器不是静态参数。
用户可以使用查询中的任何表以及表中的任何字段以及任何条件。我正在锁定获取哪个表、哪个字段以及它使用的条件的技巧。
在 AX 报告中,用户可以选择不同的范围。我试图表明用于过滤报告本身中的用户的标准甚至
该表达式"parameter!CustomerAccount.Value"
不起作用,因为此过滤器不是静态参数。
用户可以使用查询中的任何表以及表中的任何字段以及任何条件。我正在锁定获取哪个表、哪个字段以及它使用的条件的技巧。
这个方法效果很好^_^
(((我用它女贞而不是静态的))
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()));
}
}
}
}
请享用 :)