2

多年来,我们在 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 URL,将其设置为“打开”。

它不起作用。我得到这个回应:

{
    "OperationResult": {
        "Errors": [
            "Cannot set attribute on a com.rallydev.webservice.json.JSONSingleProperty"
        ],
        "Warnings": [],
        "_rallyAPIMajor": "2",
        "_rallyAPIMinor": "0"
    }
}

是否有另一种通过 Rally WS API 打开/关闭项目的方法?

4

1 回答 1

2

可能有两个问题。

首先,几年前进行了性能优化,限制了对打开项目的查询。此时,获取已关闭项目列表的唯一方法是在 UI 中的给定工作区的“项目”页面上。当我们查询项目时,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"
}}

这行得通。

其次,必须将安全令牌附加到发布请求,但这还不够。请确保您维护会话 cookie,因为与浏览器 REST 客户端中的场景不同,浏览器自动维护会话,在您的场景中并非如此。请参阅此 StackOverflow 帖子

于 2014-04-03T21:40:45.673 回答