0

"Submitted By"我成功建立了与我的 Rally 项目的连接,但在打开缺陷时无法以编程方式设置该字段。我错误地命名了参数,或者它不能通过 REST API 设置。任何有关查询可修改参数、链接到属性名称或设置"Submitted By"参数的代码的帮助将不胜感激。

我的目标是有一个网页,人们可以在其中提交缺陷或故事以及他们的电子邮件,并使用它在“提交者”字段中填充他们的用户名。我当前的设置可以打开故事和缺陷,但只能匿名打开,因为倒数第二行无效。

我正在使用 Ruby API,以下是当用户单击主页上的按钮时调用的 ruby​​ 代码,它将它们重定向到 Sinatra 正在侦听的 localhost:4567/rally_defect。

require 'rubygems'
require 'rally_rest_api'
require 'sinatra'

custom_headers = CustomHttpHeader.new
custom_headers.name = 'Mail 2 Rally'
custom_headers.version = '0.1'
custom_headers.vendor = 'Rally Software'

rally_server = 'https://rally1.rallydev.com/slm'
rally_username = <insert rally username>
rally_pwd = <insert rally password>

rally = RallyRestAPI.new(:base_url => rally_server,
                         :username => rally_username,
                         :password => rally_pwd,
                         :http_headers => custom_headers)

get '/rally_defect' do
  rally.create(:defect, :name => "Test Defect", 
                        :description => "This is a test",
                        :SubmittedBy => "test")                     
end
4

1 回答 1

0

如果您开始构建此集成,我强烈建议您使用rally_api而不是rally_rest_api

rally_rest_api 正在因性能和稳定性方面的一些问题而被弃用。rally_rest_api 不会有任何进一步的发展。

您可以在此处找到有关 rally_api 的文档:

https://developer.help.rallydev.com/ruby-toolkit-rally-rest-api-json

rally_api 确实需要 Ruby 1.9.2 或更高版本。

rally_api 的语法与 rally_rest_api 非常相似。您在上面尝试的 rally_api 版本看起来类似于下面的代码示例。请注意,任何“可设置”参数都可以通过在对象哈希中包含其名称并将其设置为一个值来简单地设置。

查找 Rally Webservices API 对象模型(包括工件属性、允许值以及它们是否可写)的最佳位置是 Webservices API 文档:

https://rally1.rallydev.com/slm/doc/webservice

例如,当 Rally Artifact 的属性本身是像用户这样的 Rally 对象时,要么首先在 Rally 中查找对象(下面的示例就是这样做的),要么将值设置为对 Rally 中对象的 REST URL 引用。例如,如果您知道user@company.comRally 中的 ObjectID 为 12345678910,那么您可以执行以下操作:

user_ref = "/user/12345678910"
new_defect["SubmittedBy"] = user_ref

下面的代码显示了在给定电子邮件格式的用户 ID 的情况下查找 Rally 以获取用户对象的方法,因为我假设您可能需要容纳多个不同的用户。

require 'rubygems'
require 'rally_api'
require 'sinatra'

#Setting custom headers
headers = RallyAPI::CustomHttpHeader.new()
headers.name = 'Mail 2 Rally'
headers.vendor = "My Company"
headers.version = "0.1"

# Rally credentials
rally_username = <insert rally username>
rally_pwd = <insert rally password>
rally_server = 'https://rally1.rallydev.com/slm'

# Rally REST API config
config = {:base_url => rally_server}
config[:username] = rally_username
config[:password] = rally_pwd
config[:workspace] = "Workspace Name"
config[:project] = "Project Name"
config[:headers] = headers #from RallyAPI::CustomHttpHeader.new()

# New up rally connection config
@rally = RallyAPI::RallyRestJson.new(config)

# Lookup UserID for SubmittedBY
submitted_by_user_id = "user@company.com"    

user_query = RallyAPI::RallyQuery.new()
user_query.type = :user
user_query.fetch = "ObjectID,UserName,DisplayName"
user_query.order = "UserName Asc"
user_query.query_string = "(UserName = \"#{submitted_by_user_id}\")"

# Query for user
user_query_results = @rally.find(user_query)
submitted_by_user = user_query_results.first

# Create the Defect
new_defect = {}
new_defect["Name"] = "Test Defect"
new_defect["Description"] = "This is a test"
new_defect["SubmittedBy"] = submitted_by_user

new_defect_create_result = @rally.create(:defect, new_defect)

puts "New Defect created FormattedID: #{new_defect_create_result.FormattedID}"
于 2013-04-22T22:19:47.900 回答