Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.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 基于用户故事的所有缺陷的客户列表报告';释放_Rally - Fatal编程技术网

Rally 基于用户故事的所有缺陷的客户列表报告';释放

Rally 基于用户故事的所有缺陷的客户列表报告';释放,rally,Rally,我希望获得一个报告或自定义列表,其中显示缺陷环境为生产环境且父/关联用户故事的版本与自定义屏幕上的版本下拉列表匹配的所有缺陷 我发现了这个故事,我认为它很接近,但不确定如何将其链接到发布下拉列表,也不确定如何显示与缺陷相关的用户故事 输出应该是用户故事ID和名称以及缺陷ID和名称,可能还有更多的列 我知道我可以通过API来实现这一点,但我正在尝试看看现有Rally工具中是否有其他方法 提前感谢您的帮助 你真走运!我不想写那么多的应用程序,今天下午我有一些空闲时间,所以我为你准备了一些东西。只需

我希望获得一个报告或自定义列表,其中显示缺陷环境为生产环境且父/关联用户故事的版本与自定义屏幕上的版本下拉列表匹配的所有缺陷

我发现了这个故事,我认为它很接近,但不确定如何将其链接到发布下拉列表,也不确定如何显示与缺陷相关的用户故事

输出应该是用户故事ID和名称以及缺陷ID和名称,可能还有更多的列

我知道我可以通过API来实现这一点,但我正在尝试看看现有Rally工具中是否有其他方法


提前感谢您的帮助

你真走运!我不想写那么多的应用程序,今天下午我有一些空闲时间,所以我为你准备了一些东西。只需创建一个发布范围的自定义页面,并将此代码添加到该页面上的自定义HTML应用程序中

该应用程序包括一个字段选择器,用于更改显示的字段集。我从一些有用的开始就做了一个最好的猜测。它还包括一个控件,用于启用打印和导出

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

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

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

            scopeType: 'release',

            onScopeChange: function () {
                Ext.create('Rally.data.wsapi.TreeStoreBuilder').build({
                    models: ['defect'],
                    autoLoad: true,
                    enableHierarchy: true,
                    filters: this._getFilters()
                }).then({
                    success: this._onStoreBuilt,
                    scope: this
                });
            },

            _onStoreBuilt: function (store) {
                var modelNames = ['defect'],
                        context = this.getContext(),
                        gridBoard = this.down('rallygridboard');

                if (gridBoard) {
                    gridBoard.destroy();
                }

                this.add({
                    xtype: 'rallygridboard',
                    height: this.getHeight() - ((this.getHeader() && this.getHeader().getHeight()) || 0),
                    context: context,
                    modelNames: modelNames,
                    toggleState: 'grid',
                    stateful: false,
                    plugins: [
                        {
                            ptype: 'rallygridboardfieldpicker',
                            headerPosition: 'left',
                            modelNames: modelNames,
                            stateful: true,
                            stateId: context.getScopedStateId('fields')
                        },
                        {
                            ptype: 'rallygridboardactionsmenu',
                            menuItems: [
                                {
                                    text: 'Export...',
                                    handler: function () {
                                        window.location = Rally.ui.grid.GridCsvExport.buildCsvExportUrl(
                                                this.down('rallygridboard').getGridOrBoard());
                                    },
                                    scope: this
                                },
                                {
                                    text: 'Print...',
                                    handler: function () {
                                        Ext.create('Rally.ui.grid.TreeGridPrintDialog', {
                                            grid: this.down('rallygridboard').getGridOrBoard(),
                                            treeGridPrinterConfig: {
                                                largeHeaderText: 'Defects'
                                            }
                                        });
                                    },
                                    scope: this
                                }
                            ],
                            buttonConfig: {
                                iconCls: 'icon-export'
                            }
                        }
                    ],
                    gridConfig: {
                        store: store,
                        columnCfgs: [
                            'Name',
                            'Requirement',
                            'State',
                            'Priority',
                            'Severity'
                        ]
                    }
                });
            },

            _getFilters: function () {
                var scope = this.getContext().getTimeboxScope(),
                        release = scope.getRecord(),
                        filters = [{
                            property: 'Environment',
                            value: 'Production'
                        }];

                if (release) {
                    filters = filters.concat([

                        {
                            property: 'Requirement.Release.Name',
                            value: release.get('Name')
                        },
                        {
                            property: 'Requirement.Release.ReleaseStartDate',
                            value: release.get('ReleaseStartDate')
                        },
                        {
                            property: 'Requirement.Release.ReleaseDate',
                            value: release.get('ReleaseDate')
                        }
                    ]);
                } else {
                    filters.push({
                        property: 'Requirement.Release',
                        value: null
                    });
                }

                return filters;
            }
        });


        Rally.launchApp('DefectsByStoryInRelease', {
            name: "DefectsByStoryInRelease",
            parentRepos: ""
        });

    });
</script>


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

</style>

缺陷系统素释放酶
Rally.onReady(函数(){
Ext.define('DefectsSystemInRelease'{
扩展:“Rally.app.TimeboxScopedApp”,
组件CLS:“应用程序”,
scopeType:“发布”,
onScopeChange:函数(){
Ext.create('Rally.data.wsapi.TreeStoreBuilder').build({
型号:[“缺陷”],
自动加载:对,
enableHierarchy:true,
过滤器:这个。_getFilters()
}).那么({
成功:这是一个成功的故事,
范围:本
});
},
_OnStoreBuild:功能(存储){
var modelNames=['defect'],
context=this.getContext(),
gridBoard=this.down('rallygridboard');
if(网格板){
gridBoard.destroy();
}
这个。添加({
xtype:“rallygridboard”,
高度:this.getHeight()-((this.getHeader()&&this.getHeader().getHeight())| | 0),
上下文:上下文,
模型名:模型名,
toggleState:“网格”,
有状态:错误,
插件:[
{
p类型:“rallygridboardfieldpicker”,
标题位置:“左”,
模型名:模型名,
有状态的:是的,
stateId:context.getScopedStateId('fields'))
},
{
p类型:“rallygridboardactionsmenu”,
菜单项:[
{
文本:“导出…”,
处理程序:函数(){
window.location=Rally.ui.grid.GridCsvExport.buildCsvExportUrl(
这个.down('rallygridboard').getGridOrBoard());
},
范围:本
},
{
文本:“打印…”,
处理程序:函数(){
Ext.create('Rally.ui.grid.TreeGridPrintDialog'{
grid:this.down('rallygridboard').GetGridBoard(),
treeGridPrinterConfig:{
大标题文字:“缺陷”
}
});
},
范围:本
}
],
按钮图标:{
iconCls:“图标导出”
}
}
],
gridConfig:{
店:店,,
专栏CFGS:[
“姓名”,
“要求”,
“国家”,
"优先",,
“严重性”
]
}
});
},
_getFilters:函数(){
var scope=this.getContext().getTimeboxScope(),
release=scope.getRecord(),
过滤器=[{
物业:"环境",,
价值:“生产”
}];
如果(发布){
filters=filters.concat([
{
属性:“Requirement.Release.Name”,
值:release.get('Name')
},
{
属性:“Requirement.Release.ReleaseStartDate”,
值:release.get('ReleaseStartDate')
},
{
属性:“Requirement.Release.ReleaseDate”,
值:release.get('ReleaseDate')
}
]);
}否则{
过滤器。推({
属性:“Requirement.Release”,
值:null
});
}
回流过滤器;
}
});
拉尔