Закройте эпос, когда все вопросы, связанные с этим эпиком, закрыты - malikovalibek/groovyForJira GitHub Wiki

Обзор Переключите эпос в Closed с помощью функции публикации на шаге рабочего процесса Closed, которая запускается, когда все дочерние задачи закрываются.

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

Хорошо знать При изменении issueLinkNameсценария можно использовать сценарий для перехода исходной проблемы в связанные отношения, отличные от эпических. Действие « Закрыть» должно иметь связанный экран перехода, чтобы установить разрешение. По умолчанию этот сценарий будет иметь разрешение « Готово», но его можно настроить. С участием ScriptRunner для Jira от Adaptavist

Создано 1 год назад , Обновлено 1 день назад

Код сервера Код центра обработки данных

Требования Jira SoftwareПрограммное обеспечение Jira (7.7 - 8.6)

import com.atlassian.jira.component.ComponentAccessor import com.atlassian.jira.workflow.TransitionOptions

// the name of the action you want to move the issue to final actionName = 'Close'

//Name of the resolution children issues should have final resolutionName = 'Done'

// the name of the issue link final issueLinkName = 'Epic-Story Link'

def workflow = ComponentAccessor.workflowManager.getWorkflow(issue) def actionId = workflow.allActions.findByName(actionName)?.id def issueLinkManager = ComponentAccessor.issueLinkManager

def epicIssue = issueLinkManager.getInwardLinks(issue.id).find { it.issueLinkType.name == issueLinkName }?.sourceObject if (!epicIssue) { return }

// Find all the linked - with the "Epic-Story Link" link - issues that their status is not the same as resolutionName

def linkedIssues = issueLinkManager .getOutwardLinks(epicIssue.id) .findAll { it.issueLinkType.name == issueLinkName } *.destinationObject?.findAll { it.resolution?.name != resolutionName }

// If there are still open linked issues (except the one in transition) - then do nothing

if (linkedIssues - issue) { return }

def issueService = ComponentAccessor.issueService def issueInputParameters = issueService.newIssueInputParameters()

issueInputParameters.setComment('This Epic closed automatically because all the issues in this Epic are closed.') issueInputParameters.setSkipScreenCheck(true)

def transitionOptions = new TransitionOptions.Builder() .skipConditions() .skipPermissions() .skipValidators() .build()

def loggedInUser = ComponentAccessor.jiraAuthenticationContext.loggedInUser def transitionValidationResult = issueService.validateTransition(loggedInUser, epicIssue.id, actionId, issueInputParameters, transitionOptions) assert transitionValidationResult.isValid(): transitionValidationResult.errorCollection

def result = issueService.transition(loggedInUser, transitionValidationResult) assert result.isValid(): result.errorCollection