1

我已经能够让 Java API 代码为 Iteration TreeGrid 和 Iteration Burndown / Release Burnup 图表工作。我们一直在努力让它在 Confluence 上运行,并且尝试仅通过 iframe 存在问题,并且 IT 对某些绕过选项存在问题。我们已经能够通过下面的脚本获得一些类似的工作。事实上,Iteration TreeGrid 每次都能成功运行,但大多数时候标准报告只显示 Rally 登录屏幕。这并不一致,有时这对我在 Chrome 中有效,但在 Firefox/IE 等中无效。如果通过链接输入以及脚本中的内容,我们已将 API 附加到汇合页面的路径。是否有另一种方法可以传递标准报告以生成密钥?

谢谢!标记

enter code here {html}

<script type="text/javascript">
    var field = 'apiKey';
    var url = window.location.href;
    if(
        (url.indexOf('?' + field + '=') != -1) ||
        (url.indexOf('&' + field + '=') != -1)
    ){
        //alert("**** 001");
    } else {        
        var myURL = document.location;
        if(window.location.href.indexOf('?') > 0){
            document.location = myURL + "&apiKey=_1OS4fhAQBi101VTZ4PytkQXb9jYEt0qYx79WXJacc";
        } else {
            document.location = myURL + "?apiKey=_1OS4fhAQBi101VTZ4PytkQXb9jYEt0qYx79WXJacc";
        }
    }

</script>


<div id="div-iterationburndown"></div>

    <script type="text/javascript">
        Rally.onReady(function() {
            Ext.create("Ext.Container", {
                context: {},
                items: [{
                    xtype: "rallystandardreport",
                    width: 750,
                    height: 500,
                    reportConfig: {
                        report: "IterationBurndown",
                        iteration: "April",
                        subchart: "hide",
                        title: "Iteration Burndown"
                    },
                    project: "https://rally1.rallydev.com/slm/webservice/v2.0/project/51186094804",
                    projectScopeUp: !1,
                    projectScopeDown: !0
                }],
                renderTo: Ext.get("div-iterationburndown")
            });


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


<div id="div-releaseburnup"></div>

    <script type="text/javascript">
        Rally.onReady(function() {
            Ext.create("Ext.Container", {
                context: {},
                items: [{
                    xtype: "rallystandardreport",
                    width: 750,
                    height: 500,
                    reportConfig: {
                        report: "ReleaseBurnup",
                        subchart: "hide",
                        title: "Release Burnup"
                    },
                    project: "https://rally1.rallydev.com/slm/webservice/v2.0/project/51186094804",
                    projectScopeUp: !1,
                    projectScopeDown: !0
                }],
                renderTo: Ext.get("div-releaseburnup")
            });
            Rally.launchApp('CustomApp', {
                name: "releaseburnup",
                parentRepos: ""
            });
        });
    </script>

<div id="div-RallyGrid" style="border-width:5px 5px 5px 5px;width:300px;height:150px;"></div>

 <script type="text/javascript">
        Rally.onReady(function() {
            Ext.create("Rally.data.wsapi.TreeStoreBuilder").build({
                models: ["userstory"],
                autoLoad: !0,
                context: {
                    workspace: "https://rally1.rallydev.com/slm/webservice/v2.0/workspace/50876644101",
                    project: "https://rally1.rallydev.com/slm/webservice/v2.0/project/50891172431"
                },
                enableHierarchy: !0,
                filters: [{
                    property: "Iteration.Name",
                    operator: "=",
                    value: "April"
                }, {
                    property: "Project.Name",
                    operator: "=",
                    value: "Harrier"
                }]
            }).then({
                success: function(store) {
                    Ext.create("Ext.Container", {
                        width: 1e3,
                        height: 1e3,
                        border: 5,
                        items: [{
                            xtype: "rallytreegrid",
                            columnCfgs: ["DisplayColor", "Name", "ScheduleState", "Blocked", "TaskEstimateTotal", "TaskRemainingTotal", "Owner", "Notes"],
                            store: store
                        }],
                        renderTo: Ext.get("div-RallyGrid")
                    })
                }
            });
            Rally.launchApp('CustomApp', {
                name: "RallyGrid",
                parentRepos: ""
            });
        });
    </script>





{html}
4

2 回答 2

0

好消息!AppSDK 2.1 中的 StandardReport 组件和支持的 A1 Analytics 服务现在完全支持 Api Keys,因此您应该能够相当轻松地做到这一点。

一些有用的链接:

StandardReport 组件:https ://help.rallydev.com/apps/2.1/doc/#!/api/Rally.ui.report.StandardReport

在外部嵌入应用程序: https ://help.rallydev.com/apps/2.1/doc/#!/guide/embedding_apps

于 2016-12-13T15:38:20.323 回答
0

AppSDK2 中的StandardReport 组件是对早于 ApiKey 的第一代分析服务的封装。这是在报告>报告页面上为您提供报告的相同分析服务。这些报告也可以通过AppSDK1 中的StandardReport组件获得。

第一代图表不支持 ApiKey。AppSDK2 支持嵌入应用程序指南中描述的 ApiKey。AppSDK2 应用程序可以使用 ApiKey 进行身份验证。但是,如果 AppSDK2 应用程序正在使用 StandardReport 组件,则报告背后的分析服务会提示您登录 - 它不适用于 ApiKey。在您的场景中,不幸的是,它违背了将报告嵌入其他 Web 内容以供可能不一定具有 Rally 凭证的利益相关者查看的目的。

我怀疑如果它似乎偶尔会起作用,那可能是因为您已经在同一浏览器窗口的另一个选项卡中登录了 Rally。如果您在隐身模式下打开一个新窗口,系统将提示您登录。

于 2016-04-21T05:20:11.810 回答