现有的自定义拉力赛应用程序是预期的产品结果

时间:2016-10-17 19:33:35

标签: rally

我在下面引用了CustomHTML App for Rally,并将其添加到我的项目工作区的自定义报告页面中。 UI工作,但无论如何,无论我提供什么简单的查询,都没有显示结果。如果我做错了,请检查并纠正我。                    在特定日期内找到修复的缺陷

<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',
layout: {
type: 'vbox',
align: 'stretch'
},
items:[
{
xtype: 'panel',
layout: 'anchor',
border: true,
fieldDefaults: {
labelWidth: 40
},
defaultType: 'textfield',
bodyPadding: 5,
items: [
{
fieldLabel: 'Query',
itemId: 'queryField',
anchor:'100%',
width: 700,
height: 100,
xtype: 'textarea',
value: '{\n'+
' "_TypeHierarchy": "Defect",\n'+                  
'"__At": "2016-10-14T00:00:00Z"'+
'}'
},
{
fieldLabel: 'Fields',
itemId: 'fieldsField',
anchor: '100%',
width: 700,
value: "ObjectID, _ValidFrom, Name, State, Resolution"
},
{
fieldLabel: 'Sort',
itemId: 'sortField',
anchor: '100%',
width: 700,
value: "{'ObjectID' : -1, '_ValidFrom': 1}"
},
{
fieldLabel: 'Page Size',
itemId: 'pageSizeField',
anchor: '100%',
width: 700,
value: '10'
    },
{
fieldLabel: 'Hydrate',
itemId: 'hydrate',
anchor: '100%',
width: 700,
value: "State, Resolution"
    },
],

buttons: [
    {
xtype: 'rallybutton',
text: 'Search',
itemId: 'searchButton'
    }
]
    },
    {
xtype: 'panel',
itemId: 'gridHolder',
layout: 'fit',
height: 400
    }
],
launch: function() {
    var button = this.down('#searchButton');
    button.on('click', this.searchClicked, this);
},

searchClicked: function(){
    var queryField = this.down('#queryField');
    var query = queryField.getValue();

    var selectedFields = this.down('#fieldsField').getValue();
    if(selectedFields){
if(selectedFields === 'true'){
    selectedFields = true;
}
else{
    selectedFields = selectedFields.split(', ');
}
    }

    var sort = this.down('#sortField').getValue();

    var pageSize = this.down('#pageSizeField').getValue();
    var parsedPageSize = parseInt(pageSize, 10);
    // don't allow empty or 0 pagesize
    pageSize = (parsedPageSize) ? parsedPageSize : 10;

    var callback = Ext.bind(this.processSnapshots, this);
    this.doSearch(query, selectedFields, sort, pageSize, callback);
},

createSortMap: function(csvFields){
    var fields = csvFields.split(', ');
    var sortMap = {};
    for(var field in fields){
if(fields.hasOwnProperty(field)){
    sortMap[field] = 1;
}
    }

    return sortMap;
},

doSearch: function(query, fields, sort, pageSize, callback){
    var transformStore = Ext.create('Rally.data.lookback.SnapshotStore', {
context: {
    workspace: this.context.getWorkspace(),
    project: this.context.getProject()
},
fetch: fields,
find: query,
autoLoad: true,
    hydrate: ["State","Resolution"],
listeners: {
    scope: this,
    load: this.processSnapshots
}
    });
},

processSnapshots: function(store, records){
    var snapshotGrid = Ext.create('Rally.ui.grid.Grid', {
title: 'Snapshots',
store: store,
columnCfgs: [
    {
text: 'ObjectID',
dataIndex: 'ObjectID'
    },
    {
text: 'Name',
dataIndex: 'Name'
    },
    {
text: 'Project',
dataIndex: 'Project'
    },
    {
text: '_ValidFrom',
dataIndex: '_ValidFrom'
    },
    {
text: '_ValidTo',
dataIndex: '_ValidTo'
    },
{
text: 'State',
dataIndex: 'State'
    },
{
text: 'Resolution',
dataIndex: 'Resolution'
    },
],
height: 400
    });
var gridHolder = this.down('#gridHolder');
}
gridHolder.removeAll(true);
gridHolder.add(snapshotGrid);
});

Rally.launchApp('CustomApp', {
    name: 'lbapi'
});
    });
    </script>

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

1 个答案:

答案 0 :(得分:0)

上面发布的代码中有一些语法错误。它也是使用超级旧版本的sdk编写的。我更新到最新的2.1,现在似乎工作得很好。旧应用程序的大多数问题很可能是Lookback API请求超时。新SDK的默认超时时间更长。

<!DOCTYPE html>
<html>

<head>
    <title>Lookback API Query</title>

    <script type="text/javascript" src="/apps/2.1/sdk.js"></script>
    <script type="text/javascript">
        Rally.onReady(function() {
            Ext.define('CustomApp', {
                extend: 'Rally.app.App',
                componentCls: 'app',
                layout: {
                    type: 'vbox',
                    align: 'stretch'
                },
                items: [{
                    xtype: 'panel',
                    layout: 'anchor',
                    border: true,
                    fieldDefaults: {
                        labelWidth: 40
                    },
                    defaultType: 'textfield',
                    bodyPadding: 5,
                    items: [{
                        fieldLabel: 'Query',
                        itemId: 'queryField',
                        anchor: '100%',
                        width: 700,
                        height: 100,
                        xtype: 'textarea',
                        value: '{\n' +
                            ' "_TypeHierarchy": "Defect",\n' +
                            '"__At": "2016-10-14T00:00:00Z"\n' +
                            '}'
                    }, {
                        fieldLabel: 'Fields',
                        itemId: 'fieldsField',
                        anchor: '100%',
                        width: 700,
                        value: "ObjectID, _ValidFrom, Name, State, Resolution"
                    }, {
                        fieldLabel: 'Sort',
                        itemId: 'sortField',
                        anchor: '100%',
                        width: 700,
                        value: "{'ObjectID' : -1, '_ValidFrom': 1}"
                    }, {
                        fieldLabel: 'Page Size',
                        itemId: 'pageSizeField',
                        anchor: '100%',
                        width: 700,
                        value: '10'
                    }, {
                        fieldLabel: 'Hydrate',
                        itemId: 'hydrate',
                        anchor: '100%',
                        width: 700,
                        value: "State, Resolution"
                    }, ],

                    buttons: [{
                        xtype: 'rallybutton',
                        text: 'Search',
                        itemId: 'searchButton'
                    }]
                }, {
                    xtype: 'panel',
                    itemId: 'gridHolder',
                    layout: 'fit',
                    height: 400
                }],
                launch: function() {
                    var button = this.down('#searchButton');
                    button.on('click', this.searchClicked, this);
                },

                searchClicked: function() {
                    var queryField = this.down('#queryField');
                    var query = queryField.getValue();

                    var selectedFields = this.down('#fieldsField').getValue();
                    if (selectedFields) {
                        if (selectedFields === 'true') {
                            selectedFields = true;
                        } else {
                            selectedFields = selectedFields.split(', ');
                        }
                    }

                    var sort = this.down('#sortField').getValue();

                    var pageSize = this.down('#pageSizeField').getValue();
                    var parsedPageSize = parseInt(pageSize, 10);
                    // don't allow empty or 0 pagesize
                    pageSize = (parsedPageSize) ? parsedPageSize : 10;

                    var callback = Ext.bind(this.processSnapshots, this);
                    this.doSearch(query, selectedFields, sort, pageSize, callback);
                },

                createSortMap: function(csvFields) {
                    var fields = csvFields.split(', ');
                    var sortMap = {};
                    for (var field in fields) {
                        if (fields.hasOwnProperty(field)) {
                            sortMap[field] = 1;
                        }
                    }

                    return sortMap;
                },

                doSearch: function(query, fields, sort, pageSize, callback) {
                    var transformStore = Ext.create('Rally.data.lookback.SnapshotStore', {
                        context: {
                            workspace: this.context.getWorkspace(),
                            project: this.context.getProject()
                        },
                        fetch: fields,
                        pageSize: pageSize,
                        find: query,
                        autoLoad: true,
                        hydrate: ["State", "Resolution"],
                        listeners: {
                            scope: this,
                            load: this.processSnapshots
                        }
                    });
                },

                processSnapshots: function(store, records) {
                    var snapshotGrid = Ext.create('Rally.ui.grid.Grid', {
                        title: 'Snapshots',
                        store: store,
                        columnCfgs: [{
                            text: 'ObjectID',
                            dataIndex: 'ObjectID'
                        }, {
                            text: 'Name',
                            dataIndex: 'Name'
                        }, {
                            text: 'Project',
                            dataIndex: 'Project'
                        }, {
                            text: '_ValidFrom',
                            dataIndex: '_ValidFrom'
                        }, {
                            text: '_ValidTo',
                            dataIndex: '_ValidTo'
                        }, {
                            text: 'State',
                            dataIndex: 'State'
                        }, {
                            text: 'Resolution',
                            dataIndex: 'Resolution'
                        }, ],
                        height: 400
                    });
                    var gridHolder = this.down('#gridHolder');
                    gridHolder.removeAll(true);
                    gridHolder.add(snapshotGrid);
                }
            });

            Rally.launchApp('CustomApp', {
                name: 'lbapi'
            });
        });
    </script>

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

<body></body>

</html>