Применить команду к пользовательским полям строкового типа с помощью API YouTrack Rest
И спасибо за поиск!
У меня есть экземпляр YouTrack с несколькими настраиваемыми полями, некоторые из которых имеют тип String. Я реализую модуль для создания новой проблемы с помощью запроса PUT API-интерфейса YouTrack REST, а затем обновляю его поля введенными пользователем значениями, применяя команды. Это прекрасно работает - большую часть времени.
Я знаю, что могу применить несколько команд к проблеме одновременно, объединяя их в строку запроса, например так:
Тип Ошибка Приоритет Критическое добавление Исправить версии 5.1 тег регрессии
приведет к
- Тип: Ошибка
- Приоритет: Критический
- Версии исправлений: 5.1
в соответствующих полях (а также добавив тег регрессии). Но если я попытаюсь сделать то же самое с несколькими настраиваемыми полями типа String, то:
Пример чего-то еще Bar P0001
результаты в
- Foo: что-то Пример Something else Bar P0001
- Пример:
- Бар:
Команда применяется только к первому полю, а остальная часть строки запроса обрабатывается как ее строковое значение. Я могу применить команду индивидуально для каждого поля, но есть ли более простой способ объединить эти запросы?
Еще раз спасибо!
1 ответ
Это ожидаемый результат, потому что все строки после foo
считается значением этого поля, а пробелы также являются допустимыми символами для строковых пользовательских полей.
Если вы попытаетесь применить эту команду через командное окно в пользовательском интерфейсе, вы увидите тот же результат.
Такой хороший вопрос.
Я столкнулся с той же самой проблемой и провел нездоровое количество времени в расстройстве. Используя командное окно из пользовательского интерфейса YouTrack, я заметил, что оно оставляет завершающие кавычки, и я не смог найти ничего в документации, где обсуждалось завершение или определение конца строкового значения. Я также не смог найти упоминаний об установке значений строковых полей в справочнике по командам, в документации по грамматике или в примерах.
Для моего решения я использую Python с requests
а также urllib
модули. - Хотя я ожидаю, что вы могли бы обратить решение на любой язык.
Остальной 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 было упоминание или обсуждение этих соображений.