如何在Rally SDK1.33中获得PortfolioItem结果?

时间:2013-10-26 00:31:45

标签: rally

我正在使用Rally SDK1.33,因为我最终需要使用Rally之外的LoginKey来显示信息。我正在尝试查询有关PortfolioItem的信息,但看起来没有返回任何结果。 - 但是,如果我通过webservice doc页面查询,我会得到一个结果。

使用以下链接(将123456789替换为PortfolioItem的实际ObjectID,将工作空间987654321替换为真实工作区),我将返回PortfolioItem对象:

https://rally1.rallydev.com/slm/webservice/1.43/portfolioitem.js?workspace=https://rally1.rallydev.com/slm/webservice/1.43/workspace/987654321&query=(ObjectID%20%3D%20123456789)&fetch=true&start=1&pagesize=20

但是,如果我尝试从代码中查询它,我会在没有任何结果且没有任何错误的情况下返回查询结果(再次 - 使用真正的PortfolioItem ObjectID而不是123456789)。

    ExternalPortfolio

<!--App information-->
<meta name="Name" content="App: ExternalPortfolio"/>
<meta name="Version" content="1.0"/>
<meta name="Vendor" content=""/>

<!--Include SDK-->
<script type="text/javascript" src="https://rally1.rallydev.com/apps/1.33/sdk.js?debug=true&apiVersion=1.43"></script>


<script type="text/javascript">

    function onLoad() {
        rallyDataSource = new rally.sdk.data.RallyDataSource('__WORKSPACE_OID__', 
                                                  '__PROJECT_OID__',
                                                   '__PROJECT_SCOPING_UP__', 
                                                  '__PROJECT_SCOPING_DOWN__');

        var objectId = 123456789;

        var queryConfig = { 
                type: 'PortfolioItem',
                key: 'portfolio',
                fetch: 'FormattedID,Name',
                query: '(ObjectID = ' + objectId +')'
               };

        rallyDataSource.findAll(queryConfig, showPortfolio, errorCallBack);  

        function showPortfolio(results) {
            console.log(results);
        }

        function errorCallBack(response) {
        console.log('Got problems!')
        console.log(response.Errors);
        console.log(response.Warnings);
        }   
    }

    rally.addOnLoad(onLoad);


</script>

<style type="text/css">

    .externalPortfolio {
        /* Add app styles here */
    }

</style>

我已经创建了许多关于故事和缺陷的报告(大多数都在Rally之外运行),但从来没有用于PortfolioItem。 - 我在这里错过了什么吗?或者v1.xx SDK或v1.x API在处理投资组合项目时是否存在严重错误?

1 个答案:

答案 0 :(得分:1)

这可能不是您遇到的问题,但如果您在拉力赛之外运行,请尝试设置两者工作区OID和项目OID:

    rallyDataSource = new rally.sdk.data.RallyDataSource(
                                              '12345678910', 
                                              '12345678911',
                                              '__PROJECT_SCOPING_UP__', 
                                              '__PROJECT_SCOPING_DOWN__');

当我最初仅使用Workspace OID运行您的示例时,我发现像您一样,我没有收到任何结果,也没有返回任何错误。但是,请在Chrome的网络控制台中检查生成的查询网址:

https://rally1.rallydev.com/slm/webservice/1.43/adhoc.js?_method=POST&adHocQuery={"portfolio":"/portfolioitem?query=(ObjectID = \"152345647\")&pagesize=200&fetch=FormattedID,Name&workspace=/workspace/12345678910&project=${/user/userprofile/defaultProject}&projectScopeUp=false&projectScopeDown=true"}&jsonp=dojo.io.script.jsonp_dojoIoScript1._jsonpCallback

您可以看到用户的默认项目作为Project参数传递。但是,具有该特定ObjectID的PI位于不同的工作区中。结果,我收到了以下错误:

{
    portfolio: {
        _rallyAPIMajor: "1",
        _rallyAPIMinor: "43",
        Errors: [
            "The specified project must be in the specified workspace. Project OID=12345678921 is in Workspace OID=1234569840 and the specified Workspace is OID=12345678910."
        ],
        Warnings: [ ],
        _ref: "/portfolioitem?query=(ObjectID = "152345647")&pagesize=200&fetch=FormattedID,Name&workspace=/workspace/12345678910&project=/project/12345678921&projectScopeUp=false&projectScopeDown=true",
        TotalResultCount: 0,
        StartIndex: 0,
        PageSize: 0,
        Results: [ ]
    }
}

一旦我将项目OID包含在rallyDataSource的新版本而不是刽子手中,我在控制台中获得了预期的结果:

Object {errors: Array[0], warnings: Array[0], portfolio: Array[1]}
errors: Array[0]
portfolio: Array[1]
0: Object
DirectChildrenCount: 0
FormattedID: "F10"
Name: "PI Feature 10"
_objectVersion: "7"
_rallyAPIMajor: "1"
_rallyAPIMinor: "43"
_ref: "https://rally1.rallydev.com/slm/webservice/1.43/portfolioitem/feature/152345647.js"
_refObjectName: "PI Feature 10"
_type: "PortfolioItem/Feature"
__proto__: Object
length: 1
__proto__: Array[0]
warnings: Array[0]
__proto__: Object