多年来,我们已经在拉力赛中创建并关闭了大量项目。因为您无法完全删除项目,所以我发现需要重新打开已关闭的项目,修改一些工件并重新关闭项目。我正在尝试做的一个简单示例反映在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
因此,如果项目的“State”为“Closed”,则将JSON对象POST到Project的API URL,将其设置为“Open”。
它不起作用。我收到了这个回复:
{
"OperationResult": {
"Errors": [
"Cannot set attribute on a com.rallydev.webservice.json.JSONSingleProperty"
],
"Warnings": [],
"_rallyAPIMajor": "2",
"_rallyAPIMinor": "0"
}
}
是否有其他方法可以通过Rally WS API打开/关闭项目?
答案 0 :(得分:2)
可能有两个问题。
首先,几年前进行了性能优化,限制了对打开项目的查询。此时,获取已关闭项目列表的唯一方法是在UI中的给定工作空间的“项目”页面上。当我们查询项目时,WS API仅返回打开的项目。尝试不检查此条件state == "Closed"
但是,只要直接访问项目端点,就应该可以重新打开项目。我没有尝试使用Python,但是使用浏览器REST Client我重新打开了一个项目,如下所示:
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"
}}
这很有效。
其次,security token必须附加到帖子请求中,但这还不够。请确保您维护会话cookie,因为与浏览器REST客户端中的方案不同,浏览器会自动维护会话,在您的方案中情况并非如此。见this StackOverflow post。