Применить команду к пользовательским полям строкового типа с помощью 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 было упоминание или обсуждение этих соображений.

Другие вопросы по тегам