如何查询里程碑的所有工件

How to query for all Artifacts of a Milestone

我正在尝试使用 App SDK 2.0 创建有关里程碑的报告,并希望找到已分配给里程碑的所有用户故事。

我尝试使用 getCollection 从里程碑中提取工件。

Ext.create('Rally.data.wsapi.Store', {
    model : 'Milestone',

    filters : [ {
        property : 'ObjectID',
        operator : '=',
        value : milestone.get("ObjectID")
    } ],
    fetch : [ 'Artifacts' ],
    limit : Infinity,
    autoLoad : true,
    listeners : {
        load : function(store, records) {
            var record = records[0];
            var info = record.get('Artifacts');
            var count = info.Count;
            record.getCollection('Artifacts').load({
                fetch : [ 'ObjectID' ],
                callback : function(records, operation, success) {
                    Ext.Array.each(records, function(artifact) {
                        console.log(artifact.get('ObjectID'));
                    });
                }
            });
        }
    }
});

我收到以下错误:

Uncaught Rally.data.ModelFactory.getModel(): Could not find registered factory for type: Artifact sdk-debug.js:7078

https://rally1.rallydev.com/slm/doc/webservice/ 来看,里程碑似乎无法在用户故事或 PortfolioItem 上查询。无论如何,我都使用 Tasks 语法进行了尝试,但没有返回任何内容。

Ext.create('Rally.data.wsapi.Store', {
    model : 'UserStory',
        filters : [ {
        property : 'Milestones',
        operator : 'contains',
        value : milestone.get("_ref")
    } ],
    fetch : [ 'ObjectID' ],
    limit : Infinity,
    autoLoad : true,
    listeners : {
        load : function(store, records) {
            console.log(records);
        }
    }
});

AppSDK2 中存在一个缺陷,它不适用于抽象类型,例如神器,用户权限。 您的第一个代码示例 运行 就是那个缺陷。 但是您的第二个代码示例必须有效。我怀疑如果它对您不起作用,那是范围界定的问题。也许您筛选的里程碑不在您限定的项目中。您可以在商店的上下文中对项目引用进行硬编码,以确保它在正确的项目中查找。我最初在我的默认项目中测试了你的代码,它按原样工作,然后我按如下方式修改它以确保它在非默认项目中找到一个里程碑:

Ext.define('CustomApp', {
    extend: 'Rally.app.App',
    componentCls: 'app',
    launch: function() {
        Ext.create('Rally.data.wsapi.Store', {
            model : 'UserStory',
            context:{
                project: '/project/16662089077'
            },
            filters : [
                {
                    property : 'Milestones',
                    operator : 'contains',
                    value : "/milestone/33215216897" 
                }
            ],
            fetch : [ 'ObjectID' ],
            limit : Infinity,
            autoLoad : true,
            listeners : {
                load : function(store, records) {
                    console.log(records);
                }
            }
        });
    }
});