2014-03-06 184 views
0

我目前正在使用Microsoft Dynamics AX中的表單。 表格由來自4個不同表格的約10個字段的網格組成。 由於表單現在返回太多的值,所以我需要包括某種過濾器,它不需要是動態的,只是一個靜態過濾器,只表示列Y中的值爲X的行。添加表單過濾器

這裏有人有這種事情的一些經驗嗎?我從哪說起呢?

我必須說我沒有使用Microsof AX,所以我一直在使用它一個月左右。

我試着按照這個指南:How to: Add Filter Controls to a Simple List Form [AX 2012] 但我被困在第二部分(要添加一個控件到自定義過濾器組)第2步:我不知道選擇哪種類型的控件,我ik我選擇讓我們說一個組合框我不能得到第3步工作,因爲我沒有看到他們提到的'覆蓋方法'。

回答

1

嗯,我通常做這種方式:

  • 在ClassDeclaration,創造儘可能多QueryBuildRanges變量字段進行過濾。讓我們爲它們命名標準1,Criteria2等(他們的名字正確,請,還不如在這裏)

    QueryBuildRange criteria1, criteria2; 
    
  • 在每一個你要過濾數據源,覆蓋方法Init,附加代碼與此類似:

    super(); 
    criteria1 = this.query().datasource(tablenum(tableofdatasource)).addQueryRange(fieldNum(fieldtofilter)) 
    //criteria1.status(RangeStatus::locked); //optional - this way you can hide filter field to user, have it readonly for users, etc 
    
  • 在表單中創建一個類型爲StringEdit或ListBox的控件用作過濾器。將他們的AutoDeclaration屬性更改爲Yes。覆蓋modified()方法。在這裏面,我用它來把類似的東西:

    super(); 
    element.changeFilters(); 
    
  • 在形式上,添加方法changeFilters();

    range rangeFromStringControl = StringEditControlName.text(); //Put in rangeFromStringControl the string to be used as filter, as a user would write it 
    range rangeFromListBoxControl; 
    criteria1.value(rangeFromStringControl); 
    
    switch (listBoxControl.Selection()) 
    { 
        case NoYesAll::All: 
         rangeFromListBoxControl = ''; //Empty filter string - No filter at all 
         break; 
        case NoYesAll::No: 
         rangeFromListBoxControl = QueryValue(NoYes::No); //Or whatever string filter value you want 
         break; 
        //Etc 
    } 
    
    //We have all filter strs done; let's filter for each main DataSource required with new filters 
    DataSource1.executeQuery(); 
    //If there is other datasources joined to this one, it's usually no necessary to call their executeQuery; 
    //If there are others with filters and not joined to it, call their executeQuery() 
    
  • 如果需要此濾波器時的形式是開放的應用,設置appropiate初始值對照,然後在形式的run()方法:

    run(); 
    element.changeFilters();