Вычислить настраиваемое поле при обновлении проблемы - malikovalibek/groovyForJira GitHub Wiki
Обзор В настоящее время вы не можете добавить вычисляемое настраиваемое поле в Jira Cloud. Однако с помощью IssueUpdatedсобытия можно вычислить сумму нескольких полей при обновлении проблемы.
пример В моем проекте есть три настраиваемых поля: Стоимость, Стоимость доставки и Общая стоимость. Эти поля доступны для всех типов задач. При создании задачи или подзадачи я могу определить значения полей « Стоимость» и « Стоимость доставки» , однако поле « Общая стоимость» не рассчитывается автоматически, поскольку рассчитанные настраиваемые поля недоступны в Jira Cloud. Используя этот скрипт, я могу инициировать вычисление при обновлении проблемы, что позволяет мне суммировать стоимость и стоимость доставки в поле « Общая стоимость» .
Хорошо знать Код предназначен для использования с IssueUpdatedсобытием. Если для запуска скрипта используется дополнительный пользователь, можно установить overrideScreenSecurityсвойство для изменения полей, которых нет на текущем экране. final projectKey = "TEST"
// get custom fields def customFields = get("/rest/api/2/field") .asObject(List) .body .findAll { (it as Map).custom } as List
def input1CfId = customFields.find { it.name == 'Custom Field 1' }?.id def input2CfId = customFields.find { it.name == 'Custom Field 2' }?.id def outputCfId = customFields.find { it.name == 'Output Custom Field' }?.id
def fields = issue.fields as Map def project = fields.project as Map
if (issue == null || project.key != projectKey) { logger.info("Wrong Project ${project.key}") return }
def input1 = fields[input1CfId] as Integer def input2 = fields[input2CfId] as Integer
if (input1 == null || input2 == null) { logger.info("Calculation using ${input1} and ${input2} was not possible") return }
def output = input1 + input2
if (output == (fields[outputCfId] as Integer)) { logger.info("already been updated") return }
put("/rest/api/2/issue/${issue.key}") //.queryString("overrideScreenSecurity", Boolean.TRUE) .header("Content-Type", "application/json") .body([ fields: [ (outputCfId): output ] ]) .asString()