Get query ranges (for user info on report)

Hi,
I am trying to create an util class to be used on our reports so the user can see the query ranges on the report header. The code below works for a query for only shows the ranges that are already on the query. If the user adds ranges to the querie I can not get these values. Any ideas?
Thanks
static void getQueryRanges(Args _args)
{
  Query                   query;
  QueryRun                queryRun;
  QueryBuildDataSource    qbd; 
  QueryBuildRange         range;
  int                     cnt, i,j;
  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();     
    dictTable = new DictTable(query.dataSourceNo(i).table());  
    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()));
         }
    }
  }
}
  • I think user input are defined as filters in the query.
    try this:
    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()));
            }
        }
     }
    }

  • You need the actual query used in the report (ReportRun.query()), not just the query as defined in AOT.
    Martin "Goshoom" Dráb | UK/Czech rep. | Goshoom.NET Dev Blog
    Troubleshooter 5 Problem Solver 5 Troubleshooter 4 Problem Solver 4 Level 4 Level 3 Microsoft Dynamics AX Community Contributor Microsoft Dynamics AX MVP Community Moderator for Microsoft Dynamics AX
  • I think user input are defined as filters in the query.
    try this:
    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()));
            }
        }
     }
    }

  • Thanks!

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.