使用YouTrack Rest API将Command应用于String类型的自定义字段

时间:2017-02-14 17:14:01

标签: rest youtrack youtrack-api

感谢您的期待!

我有一个YouTrack实例,其中有几个自定义字段,其中一些是String类型。我正在实现一个模块,通过YouTrack REST API的PUT request创建一个新问题,然后使用用户提交的值applying commands更新其字段。这很有效 - 大部分时间。

我知道我可以通过将多个命令连接到查询字符串来同时将多个命令应用于某个问题,如下所示:

  

类型错误优先级严重添加修复版本5.1标记回归

将导致

  
      
  • 类型:错误
  •   
  • 优先级:严重
  •   
  • 修复版本:5.1
  •   

在各自的字段中(以及添加回归标记)。但是,如果我尝试使用多个String类型的自定义字段执行相同的操作,那么:

  

Foo something示例其他内容Bar P0001

结果

  
      
  • Foo:其他一些例子Bar P0001
  •   
  • 示例:
  •   
  • 栏:
  •   

该命令仅适用于第一个字段,查询字符串的其余部分被视为其String值。我可以为每个字段单独应用命令,但有没有更简单的方法来组合这些请求?

再次感谢!

2 个答案:

答案 0 :(得分:1)

这是预期的结果,因为foo之后的所有字符串都被视为此字段的值,而空格也是字符串自定义字段的有效符号。

如果您尝试通过UI中的命令窗口应用此命令,您实际上会看到相同的结果。

答案 1 :(得分:1)

很好的问题。

我遇到了同样的问题,并在沮丧中度过了不健康的时间。 使用YouTrack UI中的命令窗口时,我注意到它留下了结尾的引号,并且在讨论最终确定或确定字符串值结尾的文档中找不到任何内容。在命令参考,语法文档或示例中,我也找不到任何有关设置字符串字段值的内容。

对于我的解决方案,我将Python与requestsurllib模块一起使用。 -尽管我希望您可以将解决方案转换为任何语言。

其余API将在POST

中接受显式字符串
import requests
import urllib
from collections import OrderedDict

URL = 'http://youtrack.your.address:8000/rest/issue/{issue}/execute?'.format(issue='TEST-1234')

params = OrderedDict({
    'State': 'New',
    'Priority': 'Critical',
    'String Field': '"Message to submit"',
    'Other Details': '"Fold the toilet paper to a point when you are finished."'
})

str_cmd = ' '.join(' '.join([k, v]) for k, v in params.items())
command_url = URL + urllib.urlencode({'command':str_cmd})

result = requests.post(command_url)

# The command result:
# http://youtrack.your.address:8000/rest/issue/TEST-1234/execute?command=Priority+Critical+State+New+String+Field+%22Message+to+submit%22+Other+Details+%22Fold+the+toilet+paper+to+a+point+when+you+are+finished.%22

我很伤心看到这一个悬而未决走了这么久。 -希望这会有所帮助!

编辑:

  

我继续工作后得出的结论是,将所有字段发送出去   单个POST进行更新对于YouTrack来说略胜一筹   服务器,但是需要付出更多的努力:

     

1)知道“问题”中的所有字段都是string

     

2)将所有字符串值预处理为字符串文字

     

3)如果您将所有字段更新作为一个请求发送,而其中只有一个丢失,设置失败或值为意外值,则整个请求将失败,并且您可能会丢失所有其他信息

     

我希望YouTrack文档中有提及或讨论的内容   这些考虑因素。