2011-02-08 125 views
7

在我的公司,我们最近开始使用Rally作为我们的项目管理工具。最初,我们团队外部的人花费了大量的时间来手动创建使用命名约定的迭代,而该命名约定不会与我们团队的现有方案搅在一起。我不想让这个可怜的灵魂一个一个地手工删除这些空的迭代,我想用Rally的REST API自动化这个过程。简而言之,我们需要删除跨越3个不同项目(全部共享共同父项)的这100多个空迭代。使用Rally Rest API进行CRUD操作

我花了一些时间在rally-rest-api红宝石的宝石,虽然我有一些有限的红宝石的经验,API的查询接口仍然混乱给我,我有一些麻烦缠绕我的头周围。我知道我的正则表达式会喜欢什么,但我不知道如何将其提供给查询。

这是我到目前为止有:

require 'rubygems' 
require 'rally_rest_api' 

rally = RallyRestAPI.new(:username => "myuser", 
         :password => "mypass") 
regex = /ET-VT-100/  
# get all names that match criteria 
iterations = rally.find(:iteration) { "query using above regex?" } 
# delete all the matching iterations 
iterations.each do |iteration| 
    iteration.delete  
end 

在正确的方向的任何指针将不胜感激。我觉得我快到了。

回答

8

当我想重新命名一大组迭代时,我不得不在几个月前做类似的事情。

首先,确保您正在进行身份验证的用户至少具有“编辑”角色,该角色在要删除迭代的所有项目中分配。另外,如果您的工作空间中有任何您没有读取权限的项目,则必须先为查询提供一个项目元素。 (你甚至可能不知道它们,你组织中的其他人可能已经创建了它们)。

下获取到项目的引用,然后通过循环使用指定的正则表达式的迭代:

require 'rubygems' 
require 'rally_rest_api' 

rally = RallyRestAPI.new(:username => "myuser", 
         :password => "mypass") 

# Assumes all projects contain "FooBar" in name 
projects = rally.find(:project) { contains :name, "FooBar"} 
projects.each do |project| 
    project.iterations.each do |iteration| 
    if iteration.name =~ /ET-VT-100/ 
     iteration.delete 
    end 
    end 
end 
4

尝试:

iterations = rally.find(:iteration) { contains :name, "ET-VT-100" } 

这假定迭代有ET-VT-100的名字,你可能需要对查询一些其他领域。正则表达式不被REST api支持。

+1

我收到以下错误:`未授权读取:迭代357306536 `。我仔细检查了每个项目的权限,每个项目都有编辑。 – envigo 2011-02-08 01:35:29

+1

看到我对这个问题的上面的答案,你很可能必须首先得到一个项目的参考。 – csamuel 2011-02-08 01:49:01