2017-10-03 13 views
1

レコードを選択するヒューリスティックを実装するには、フィルタ関数を使用する必要があります。単純なフィールド/値チェックだけでは、私たちの目的には不十分です。CA Agile Centralでフィルタ機能を有効にするにはどうすればよいですか?

私は関数フィルタの例に従おうとしていますが、何らかの理由でallowFunctionsフラグがfalseに設定されています。

私はstoreConfig trueにallowFunctionsプロパティを設定しよう:

  storeConfig: { 
       models: ['userstory', 'defect'], 
       allowFunctions: true,     
       filters: [{ 
        // This did not work ... 
        property: 'Iteration.Name', 
        value: 'Sprint 3', 
        // Trying dynamic Filter Function. Update: Never called. 
        filterFn: function (item) { 
         console.log("Entered Filter Function!"); 
         var iter = item.get("Iteration"); 
         console.log("Iteration field: ", iter); 
         if (iter !== null && iter !== undefined) { 
          return (iter.name === "Sprint 3"); 
         } else { 
          return false; 
         } 
        } 
       }] 
      }, 

グリッドビューは、私はそれを店の構成とそのフィルタを点検し、レンダリング後:

  listeners: { 
       afterrender: { 
        fn: function (_myVar, eOpts) { 
         console.log("Arg to afterrender: ", _myVar, " and ", eOpts); 
         var _myStore = _myVar.getStore(); 
         console.log("Store filters: ", _myStore.filters); 
        } 
       } 
      }, 

何私は、allowFunctionsプロパティがfalseに設定されていることがわかりました。私が指定したフィルタ関数は決して起動されません。

Console Screen Shot

だから、どちらか私は間違った場所にtrueにallowFunctionsを設定、またはラリーグリッドビューに組み込まれた何か、そのデータストアは、フィルタ機能を禁止し、バックfalseにフラグを反転させています。

または私の操作理論がいかに悪いかを裏切る3番目の選択肢があります。

ああ、賢明な退役軍人、助言してください。あなたはまだあなたのサーバーフィルタを適用すると、あなたはさらに、クライアント側で下りデータをフィルタリングするため、これはトリッキーなものです

Ext.define('CustomApp', { 
    extend: 'Rally.app.App', 
    componentCls: 'app', 
    launch: function() { 
     //Write app code here 
     console.log("Overall App Launch function entered"); 
     //API Docs: https://help.rallydev.com/apps/2.1/doc/ 
    } 
}); 

Rally.onReady(function() { 
    Ext.define('BOA.AdoptedWork.MultiArtifactGrid', { 
     extend: 'Rally.app.App', 
     componentCls: 'app', 

     launch: function() { 
      console.log("onReady Launch function entered"); 
      this.theGrid = { 
       xtype: 'rallygrid', 
       showPagingToolbar: true, 
       showRowActionsColumn: false, 
       editable: false, 
       columnCfgs: [ 
        'FormattedID', 
        'Name', 
        'ScheduleState', 
        'Iteration', 
        'Release', 
        'PlanEstimate', 
        'TaskEstimateTotal', 
        'TaskActualTotal', // For some reason this does not display ?? :o(?? 
        'TaskRemainingTotal' 
       ], 
       listeners: { 
        afterrender: { 
         fn: function (_myVar, eOpts) { 
          console.log("Arg to afterrender: ", _myVar, " and ", eOpts); 
          var _myStore = _myVar.getStore(); 
          console.log("Store filters: ", _myStore.filters); 
         } 
        } 
       }, 
       storeConfig: { 
        models: ['userstory', 'defect'], 
        allowFunctions: true,     
        filters: [{ 
         // This did not work ... 
         property: 'Iteration.Name', 
         value: 'Sprint 3', 
         // Trying dynamic Filter Function. Update: Never called. 
         filterFn: function (item) { 
          console.log("Entered Filter Function!"); 
          var iter = item.get("Iteration"); 
          console.log("Iteration field: ", iter); 
          if (iter !== null && iter !== undefined) { 
           return (iter.name === "Sprint 3"); 
          } else { 
           return false; 
          } 
         } 
        }] 
       }, 
       context: this.getContext(), 
       scope: this 
      }; 
      this.add(this.theGrid); 
      console.log("The Grid Object: ", this.theGrid); 
     } 
    }); 


    Rally.launchApp('BOA.AdoptedWork.MultiArtifactGrid', { 
     name: 'Multi-type Grid' 
    }); 
}); 

答えて

1

:ここ

は全体Apps.jsファイルです。

ここでこの例をチェックアウト: https://github.com/RallyCommunity/CustomChart/blob/master/Settings.js#L98

を私はあなたが基本的にお店に負荷リスナーを追加することができますし、そのハンドラ内で使用すると、さらにクライアント側で検索結果をフィルタリングするfilterByを行うことができると思います。

listeners: { 
    load: function(store) { 
     store.filterBy(function(record) { 
      //return true to include record in store data 
     }); 
    } 
} 

私はallowFunctionsに慣れていないんだけど、一般remoteFilter中:真/偽のフィルタリングは、サーバー側またはクライアント側に発生しているかどうかを制御するものです。 remoteFilter:true +上記のロードハンドラは、あなたに両方の世界のベストを提供します。

+0

カイル、男、ありがとうございました。 単純な値の画面を保持したい理由は、関数が適用されている結果セットを絞り込むためです。私はクライアント側の関数ですべてのフィルタリングを実行しようとすると恐ろしいパフォーマンスが起こることを恐れています。 このRallyインスタンスにはおそらく15年のデータがあります。私はプロジェクトのコンテキストが多くのことをノックダウンすることは分かっていますが、依然としてプロジェクトにも多くの歴史があります。したがって、日付範囲と単純な値の基準は、結果セットを可能な限り小さくする必要があります。 –

関連する問題