javascript - 在集会树网格中使用投资组合项目构建项目

标签 javascript rally

我想构建项目团队明智的投资组合项目

项目-1 - 特点-1 - 特征-2

项目 - 2 - 特点-1 - 特征-2

我无法在 Rally Tree Builder 中获得项目和功能,我试过如下:

       Rally.onReady(function() {
        Ext.define('Rally.example.SimpleTreeGrid', {
            extend: 'Rally.app.App',
            componentCls: 'app',

            launch: function() {
                Ext.create('Rally.data.wsapi.TreeStoreBuilder').build({
                    models: ['PortfolioItem/Feature'],
                    autoLoad: true,
                    enableHierarchy: true
                }).then({
                    success: this._onStoreBuilt,
                    scope: this
                });
            },

            _onStoreBuilt: function(store) {
                this.add({
                    xtype: 'rallytreegrid',
                    store: store,
                    context: this.getContext(),
                    enableEditing: false,
                    enableBulkEdit: false,
                    shouldShowRowActionsColumn: false,
                    enableRanking: false,
                    childEls: ["title"],
                    columnCfgs: [
                        'Name',
                        'State',
                        'Owner'
                    ]
                });
            }
        });


        Rally.launchApp('Rally.example.SimpleTreeGrid', {
          name: 'Simple Tree Grid Example'
        });
    });

最佳答案

知道了..!我以网格分组为引用并构建了网格

 _createGrid: function ()
            {
                var filter = Ext.create('Rally.data.wsapi.Filter', { property: 'Release.Name', operator: '=', value: ReleaseBoxValue });
                if (!this.down('#storygrid'))
                {
                    this.grid = this.add({
                        xtype: 'rallygrid',
                        itemId: 'storygrid',
                        columnCfgs: [
                              {
                                  text: 'Formatted ID', dataIndex: 'FormattedID', xtype: 'templatecolumn',
                                  tpl: Ext.create('Rally.ui.renderer.template.FormattedIDTemplate')
                              },
                              {
                                  text: 'Name', dataIndex: 'Name'
                              },                                 

                              {
                                  text: 'Accepted', dataIndex: 'FormattedID',
                                  renderer: function (value)
                                  {

                                      var Release = value;


                                      var html = "";
                                      var userStoriesCount = 0;
                                      _.each(acceptedStories, function (record)
                                      {
                                          if (record.key == Release)
                                          {

                                              userStoriesCount++;
                                          }
                                      }, this);

                                      html = '<span>' + userStoriesCount + '</span>';
                                      return html;
                                  }
                              },
                              {
                                  text: 'Completed', dataIndex: 'FormattedID',
                                  renderer: function (value)
                                  {                                         
                                      var Release = value;


                                      var html = "";
                                      var userStoriesCount = 0;
                                      _.each(completedPercentage, function (record)
                                      {
                                          if (record.key == Release)
                                          {

                                              userStoriesCount++;
                                          }
                                      }, this);

                                      html = '<span>' + userStoriesCount + '</span>';
                                      return html;
                                  }
                              },
                              {
                                  text: 'Defined', dataIndex: 'FormattedID',
                                  renderer: function (value)
                                  {

                                      var Release = value;


                                      var html = "";
                                      var userStoriesCount = 0;
                                      _.each(definedStories, function (record)
                                      {
                                          if (record.key == Release)
                                          {

                                              userStoriesCount++;
                                          }
                                      }, this);

                                      html = '<span>' + userStoriesCount + '</span>';
                                      return html;
                                  }
                              },
                              {
                                  text: 'Grooming', dataIndex: 'FormattedID',
                                  renderer: function (value)
                                  {

                                      var Release = value;


                                      var html = "";
                                      var userStoriesCount = 0;
                                      _.each(grommedStories, function (record)
                                      {
                                          if (record.key == Release)
                                          {

                                              userStoriesCount++;
                                          }
                                      }, this);

                                      html = '<span>' + userStoriesCount + '</span>';
                                      return html;
                                  }
                              },
                              {
                                  text: 'In-Progress', dataIndex: 'FormattedID',
                                  renderer: function (value)
                                  {
                                      var Release = value;


                                      var html = "";
                                      var userStoriesCount = 0;
                                      _.each(inProgressStories, function (record)
                                      {
                                          if (record.key == Release)
                                          {

                                              userStoriesCount++;
                                          }
                                      }, this);

                                      html = '<span>' + userStoriesCount + '</span>';
                                      return html;
                                  }
                              },
                              {
                                  text: 'Grand Total', dataIndex: 'FormattedID',
                                  renderer: function (value)
                                  {
                                      var Release = value;


                                      var html = "";
                                      var userStoriesCount = 0;
                                      _.each(totalStories, function (record)
                                      {
                                          if (record.key == Release)
                                          {

                                              userStoriesCount++;
                                          }
                                      }, this);

                                      html = '<span>' + userStoriesCount + '</span>';
                                      return html;
                                  }
                              },
                              {
                                  text: 'Optum Accepted Stories', dataIndex: 'FormattedID',
                                  renderer: function (value)
                                  {

                                      var Release = value;


                                      var html = "";
                                      var userStoriesCount = 0;
                                      _.each(acceptedStories, function (record)
                                      {
                                          if (record.key == Release)
                                          {

                                              userStoriesCount++;
                                          }
                                      }, this);

                                      html = '<span>' + userStoriesCount + '</span>';
                                      return html;
                                  }
                              },
                              {
                                  text: 'Stories yet to be accepted', dataIndex: 'FormattedID',
                                  renderer: function (value)
                                  {

                                      var Release = value;


                                      var html = "";
                                      var userStoriesCount = 0;
                                      _.each(completedPercentage, function (record)
                                      {
                                          if (record.key == Release)
                                          {

                                              userStoriesCount++;
                                          }
                                      }, this);

                                      html = '<span>' + userStoriesCount + '</span>';
                                      return html;                                          

                                  }
                              }
                              ,
                              {
                                  text: 'Total Stories', dataIndex: 'FormattedID',
                                  renderer: function (value)
                                  {

                                      var Release = value;


                                      var html = "";
                                      var userStoriesCount = 0;
                                      _.each(totalStories, function (record)
                                      {
                                          if (record.key == Release)
                                          {

                                              userStoriesCount++;
                                          }
                                      }, this);

                                      html = '<span>' + userStoriesCount + '</span>';
                                      return html;
                                  }
                              }
                              ,
                              {
                                  text: 'Optum Accepted Stories (%)', dataIndex: 'FormattedID',
                                  renderer: function (value)
                                  {
                                      var Release = value;


                                      var html = "";
                                      var accepetedCount = 0;
                                      _.each(acceptedStories, function (record)
                                      {
                                          if (record.key == Release)
                                          {

                                              accepetedCount++;
                                          }
                                      }, this);


                                      var totalStoriesCount = 0;
                                      _.each(totalStories, function (record)
                                      {
                                          if (record.key == Release)
                                          {

                                              totalStoriesCount++;
                                          }
                                      }, this);

                                      var decTotal = accepetedCount / totalStoriesCount;
                                      if (!isNaN(decTotal))
                                      {
                                          html = '<span>' + Math.round((decTotal) * 100) + '%</span>';
                                      }
                                      else
                                      {
                                          html = '<span>0%</span>';
                                      }

                                      return html;
                                  }
                              }
                              ,
                              {
                                  text: 'Stories yet to be accepted (%)', dataIndex: 'FormattedID',
                                  renderer: function (value)
                                  {
                                      var Release = value;


                                      var html = "";
                                      var completedCount = 0;
                                      _.each(completedPercentage, function (record)
                                      {
                                          if (record.key == Release)
                                          {

                                              completedCount++;
                                          }
                                      }, this);


                                      var totalStoriesCount = 0;
                                      _.each(totalStories, function (record)
                                      {
                                          if (record.key == Release)
                                          {

                                              totalStoriesCount++;
                                          }
                                      }, this);
                                      var decTotal = completedCount / totalStoriesCount;
                                      if (!isNaN(decTotal))
                                      {
                                          html = '<span>' + Math.round((decTotal) * 100) + '%</span>';
                                      }
                                      else
                                      {
                                          html = '<span>0%</span>';
                                      }

                                      return html;
                                  }
                              }
                        ],
                        context: this.getContext(),
                        features: [{
                            ftype: 'groupingsummary',
                            groupHeaderTpl: '{name} ({rows.length})'
                        }
                        ],
                        filters: [filter],
                        storeConfig: {
                            model: 'portfolioitem/feature',
                            groupField: 'Name',
                            groupDir: 'ASC',                                
                            fetch: ['FormattedID', 'Name', 'Release', 'Project', 'UserStories', 'HierarchicalRequirement'],
                            filters: [filter],
                            getGroupString: function (record)
                            {

                                var owner = record.get('Project');
                                return (owner && owner._refObjectName) || 'No Name';
                            }
                        }
                    });
                }
                else
                {
                    var filter = Ext.create('Rally.data.wsapi.Filter', { property: 'Release.Name', operator: '=', value: ReleaseBoxValue });
                    var treeGrid = this.down('rallygrid'),
                     treeStore = treeGrid.getStore();

                    treeStore.clearFilter(true);
                    treeStore.filter(filter);
                }
            }

关于javascript - 在集会树网格中使用投资组合项目构建项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52589493/

相关文章:

javascript - GraphQL(Apollo)如何在参数中传递数据结构?

javascript - 替代 jQuery 的 .last

javascript - 我如何处理 ajax 和关闭页面

java - 尝试获取当前迭代的迭代名称

node.js - 使用 Rally API 根据功能选择用户故事

集会回顾: help fetching all history based on future state

javascript - 在优化 (r.js) 中使用 crossroads.js 时出错需要设置

javascript - 通过 Maven 安装 NodeJS

api - "Department"用户字段无法通过 API 访问?

rally - 如何使用 Rally Api 和 .NET 创建属于迭代的任务