特征和汇总的拉力网格 [英] Rally grid of features and rollups

查看:49
本文介绍了特征和汇总的拉力网格的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试制作一个显示汇总功能的网格 -(汇总及其子项).

I am trying to make a grid that displays both features a rollups - (the rollup and its children).

当我将网格模型设置为PortfolioItem/Feature"时,单独的第一个查询有效,但是一旦我将模型更改为PortfolioItem",网格就不会显示任何数据 - 并将 OR 添加到过滤器当然无济于事.

The individual first query works when I set the model of the grid to "PortfolioItem/Feature", but as soon as I change the model to just "PortfolioItem" it the grid does not display any data - and adding the OR to the filter certainly does not help matters.

var filter = Ext.create('Rally.data.QueryFilter', {
    property: 'Parent.ObjectID',
    operator: '=',
    value: id
});

filter = filter.or({
    property: 'ObjectID',
    operator: '=',
    value: id
});

我是否以错误的方式处理这个问题?我知道在使用 PortfolioItem 模型之前我已经制作了一个功能和汇总网格,但我是根据开始和结束日期进行过滤的.

Am I going about this in the wrong way? I know I have made a grid of Features and Rollups before using the PortfolioItem model, but I that was filtering based on start and end dates.

推荐答案

这是一个简单的网格,显示所有投资组合项目类型、主题、倡议、功能,其中

Here is a simple grid that displays all Portfolio Item types, Themes, Initiatives, Features, where

model: 'PortfolioItem'

如果我只获取特定于一种 PI 类型的属性,例如PortfolioItem/Feature 上的 UserStories:

If I fetch an attribute specific to only one PI type, e.g. UserStories on PortfolioItem/Feature:

fetch: ['FormattedID','Name']

并在代码中包含类似内容:

and have something like this in the code:

 StoryCount: feature.get('UserStories').Count

当网格不显示任何数据时,我将看到与您报告的结果相同的结果.

I will see the same outcome that you report, when the grid does not display any data.

<!DOCTYPE html>
<html>
<head>
    <title>PIGridExample</title>

    <script type="text/javascript" src="/apps/2.0rc1/sdk.js"></script>

<script type="text/javascript">
Rally.onReady(function () {
Ext.define('CustomApp', {
    extend: 'Rally.app.App',
    componentCls: 'app',

    launch: function() {
        Ext.create('Rally.data.WsapiDataStore', {
            model: 'PortfolioItem',
            fetch: ['FormattedID','Name'],
            pageSize: 100,
            autoLoad: true,
            listeners: {
                load: this._onDataLoaded,
                scope: this
            }
        });
    },
     _onDataLoaded: function(store, data) {
                    var records = [];
                    Ext.Array.each(data, function(record) {
                        records.push({
                            Name: record.get('Name'),
                            FormattedID: record.get('FormattedID'),
                        });
                    });

                    this.add({
                        xtype: 'rallygrid',
                        store: Ext.create('Rally.data.custom.Store', {
                            data: records
                        }),
                        columnCfgs: [
                            {
                                text: 'Name', dataIndex: 'Name', flex: 1
                            },
                            {
                                text: 'FormattedID', dataIndex: 'FormattedID'
                            }
                        ]
                    });
                }


});
            Rally.launchApp('CustomApp', {
                name:"PIGridExample"
                //parentRepos:""
            });

        });
    </script>

    <style type="text/css">
.app {
     /* Add app styles here */
}

    </style>

</head>
<body></body>
</html>

以下是具有功能网格及其用户存储的应用示例:

Here is an example of an app with a grid of Features and their user stores:

Ext.define('CustomApp', {
    extend: 'Rally.app.App',
    componentCls: 'app',

    launch: function() {
        Ext.create('Rally.data.WsapiDataStore', {
            model: 'PortfolioItem/Feature',
            fetch: ['FormattedID','Name','UserStories'],
            pageSize: 100,
            autoLoad: true,
            listeners: {
                load: this._onDataLoaded,
                scope: this
            }
        });
    },

    _createGrid: function(features) {
         this.add({
            xtype: 'rallygrid',
            store: Ext.create('Rally.data.custom.Store', {
                data: features,
                pageSize: 100
            }),

            columnCfgs: [
                {
                   text: 'Formatted ID', dataIndex: 'FormattedID', xtype: 'templatecolumn',
                    tpl: Ext.create('Rally.ui.renderer.template.FormattedIDTemplate')
                },
                {
                    text: 'Name', dataIndex: 'Name'
                },
                {
                    text: 'Story Count', dataIndex: 'StoryCount'
                },
                {
                    text: 'User Stories', dataIndex: 'UserStories', 
                    renderer: function(value) {
                        var html = [];
                        Ext.Array.each(value, function(userstory){
                            html.push('<a href="' + Rally.nav.Manager.getDetailUrl(userstory) + '">' + userstory.FormattedID + '</a>')
                        });
                        return html.join(', ');
                    }
                }
            ]

        });
    },
    _onDataLoaded: function(store, data){
                var features = [];
                var pendingstories = data.length;
                Ext.Array.each(data, function(feature) {
                            var f  = {
                                FormattedID: feature.get('FormattedID'),
                                Name: feature.get('Name'),
                                _ref: feature.get("_ref"),
                                StoryCount: feature.get('UserStories').Count,
                                UserStories: []
                            };

                            var stories = feature.getCollection('UserStories');
                           stories.load({
                                fetch: ['FormattedID'],
                                callback: function(records, operation, success){
                                    Ext.Array.each(records, function(story){  
                                            f.UserStories.push({_ref: story.get('_ref'),
                                            FormattedID: story.get('FormattedID')
                                                    });
                                    }, this);

                                    --pendingstories;
                                    if (pendingstories === 0) {
                                        this._createGrid(features);
                                    }
                                },
                                scope: this
                            });
                            features.push(f);
                }, this);
    }             
});

这篇关于特征和汇总的拉力网格的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆