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()));
}
}
}
}
楽しい :)