Rally SDK 2.0-多类型工件过滤

Rally SDK 2.0-多类型工件过滤,sdk,rally,Sdk,Rally,我试图从用户故事和缺陷中获得一个组合记录集。我对每个工作都有过滤器(例如,缺陷状态!=已关闭,用户故事直接子计数=0),但我无法使用组合查询或自定义查询。例如,下面的代码返回用户情景,但本质上过滤掉了所有缺陷 我相信有多种方法可以做到这一点,但如何获得多个类型的组合结果集,以及针对每种类型的特定过滤器?谢谢 _getData: function(name) { var deferred = Ext.create('Deft.Deferred'); Ext.create('Ral

我试图从用户故事和缺陷中获得一个组合记录集。我对每个工作都有过滤器(例如,缺陷状态!=已关闭,用户故事直接子计数=0),但我无法使用组合查询或自定义查询。例如,下面的代码返回用户情景,但本质上过滤掉了所有缺陷

我相信有多种方法可以做到这一点,但如何获得多个类型的组合结果集,以及针对每种类型的特定过滤器?谢谢

_getData: function(name) {
    var deferred = Ext.create('Deft.Deferred');

    Ext.create('Rally.data.wsapi.artifact.Store', {
        models: ['UserStory', 'Defect'],
        pageSize: 2000,
        fetch: ['c_MyCustomField', 'ScheduleState', 'PlanEstimate', 'Name'],
        filters: [
            { property: 'ScheduleState', operator: '!=', value: 'Accepted' },
            function(item){
                var dirChildCountIsGood = false;
                try
                {
                    if (item.DirectChildrenCount > 0)
                        dirChildCountIsGood = false;
                }
                catch(ex) {}
                return false;
            },
            /* or */{ property: 'DirectChildrenCount', operator: '=', value: '0' }
            //{ property: 'State', operator: '!=', value: 'Closed' }
        ],
        sorters: [
            { property: 'c_MyCustomField', direction: 'ASC'} // Same field for both User Stories and Defects
        ],
        autoLoad: true,
        listeners: {
            scope: this,
            load: this._onRecordsLoaded
        }
    });
    console.log('Call to WSAPI store complete.');
    return deferred;
}

对于工件端点来说,这是一种不幸的奇怪现象。您可以通过在查询中使用一个特殊的隐藏TypeDefOid属性来解决这个问题,从而使各种子句只应用于正确的类型。从长远来看,我们希望增强WSAPI查询语言,以更好地支持此类场景

按如下方式构建两个过滤器:

var nonClosedDefectsFilter = Rally.data.wsapi.Filter.and([
    {
        property: 'TypeDefOid',
        value: 12345 //replace with your defect typedef oid
    }, 
    {
        property: 'State',
        operator: '!='
        value: 'Closed'
    }
]);

var leafStoryFilter = Rally.data.wsapi.Filter.and([
    {
        property: 'TypeDefOid',
        value: 23456 //replace with your story typedef oid
    }, 
    {
        property: 'DirectChildrenCount',
        value: 0
    }
]);
然后,当您在创建时将它们传递到您的商店时,将它们放在一起:

Ext.create('Rally.data.wsapi.artifact.Store', {
    //other config from above omitted for brevity
    filters: [nonClosedDefectsFilter.or(leafStoryFilter)]
});