【发布时间】:2013-02-12 08:37:57
【问题描述】:
在 AX 报告中,用户可以选择不同的范围。我试图表明用于过滤报告本身的用户的标准甚至
表达式"parameter!CustomerAccount.Value" 不起作用,因为此过滤器不是静态参数。
用户可以使用查询中的任何表以及表中的任何字段以及任何条件。我正在锁定技巧以获取哪个表、哪个字段以及它使用的条件。
【问题讨论】:
标签: dynamics-ax-2009 dynamics-ax-2012 axapta ax
在 AX 报告中,用户可以选择不同的范围。我试图表明用于过滤报告本身的用户的标准甚至
表达式"parameter!CustomerAccount.Value" 不起作用,因为此过滤器不是静态参数。
用户可以使用查询中的任何表以及表中的任何字段以及任何条件。我正在锁定技巧以获取哪个表、哪个字段以及它使用的条件。
【问题讨论】:
标签: dynamics-ax-2009 dynamics-ax-2012 axapta ax
这个方法很好用^_^
((我用的是女贞而不是静态的))
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()));
}
}
}
}
享受:)
【讨论】: