Сообщение Джонсон Ховард, технический консультант Adaptavist.

С любым приложением, надстройкой или подключаемым модулем мы склонны обнаруживать, что нам нужно больше функций для удовлетворения наших собственных конкретных потребностей. Мы жадные; мы эгоисты, мы хотим большего и хотим этого только для себя. Когда вы находите «Святой Грааль», вы хотите выгравировать его.

В этом посте рассматривается история увлеченного опытного пользователя Jira и Test Management for Jira (TM4J), который хотел большего, и как с помощью Adaptavist ScriptRunner они достигли своего желания!

Соревнование

Ради этой истории мы будем называть опытного пользователя Jira и TM4J Тедом. У Теда есть два экземпляра Jira, один внутренний и один внешний. В обоих установлен TM4J, но для немного разных целей.

Тед хочет, чтобы данные TM4J в этих случаях были синхронизированы или зеркально отображены, как мы называем их в Adaptavist. Проблема в том, что TM4J в настоящее время не имеет такой возможности. Даже если бы это было так, экземпляры данных не могут обмениваться данными друг с другом из-за брандмауэра, большего и более сильного, чем все, что мог представить президент Трамп! Тед начал синхронизироваться с ощущением, что его желание не осуществится.

НЕПРАВИЛЬНО!… в шагах Adaptavist ScriptRunner на помощь…

Решение

Ответом на задачу Теда является полуавтоматическая «синхронизация». Теду необходимо загрузить файл, содержащий все данные, из внешнего экземпляра Jira, а затем загрузить его во внутренний экземпляр.

Для реализации этого Теду нужен специальный плагин, поскольку ни TM4J, ни ScriptRunner for Jira (SR4J) не предлагают эту функциональность из коробки. Комбинация нескольких различных функций SR4J в сочетании с некоторыми довольно базовыми навыками программирования означала, что это стало возможным без необходимости создания нового независимого надстройки (которое, как правило, немного сложнее и дороже).

Шаги к успеху

1. Создайте настраиваемые диалоговые окна загрузки и выгрузки.

  • Добавьте конечную точку REST, которая возвращает HTML-код настраиваемого диалогового окна. Теду нужны два из них, один для загрузки и один для загрузки. Вы можете добавить в это диалоговое окно все, что захотите, но обязательно следуйте рекомендациям Atlassian AUI.

СОВЕТ. Вы можете обрабатывать этот HTML так же, как и любую другую HTML-форму. Добавьте любые поля формы из документов AUI, которые помогут вам собрать необходимые данные.

2. Добавьте веб-элемент, указывающий на вашу конечную точку REST.

  • Опять же, для Теда ему нужно два, чтобы соответствовать диалогам загрузки и загрузки. При сообщении веб-элементу, что он должен делать, есть опция «запустить код и показать диалоговое окно». Выберите это; он делает то, что написано на жестяной банке.

СОВЕТ - вы можете указать веб-элементу указывать на любой URL-адрес, который вам нравится, передавать параметры через URL-адрес и запускать код, когда он туда попадает - подумайте о возможностях!

3. Создайте форму для обработки конечной точки REST.

  • Добавьте конечную точку REST, которая соответствует тому, что вы пытаетесь сделать, то есть получить, опубликовать и т. Д. В случае Теда нам нужна была одна, которая была бы для получения (загрузки) и публикации (загрузки).
  • Выполните действия. Для конечных точек REST Теда им нужно вызвать еще один API, API TM4J. Конечная точка загрузки получит данные и создаст загружаемый файл. Загрузка откроет загружаемый файл и отправит содержимое в API TM4J.
  • Добавьте несколько умных битов между ними, чтобы убедиться, что данные чистые и правильно отформатированы.

СОВЕТ - вы можете делать все, что захотите, в этих конечных точках REST, когда у вас есть данные из формы, ваше единственное ограничение - ваши навыки программирования.

4. Добавьте JavaScript для обработки формы.

  • Добавьте веб-ресурс. JS-файл - он должен находиться в папке на сервере экземпляров и в каталоге ресурсов - Подробнее см. В руководстве по Adaptavist ScriptRunner.
  • Добавьте в файл JS функцию, которая извлекает данные формы при отправке. В случае с Тедом ему нужны две функции, соответствующие его формам загрузки и загрузки.
  • Добавьте вызов AJAX (также известный как асинхронный Javascript и XML HTTP-запрос или для краткости инструмент веб-разработки!) И отправьте данные формы в ранее настроенные «конечные точки обработки REST формы».
  • В приведенном ниже примере показано, как получить данные из текстовой области и переслать их в конечную точку.

СОВЕТ. То же самое относится и к веб-ресурсам, и к конечным точкам REST. Сценарий - это ваша устрица, используйте JavaScript, чтобы диалог работал так, как вы хотите. Более того, это не обязательно должен быть JS-скрипт; здесь можно добавить скрипт CSS (каскадные таблицы стилей), чтобы немного оживить ситуацию.

Пример обработки формы:

function bindMyCustomEvents() {
(function($) {
var customDialog = AJS.dialog2("#sr-dialog")
customDialog.on("show", function(e) {
var targetId = e.target.id;
if (targetId === "sr-dialog") {
$('form').submit(function(event) {
$.ajax({
type: "POST",
dataType: "json",
"contentType": "application/json",
url: "https://<YOUR-URL>/jira/rest/scriptrunner/latest/custom/formHandler",
data: $('#textarea-id').val()
}).done(function(data) {
alert(data);
}).fail(function() {
alert("Sorry. Server unavailable. ");
});
event.preventDefault();
});
}
});
})(AJS.$);
}

5. Привяжите JavaScript в веб-ресурсе к диалоговой форме.

  • Добавьте тег скрипта в конец HTML-кода в диалоговом окне "Конечные точки REST".
  • Добавьте название функций внутри тега скрипта. Например: ‹script› bindMyCustomEvent () ‹/script›
  • Установите функции как событие «в процессе» для вашей формы.

Резюме

Чтобы создать эту функцию стиля мини-плагина с помощью Adaptavist ScriptRunner, вам необходимо:

  • Добавьте конечную точку REST, которая получает все данные TM4J с помощью API TM4J для создания загружаемого файла.
  • Добавить конечную точку REST, которая возвращает диалоговую форму HTML
  • Добавить кнопку веб-элемента, которая вызывает диалоговое окно HTML и представляет его
  • Добавьте веб-ресурс, который обрабатывает диалоговую форму при отправке и вызывает первую конечную точку загрузки REST.
  • Добавьте конечную точку REST, которая принимает данные TM4J и загружает их, отправляя их в API TM4J.
  • Добавить конечную точку REST, которая возвращает другую диалоговую форму HTML.
  • Добавить кнопку веб-элемента, которая вызывает диалоговое окно HTML и представляет его
  • Добавьте веб-ресурс, который обрабатывает диалоговую форму при отправке и вызывает конечную точку REST загрузки.

Возможности безграничны

Мы решили проблему Теда, создав мини-плагин с использованием ScriptRunner и API TM4J. Итак, теперь вам нужно рассмотреть возможности. Вы можете создать свои собственные формы для диалога и заменить TM4J любым публичным API.

Если вы вручную переносите данные или у вас есть другие приложения с общедоступными API, которые вы хотите интегрировать с Jira. Вы можете построить интеграцию самостоятельно. ScriptRunner позволяет сделать это очень просто, как мы показали, используя комбинацию некоторых из его самых мощных функций.

Мораль истории Теда заключается в том, что вам не нужно довольствоваться стандартными функциями. ScriptRunner позволяет вам мыслить нестандартно и создавать мини-плагины, которые полностью соответствуют вашим потребностям, большим или маленьким.

Если вы хотите узнать больше о том, как ScriptRunner может помочь вам и вашему бизнесу, мы будем рады услышать от вас.

Об авторе:

Джонсон Ховард - технический консультант Adaptavist, его основная специализация - ScriptRunner, но он также имеет опыт консультирования Atlassian, настройки проектов, системного администрирования и разработки плагинов. Он обладает знаниями и опытом в различных языках программирования, включая JAVA, HTML, CSS, Groovy, JavaScript, C # и др.