RallyDataSource.update不适用于portfolioitem / feature(适用于userstories)

时间:2014-09-25 21:19:45

标签: rally portfolio

以下是我正在使用的API版本:

script type="text/javascript" src="/apps/1.33/sdk.js?apiVersion=1.43"></script>

目标是在网格中显示项目组合项目/功能以及该功能的所有子用户故事。然后根据美国字段值,更新项目组合项/功能字段的值。

我可以使用rallydatasource.update命令更新UserStory的发布字段,但相同的命令不适用于更新项目组合项/功能的字段

以下是我要为Feature更新的字段。这些不起作用

rallyDataSource.update({_ref:ref, GroomingState: nfGroomingState},onUpdateComplete,onError);
rallyDataSource.update({_ref:ref, c_GroomingState: nfGroomingState},onUpdateComplete,onError);
rallyDataSource.update({_ref:ref, Ready: true},onUpdateComplete,onError);                                                                                                                     
rallyDataSource.update({_ref:ref, Notes: "This is test"},onUpdateComplete,onError);
rallyDataSource.update({_ref:ref, Architect: "XYZ ABC"},onUpdateComplete,onError);

以下是我要为UserStory更新的字段。这确实有效。

rallyDataSource.update({
  "_ref":sRef, 
  "Release": [ 
    {
      ref:relRef
    }
  ]},
onUpdateComplete,onError);

有人可以帮助我理解我做错了什么吗? 是否在v 1.43中更新了投资组合项目?

1 个答案:

答案 0 :(得分:0)

您正在使用技巧?apiVersion=1.43将WS API版本设置为旧版AppSDK1早于和不支持的版本,并且它的工作范围但不足以使更新正常工作。

我建议AppSDK2 此外,由于PI类型的状态是完整对象(与State或ScheduleState of Defects或UserStories不同),因此必须在此代码中使用_ref:GroomingState: nfGroomingState您可能正在使用该引用,但代码中并未明确分段。有Ruby example here可用于PI状态。 Rally Ruby工具包位于相同的WS API模型上,因此该示例并非完全不相关。

以下是我尝试将AppSDK1设置为使用WS API版本1.43的详细信息。 无论我如何使用src="/apps/1.33/sdk.js?apiVersion=1.43"rallyDataSource.setApiVersion("1.43");设置版本,我都必须使用父类型:

PortfolioItem

当我查询时,

而不是具体的PortfolioItem/Feature类型:

function itemQuery() {
      var queryObject = {
          key: "pi",
          //type: "PortfolioItem/Feature", //does not work
          type: "PortfolioItem", 
          fetch: "FormattedID,Parent,State,Name",
           query: "(Parent.FormattedID = I8)"
       };
rallyDataSource.findAll(queryObject, populateTable);
}

这很好用,PortfolioItem / Initiative I8的所有子类型,其类型为PortfolioItem / Feature都会成功返回,如果我想做的就是构建一个网格,它可以工作:

function populateTable(results) {
     var tableDiv = document.getElementById('aDiv');
     for (var i=0; i < results.pi.length; i++) {
         var config = { columns:
             [{key: 'FormattedID', header: 'Formatted ID', width: 100},
         {key: 'State.Name', header: 'State', width: 100},
         ]};
        var table = new rally.sdk.ui.Table(config);
         table.addRows(results.pi);
         table.display(tableDiv);
      };

返回两个功能,一个已设置State,另一个没有State: enter image description here

但是,如果我尝试添加更新功能:

function populateTable(results) {
     var tableDiv = document.getElementById('aDiv');
     for (var i=0; i < results.pi.length; i++) {
         if(results.pi[i].State === null){
            console.log('state:',results.pi[i].State)
            rallyDataSource.update({"_ref":results.pi[i]._ref, "State": "https://rally1.rallydev.com/slm/webservice/v2.0/state/12352608621"});
        }
    }
    //...
返回

"Requested type name "feature" is unknown错误:

OperationResult: ObjectErrors: Array[1]0: "Requested type name "feature" is unknown."length: 1__proto__: Array[0]Warnings: Array[1]0: "Please update your client to use the latest version of the API. You can find the latest version at https://rally1.rallydev.com/slm/doc/webservice/index.jsp?version=v2.0. No new projects should use this version of the API as it will be removed in the future."length: 1

AppSDK1适用于不再受支持的WS API。最后支持的1.43是今年6月20日。 AppSDK1在WS API的1.32处停止。这就是设置WS API版本的技巧的原因,因为PortfolioItems是在WS API的1.37中引入的。特别是当您使用AppSDK1不再更新后引入的功能时(请参阅WS API versioning),无法保证rallyDataSource.setApiVersion("1.43");技巧在所有情况下均可使用。