【问题标题】:How do I get PortfolioItem results in Rally SDK1.33?如何在 Rally SDK1.33 中获得 PortfolioItem 结果?
【发布时间】:2013-10-26 00:31:45
【问题描述】:

我使用的是 Rally SDK1.33,因为最后我需要使用 Rally 之外的 LoginKey 显示信息。我正在尝试查询 PortfolioItem 的信息,但似乎没有返回任何结果。 - 但是,如果我将查询放在通过 web 服务文档页面中,我会得到一个结果。

使用以下链接(将 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)。

外部投资组合

<!--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 在处理投资组合项目时存在严重错误?

【问题讨论】:

    标签: rally


    【解决方案1】:

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

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

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

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

    您可以看到用户的默认项目正在作为项目参数传递。但是,具有该特定 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: [ ]
        }
    }
    

    一旦我在rallyDataSource 的new-up 中包含了Project OID 而不是hangman,我在控制台中获得了预期的结果:

    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
    

    【讨论】:

    • 谢谢! - 这只是 PortfolioItems 的工作方式吗?使用 HierarchicalRequirements 和 Defects 时,hangman 变量始终解析为默认工作区/项目。
    • 说实话我不确定。 WSAPI 1.x 使用的 adhoc 端点从未设计用于处理 PI。虽然它可以用来访问它们,但它很笨重。 WSAPI 2.0 和 AppSDK 2 是使用 Rally Javascript 获取 PI 的方法。但是,我知道 SDK2 缺少登录密钥功能会限制这一点。
    • 谢谢马克!除了在 idea.rallydev.com 上支持 SDK2 的 LoginKey 功能之外,如果我还能做些什么来帮助推动它(很快),请(!!!)让我知道。我很想使用 SDK2,但在它支持外部报告之前,我公司的任何人都无法学习或使用它(即使他们认为这些报告只会在 Rally 内部使用——因为最终有人会想要它们)拉力赛之外)。
    • 肖恩感谢您的反馈。虽然 AppSDK2 LoginKey 目前不在产品路线图上,但它的需求足够大,以至于有一场运动会专注于此。如果有什么结果,我会在这里发表评论!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-10
    • 2019-03-04
    • 2018-08-23
    • 2015-05-10
    • 1970-01-01
    • 2017-06-30
    • 1970-01-01
    相关资源
    最近更新 更多