Расширенное редактирование поля

Подсказка

Используйте это только в том случае, если вы не можете редактировать поле с помощью раскрывающегося списка «Выбрать поля для установки ...» ("Choose fields to set..."). Это может быть необходимо для пользовательских полей, предоставляемых другими приложениями.

Вы можете редактировать поля в разделе, доступном в разделе Дополнительные опции ("More options") для этих действий: 

  • Клонировать задачу
  • Создать задачу
  • Создать запрос в службу поддержки
  • Изменить задачу
  • Переход задачи

Эти дополнительные поля требуют, чтобы вы указали действительный объект JSON, используя формат, указанный в Jira REST API.

Вот пример того, как выглядит этот раздел для действия «редактировать проблему»:

Формат JSON

Объект JSON может содержать атрибуты «обновление» (""update"") или «поля» ("fields"), например:


{

    "update": {

        "description": {

            "set": "a new description"

        },

        "labels": [{

                "add": "test-label"

        }]

    },

    "fields": {

        "summary": "woohoo! a new summary"

    }

}

В чем разница между обновлением и полями?

  • fields - это ярлык для вызова обновления ("update") с заданной ("set") операцией. Итак, в приведенном выше примере набор вызовов для поля описания эквивалентен простому включению описания ("description") в раздел полей ("fields"), например: {"fields": {"description": "a new description"}}.
  • update может быть полезен для полей с несколькими значениями, которые вы хотите добавить / удалить из существующего набора. Например, с помощью примера меток на скриншоте выше вы можете добавить «test-label» к существующим меткам задачи. Если вы использовали операцию установки, все существующие метки были бы перезаписаны "test-label". При обновлении к уже существующим добавляется новые.

Предупреждение

Одно и то же поле никогда не должно появляться одновременно в разделах обновления ("update") и полей ("fields") в JSON.

Ссылки на поля задач

Вы можете ссылаться на пользовательские поля по имени, а не по идентификатору. В приведенном ниже примере на это же поле ссылаются его идентификатор и имя:


{

    "fields": {

        "customfield_10003": "the value I want to set",

        "My Text Customfield": "this is the same field as above and using both causes an error"

    }

}

Как видите, использовать имя намного проще (и его намного легче читать). Поля не чувствительны к регистру, и вы можете заменить пробелы подчеркиванием. Если есть пользовательские поля с таким же именем или пользовательское поле имеет то же имя, что и системное поле, вам нужно будет использовать идентификатор пользовательского поля.

Поддерживаемые поля и & операции

К счастью, здесь может помочь REST api от Jira. В зависимости от того, создаете ли вы задачи или редактируете их, вы можете запросить информацию createmeta проекта или editmeta задачи.

Вы можете получить метаданные для обеих операций, посетив:

Это дает следующий ответ для createmeta:


{

  "expand": "projects",

  "projects": [

    {

      "expand": "issuetypes",

      "self": "https://jira.atlassian.com/rest/api/2/project/10240",

      "id": "10240",

      "key": "JRA",

      "name": "Jira (including Jira Core)",

      "avatarUrls": {

        "48x48": "https://jira.atlassian.com/secure/projectavatar?pid=10240&avatarId=17294",

        "24x24": "https://jira.atlassian.com/secure/projectavatar?size=small&pid=10240&avatarId=17294",

        "16x16": "https://jira.atlassian.com/secure/projectavatar?size=xsmall&pid=10240&avatarId=17294",

        "32x32": "https://jira.atlassian.com/secure/projectavatar?size=medium&pid=10240&avatarId=17294"

      },

      "issuetypes": [

        {

          "self": "https://jira.atlassian.com/rest/api/2/issuetype/10000",

          "id": "10000",

          "description": "",

          "iconUrl": "https://jira.atlassian.com/secure/viewavatar?size=xsmall&avatarId=51505&avatarType=issuetype",

          "name": "Suggestion",

          "subtask": false,

          "expand": "fields",

          "fields": {

            "summary": {

              "required": true,

              "schema": {

                "type": "string",

                "system": "summary"

              },

              "name": "Summary",

              "hasDefaultValue": false,

              "operations": [

                "set"

              ]

            },

            // другие поля удалены для краткости...

            "components": {

              "required": false,

              "schema": {

                "type": "array",

                "items": "component",

                "system": "components"

              },

              "name": "Component/s",

              "hasDefaultValue": false,

              "operations": [

                "add",

                "set",

                "remove"

              ],

              "allowedValues": [

                {

                  "self": "https://jira.atlassian.com/rest/api/2/component/36920",

                  "id": "36920",

                  "name": "System Administration - Support Tools"

                },

                {

                  "self": "https://jira.atlassian.com/rest/api/2/component/43995",

                  "id": "43995",

                  "name": "User Management - Delete User"

                }

              ]

            }

            // другие поля удалены для краткости

          }

        }

      ]

    }

  ]

}

Созданный выше JSON возвращает все поля, которые вы можете включить в «Дополнительные поля»  ("Additional fields"), включая их возможные операции и значения.

Например, приведенный выше объект editmeta позволяет вам искать настраиваемое поле «Single Select» (Единственный выбор) и находить его операции и значения (только «set» и «красный», «синий», «зеленый») ("set" и "red", "blue", "green"). Например, чтобы установить для поля «Single Select» (Единственный выбор) значение «зеленый» ("green") во время редактирования, я бы использовал следующий JSON:


{

    "update": {

        "Single Select": [

            {

                "set": {"value": "green"}

            }

        ]

    }

}

Вы также можете использовать это для поиска идентификатора пользовательского поля для конкретного пользовательского поля.

 

Почему мое поле недоступно для редактирования?

Если вы получили createmeta или editmeta для своего проекта или задачи, поле, которое вы пытаетесь редактировать, может не отображаться в полученном JSON. Это означает, что когда Automation for Jira пытается отредактировать / создать задачу, она завершится ошибкой  в журнале аудита. Скорее всего, это связано с тем, что поле отсутствует на соответствующем экране редактирования или создания в вашем проекте. Чтобы исправить это, просто перейдите в раздел «Экраны» ("Screens") в администраторе проекта и убедитесь, что поле, которое вы пытаетесь обновить, находится на соответствующем экране редактирования или создания.

Кроме того, убедитесь, что у пользователя надстройки автоматизации есть права на редактирование или создание задач в вашем проекте! Наконец, ваш рабочий процесс также может препятствовать редактированию задачи.

Использование интеллектуальных значений

Расширенные значения полей также поддерживают интеллектуальные значения! Подробные объяснения синтаксиса см. в разделе Функции JSON.

Например, вот как вы меняете текущего исполнителя на пользователя, который инициировал событие:


{

    "fields": {

        "assignee": { "name": "{{initiator.name}}" }

    },

}

Мы также создали несколько удобных методов, чтобы упростить обращение к другим полям. Например, это можно записать как:


{

    "fields": {

        "assignee": {{initiator.name.asJsonObject("name")}}

    },

}

Это не только создает JSON в правильном формате, но и правильно кодирует текст. Для кодирования текста вы можете использовать:


{

    "fields": {

        "assignee": { "name": {{initiator.name.asJsonString}} }

    },

}

Чтобы преобразовать значение в объект JSON с ключом, используйте следующее:


{

    "fields": {

        "assignee": {{initiator.name.asJsonObject("key")}}

    }

}

Это производит:


{

    "fields": {

        "assignee": { "key": "username" }

    }

}

Для полей, которые принимают массивы текста, вы можете использовать:


{

    "fields": {

        "labels": {{issue.parent.labels.asJsonStringArray}}

    },

}

Для полей, которые принимают массив из одного объекта поля, вы можете использовать:


{

    "fields": {

        "Multi User Customfield": {{issue.parent.Multi User Customfield.asJsonObjectArray("name")}}

    },

}

Примеры синтаксиса полей

Дополнительные примеры см. в документации по форматам полей, предоставленной Jira:

Резюме

Системное поле, представляющее собой одну строку текста


"summary": "A summary is one line of text"

Описание

Системное поле, состоящее из нескольких строк текста.


"description": "A description is many lines of text\n separated by\n line feeds"

Учет времени и ведение журнала работы

Если вы используете учет времени в Jira, вы можете использовать Automation for Jira для обновления связанных полей. Это не так просто, как установка других полей, потому что отслеживание времени представляет несколько значений. Значения «Оригинальная оценка» ("originalEstimate") и «Остаточная оценка» ("remainingEstimate") - это просто части родительского поля.

Вы можете записать работу по задаче:


{

  "update": {

    "worklog" : [

      {

        "add": {

          "timeSpent" : "6m"

        }

      }

    ]

  }

}

Или зарегистрируйте работу и одновременно выставьте оставшуюся оценку:


{

"update": {

    "worklog" : [

      {

        "add": {

          "timeSpent" : "6m"

        }

      }

    ]

  },

    "fields": {

        "timetracking": {

              "originalEstimate": "10",

              "remainingEstimate": "5"

        }

    }

}

Вы можете комбинировать это с интеллектуальными значениями, чтобы регистрировать работу с использованием рассчитанного значения.


{

  "update": {

    "worklog" : [

      {

        "add": {

          "timeSpent" : "{{now.diff(issue.created).businessDays}}d"

        }

      }

    ]

  }

}

Чтобы скопировать поля учета времени из другой задачи:


{

    "fields": {

        "timetracking": {

              "originalEstimate": "{{issue.timetracking.originalEstimate}}",

              "remainingEstimate": "{{issue.timetracking.remainingEstimate}}"

        }

    }

}

Компоненты

Системное поле, состоящее из нескольких значений, адресованных по имени.


"components" : [ { "name": "Active Directory"} , { "name": "Network Switch" } ]

Влияет на версии

Системное поле, состоящее из нескольких значений, адресованных по имени.


"versions" : [ { "name": "Version 1.0"} , { "Version": "1.1" } ]

Исправить версии

Системное поле, состоящее из нескольких значений, адресованных по имени.


"fixVersions" : [ { "name": "2.0"} , { "name": "Network Switch" } ]

Срок сдачи

Системное поле, представляющее собой дату в формате 'YYYY-MM-DD'.


"duedate" : "2015-11-18"

 

Метки

Системное поле, представляющее собой массив текстовых значений.


"labels" : ["examplelabelnumber1", "examplelabelnumber2"]

Добавление меток

Добавление метки к набору существующих меток:


{

    "update": {

        "labels": [

            {

                "add": "my-new-label"

            }

        ]

    }

}

Вы также можете использовать remove или set в качестве операции вместо добавления в зависимости от того, что вам нужно сделать.

Установка уровня безопасности задачи


{

    "update": {

        "security": [

            {

                "set": {"name": "Public"}

            }

        ]

    }

}

«Public» в данном случае - это название уровня безопасности. Замените это допустимым уровнем безопасности в своем проекте.

Связанные задачи

Вы также можете создавать ссылки на задачи! Например, создайте новую задачу в результате редактирования существующей задачи, а затем создайте обратную ссылку на отредактированную задачу:


{"update": {

        "issuelinks": [

            {

                "add": {

                    "type": {

                        "name": "Relates"

                    },

                    "outwardIssue": {

                        "key": "{{issue.key}}"

                    }

                }

            }

        ]

    }

}

Чтобы найти имя типа ссылки («Связано» в приведенном выше примере), вы можете обратиться к https: // <yourinstance> /secure/admin/ViewLinkTypes!default.jspa в вашем экземпляре. Интеллектуальное значение {{issue.key}} заменяет ключ срабатывания триггера.

 

Запрос участников

Поле участников запроса для Jira Service Desk должно иметь определенную структуру. Например, чтобы добавить к участникам последнего комментатора задачи:


{

  "update": {

    "Request participants" : [

      {

        "add": {

          "name":"{{issue.comments.last.author.name}}"

        }

      }

    ]

  }

}

Флажок пользовательское поле

Выберите несколько значений из определенного списка значений. Вы можете обращаться к ним по значению или по идентификатору.


"customfield_11440" : [{ "value" : "option1"}, {"value" : "option2"}]

or

"customfield_11440" : [{ "id" : 10112}, {"id" : 10115}]

Пользовательское поле для выбора даты

Дата в формате 'YYYY-MM-DD'.


"customfield_11441" : "2015-11-18"

Пользовательское поле выбора даты и времени

Дата и время в формате ISO 8601 'YYYY-MM-DDThh:mm:ss.sTZD'.


"customfield_11442" : "2015-11-18T14:39:00.000+1100"

Метки пользовательского поля

Массив текста.


"customfield_11443": ["rest_label1", "rest_label2"]

Число настраиваемых полей

Содержит номер.


"customfield_11444": 666

Пользовательское поле радиокнопки

Выберите одно значение из определенного списка значений. Вы можете обращаться к ним по значению или по идентификатору.


"customfield_11445" : { "value": "option2" }

or

"customfield_11445" : { "id": 10112 }КОНЕЦ СЕРОЙ ЗОНЫ

Пользовательское поле с множественным выбором

Выберите несколько значений из определенного списка значений. Вы можете обращаться к ним по значению или по идентификатору.


"customfield_11448" : [ { "value": "option1" }, { "value": "option2" } ]

or

"customfield_11448" : [ { "id": 10112 }, { "id": 10115 } ]

Пользовательское поле с множественным выбором

Выберите несколько значений из определенного списка значений. Вы можете обращаться к ним по значению или по идентификатору.


"customfield_11448" : [ { "value": "option1" }, { "value": "option2" } ]

or

"customfield_11448" : [ { "id": 10112 }, { "id": 10115 } ]

Пользовательское поле с одним выбором

Выберите одно значение из определенного списка значений. Вы можете обращаться к ним по значению или по идентификатору.


"customfield_11449" : { "value": "option3" }

or

"customfield_11449" : { "id": 10112 }

Многострочное текстовое пользовательское поле

Несколько строк текста.


"customfield_11450": "Multiples lines of text\n separated by\n line feeds"

Пользовательское поле Elements Connect (ранее nFeed)

Массив строковых идентификаторов.


"customfield_10700" :  [ "10300", "10400" ]

Пример копирования значения поля Elements Connect:


"customfield_10700" :  {{ issue.customfield_10700.asJsonStringArray }}

По материалам Automation for Jira - Server: Advanced field editing