如何通过REST API更新Rally项目的状态?

2 投票
1 回答
1273 浏览
提问于 2025-04-18 01:12

我们在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 的帖子

撰写回答