如何通过REST API更新Rally项目的状态?
我们在Rally上创建和关闭了很多项目。因为你不能完全删除项目,所以我发现需要重新打开这些关闭的项目,修改一些内容,然后再把项目关闭。下面这个Python代码就是我想做的一个简单例子:
resp = session.get('https://rally1.rallydev.com/slm/webservice/v2.0/project/' + ObjectID, auth=HTTPBasicAuth(user, password))
state = resp.json()["Project"]["State"]
if state == "Closed":
info = { "State": "Open" }
resp = session.post('https://rally1.rallydev.com/slm/webservice/v2.0/project/' + ObjectID + '?key=' + token, auth=HTTPBasicAuth(user, password), data=json.dumps(info))
print resp.content
所以如果一个项目的“状态”是“关闭”,我就想把一个JSON对象发送到项目的API网址,把它改成“打开”。
但是这样做不成功。我得到了这个回应:
{
"OperationResult": {
"Errors": [
"Cannot set attribute on a com.rallydev.webservice.json.JSONSingleProperty"
],
"Warnings": [],
"_rallyAPIMajor": "2",
"_rallyAPIMinor": "0"
}
}
有没有其他方法可以通过Rally的WS API来打开或关闭项目?
1 个回答
2
可能有两个问题。
首先,几年前做了一项性能优化,限制了对开放项目的查询。目前,要获取关闭项目的列表,唯一的方法是在特定工作区的项目页面上查看。在我们查询项目时,WS API 只会返回开放项目。试着不检查这个条件 state == "Closed"
。
不过,只要直接访问项目的接口,应该是可以重新打开一个项目的。我没有用 Python 尝试过,但我用浏览器的 REST 客户端重新打开了一个项目,步骤如下:
a) 从安全接口获取安全令牌:
https://rally1.rallydev.com/slm/webservice/v2.0/security/authorize
b) 将令牌添加到请求中:
接口地址:
https://rally1.rallydev.com/slm/webservice/v2.0/project/14304671845?key=b2c8aa01-...
请求内容:
{"Project":{
"State":"Open"
}}
这样是可以的。
第二,安全令牌需要添加到 POST 请求中,但这还不够。请确保你保持会话 cookie,因为在浏览器 REST 客户端中,浏览器会自动维护会话,而在你的情况下并不是这样。可以参考 这个 StackOverflow 的帖子。