Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rally SDK 2手动筛选或指定显示的rallycardboard列_Rally_Appsdk2 - Fatal编程技术网

Rally SDK 2手动筛选或指定显示的rallycardboard列

Rally SDK 2手动筛选或指定显示的rallycardboard列,rally,appsdk2,Rally,Appsdk2,我正在尝试创建一个简单的rallycardboard应用程序,它以列的形式显示项目,以卡片的形式显示项目待办事项。然后允许拖放卡片来设置项目。代码见附件 如果我指定'Project'作为属性,则该板包含工作区中所有项目的列。我希望将显示的列限制为 作用域父项和子项,或 为项目列列表编写代码。我尝试了操纵列、columnConfig、上下文设置,但没有任何结果 <!DOCTYPE html> <html> <head> <title>Card

我正在尝试创建一个简单的rallycardboard应用程序,它以列的形式显示项目,以卡片的形式显示项目待办事项。然后允许拖放卡片来设置项目。代码见附件

如果我指定'Project'作为属性,则该板包含工作区中所有项目的列。我希望将显示的列限制为

  • 作用域父项和子项,或
  • 为项目列列表编写代码。我尝试了操纵列、columnConfig、上下文设置,但没有任何结果

    <!DOCTYPE html>
    <html>
    <head>
        <title>CardBoard Example</title>
    
        <script type="text/javascript" src="/apps/2.0rc2/sdk.js"></script>
    
        <script type="text/javascript">
            Rally.onReady(function() {
                Ext.define('ProjBoard', {
                    extend: 'Rally.app.App',
    
                    launch: function() {
                        if (cardBoardConfig) {
                            cardBoardConfig.destroy();
                        }
    
                        var cardBoardConfig = {
                            xtype: 'rallycardboard',
                            types: ['User Story'],
                            attribute: 'Project',
                            fieldToDisplay: 'Project',
                            cardConfig: {
                                fields: ['Project', 'Parent','Iteration']
                            },
                            storeConfig: {
                                filters: [
                                    { property: 'ScheduleState', operator: '<', value: 'In-Progress' },
                                    { property: 'Iteration', operator: '=', value: '' }
                                ],
                                sorters: [
                                    { property: 'Rank', direction: 'DESC' }
                                ],
                                //Specify current project and scoping
                                context: this.getContext().getDataContext()
                            }
                        };
    
                        this.add(cardBoardConfig);
                    }
                });
                Rally.launchApp('ProjBoard', {
                  name: 'Backlog Project Board'
                });
            });
        </script>
        <style type="text/css">
        </style>
    </head>
    <body></body>
    </html>
    
    
    纸板示例
    onReady(函数(){
    Ext.define('ProjBoard'{
    扩展:“Rally.app.app”,
    启动:函数(){
    if(cardBoardConfig){
    cardBoardConfig.destroy();
    }
    var cardBoardConfig={
    xtype:“拉力纸板”,
    类型:[“用户故事”],
    属性:“项目”,
    fieldToDisplay:“项目”,
    cardConfig:{
    字段:[“项目”、“父项”、“迭代”]
    },
    storeConfig:{
    过滤器:[
    
    {property:'ScheduleState',operator:'下面的代码允许我将十几个项目列缩减为三个。首先,我获取当前项目并查询其子项目的集合,以构建我希望在板上包含的项目数组(您可以为希望在板上包含的项目选择不同的标准),然后我扩展了
    Rally.ui.carboard.carboard
    以覆盖其
    \u buildColumnsFromModel
    方法,其中仅过滤满足此条件的列:

    retrievedColumns = _.select(retrievedColumns, function(project){    
         return that.arrayOfProjectRefs.indexOf(project.value) != -1
    });
    
    这是完整的js文件。除了这些更改,这是您的代码

        Ext.define('CustomApp', { extend: 'Rally.app.App', componentCls: 'app',
            launch: function() {
                var that = this;
                that.arrayOfProjectRefs = [];
                var p = this.getContext().getProject();
                Ext.create('Rally.data.wsapi.Store', {
                    model: 'Project',
                    fetch: ['Children'],
                    filters:[
                        {
                            Property: '_ref',
                            value: p
                        }
                    ],
                    pageSize: 1,
                    autoLoad: true,
                    listeners: {
                        load: function(store, records) {
                            var project = records[0];
                            var childProjects = project.get('Children');
                            var childProjectsCount = project.get('Children').Count;
                            console.log('childProjectsCount', childProjectsCount);
                            that.arrayOfProjectRefs.push(project.get('_ref'));
                            project.getCollection('Children').load({
                                fetch: ['_ref', 'Name', 'State'],
                                callback: function(records, operation, success) {
                                    Ext.Array.each(records, function(child) {
                                        console.log(child.get('_ref') + ' - ' + child.get('Name') + child.get('State'));
                                        if (child.get('State') === 'Open') {
                                            that.arrayOfProjectRefs.push(child.get('_ref'));
                                            --childProjectsCount;
                                            if (childProjectsCount === 0) {
                                                that._buildBoard();
                                            }
                                        }
                                    });
                                }
                            });
                        }
                    }
                });
            },
    
            _buildBoard:function(){
             var that = this;
            console.log('app._arrayOfProjectRefs', this.arrayOfProjectRefs);   
            Ext.define('ProjectCardboard', {extend: 'Rally.ui.cardboard.CardBoard',
              xtype: 'projectCardboard',
    
             _buildColumnsFromModel: function() {
                    var model = this.models[0];
                    if (model) {
                        var attribute = model.getField('Project');
                        if (attribute) {
                            attribute.getAllowedValueStore().load({
                                callback: function(records, operation, success) {
                                    var retrievedColumns = _.map(records, function(allowedValue) {
                                        var displayValue, value = allowedValue.get('StringValue');
                                        if (!value && attribute.attributeDefinition.AttributeType.toLowerCase() === 'rating') {
                                            value = "None";
                                        } else if (attribute.attributeDefinition.AttributeType.toLowerCase() === 'object') {
                                            displayValue = value;
                                            value = allowedValue.get('_ref');
                                            if (value === 'null') {
                                                value = null;
                                            }
                                        }
    
                                        return {
                                            value: value,
                                            columnHeaderConfig: {
                                                headerTpl: displayValue || value || 'None'
                                            }
                                        };
                                    });
    
                                    this.fireEvent('columnsretrieved', this, retrievedColumns);
    
                                    retrievedColumns = _.select(retrievedColumns, function(project){    
                                        return that.arrayOfProjectRefs.indexOf(project.value) != -1
                                    });
                                     console.log('retrievedColumns after filter', retrievedColumns)
                                    this.columnDefinitions = [];
                                    _.each(retrievedColumns, this.addColumn, this);
                                    this.renderColumns();
                                },
                                scope: this
                            });
                        }
                    }
                }       
        }); 
    
                var addNewConfig = {
                    xtype: 'rallyaddnew',
                    recordTypes: ['User Story'],
                    ignoredRequiredFields: ['Name', 'Iteration'],
                    showAddWithDetails: false,
                };
    
                this.addNew = this.add(addNewConfig);
                var myCardConfig = {
                       xtype: 'rallycard',
                       fields: ['ScheduleState','Name'], 
                       maxHeight: 100
                    } 
    
                var cardBoardConfig = {
                    xtype: 'projectCardboard',
                    types: ['User Story'], 
                    attribute: 'Project', 
                    cardConfig: myCardConfig
                };
    
                this.cardBoard = this.add(cardBoardConfig);
       }
    });
    

    您应该能够通过配置指定列:


    你在问什么?只是将列限制为这两种情况中的一种?是的,如果我现在在测试环境中运行此操作,我会为层次结构中的每个项目获得一列。我希望限制通过所描述的任一方法显示的列。第一种方法是手动指定它们(即“产品a、团队1、团队2、团队3”)。我使用rally app builder将其放入Cloud9。创建了应用程序,但板不会显示。Chrome控制台有:childProjectsCount 0,无论我在何处查看。工作非常出色!我真的很难解开这些列:语法…谢谢!我同意你的看法-我很久没有尝试过用这种方式制作板了。很难理解!
    columns: [
        {
            value: '/project/12345',
            columnHeaderConfig: {
                headerTpl: '{project}',
                headerData: {project: 'Project 1'}
            }
        },
        //more columns...
    ]