Автоматизация суммы настраиваемых полей Epic - malikovalibek/groovyForJira GitHub Wiki

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

пример Есть проект, в котором есть настраиваемое поле «Стоимость». Это настраиваемое поле доступно для всех типов задач. Когда проблема или подзадача создается или обновляется, вы можете определить значение поля «Стоимость». Если проблема или подзадача связана с эпиком, поле «Стоимость» эпика рассчитывается автоматически, а результатом является сумма всех связанных проблем и полей «Стоимость» подзадач.

Хорошо знать Этот сценарий можно установить в качестве слушателя для «Проблема создана» и «Проблема обновлена». Таким образом, как только проблема будет создана или обновлена, значение поля суммы будет пересчитано. Проблемы, связанные с эпосом, являются дочерними по отношению к эпосу или дочерними по отношению к этим вопросам. Для этого используется «связанная проблема» JQL, но она необходима для избавления от самой эпической проблемы.

//Epic Link Custom Field ID final epicLinkCf = get("/rest/api/2/field") .asObject(List) .body .find { (it as Map).name == 'Epic Link' } as Map

//Number Custom Field ID final numberCf = get("/rest/api/2/field") .asObject(List) .body .find { (it as Map).name == '' } as Map

def issueFields = get("/rest/api/2/issue/$issue.key") .asObject(Map) .body .fields as Map

//If issue has no parent or is not related with an epic, the script will not be executed def issueParent = issueFields.find { it.key == 'parent' }?.value as Map def epicKey = issueFields.find { it.key == epicLinkCf.id }?.value if (!epicKey && !issueParent) { return }

//If the issue is sub-task, Epic Key is obtained from the parent issue if (issueParent) { def parentIssueField = get("/rest/api/2/issue/$issueParent.key") .asObject(Map) .body .fields as Map

epicKey = parentIssueField.find { it.key == epicLinkCf.id }.value

}

//Obtain all related epic issues, including sub-tasks def allChildIssues = get("/rest/api/2/search") .queryString('jql', "linkedissue = $epicKey") .header('Content-Type', 'application/json') .asObject(Map) .body .issues as List

def sum = 0 def issues = allChildIssues.findAll { it.key != epicKey }

issues.each { def fields = get("/rest/api/2/issue/$it.key") .header('Content-Type', 'application/json') .asObject(Map) .body .fields as Map def numberCfValue = fields[numberCf.id] ?: 0 sum += numberCfValue as Integer }

put("/rest/api/2/issue/$epicKey") .header("Content-Type", "application/json") .body([ fields: [ (numberCf.id): sum ] ]).asString()

⚠️ **GitHub.com Fallback** ⚠️