如何在CA Agile Central中启用过滤功能?

时间:2017-10-03 18:19:07

标签: javascript rally

我需要使用过滤功能来实现用于选择记录的启发式算法。单独进行简单的现场/价值检查不足以达到我们的目的。

我试图按照功能过滤器的示例进行操作,但出于某种原因," allowFunctions" flag一直设置为false。

我尝试在storeConfig中将 allowFunctions 属性设置为true:

            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

所以要么我在错误的地方将allowFunctions设置为true,要么在Rally Grid View中内置了一些东西,而且它的数据存储禁止过滤器功能并将标志翻转为假。

或者第三种选择背叛了我的运作理论是多么糟糕。

哦,明智的退伍军人,请指教。

这是整个Apps.js文件:

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 个答案:

答案 0 :(得分:1)

这是一个棘手的问题,因为您仍然希望应用服务器过滤器,然后您希望在客户端进一步过滤数据。

在这里查看此示例: 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:true / false控制过滤是在服务器端还是客户端。 remoteFilter:true +上面的加载处理程序为您提供两全其美的优势。