Forums

Articles
Create
cancel
Showing results for 
Search instead for 
Did you mean: 

Scriptrunner custom listener -- Update newly linked Issue in Epic

Raynard Rhodes
Contributor
July 9, 2019

I am attempting to use scriptrunners custom listener to update a new issue in epic "account" custom field. It doesn't function, but scriptrunner doesn't show a failure.

The Event is "IssueLinkCreatedEvent"

 

Edit: I am trying to access the value of the Tempo customfield "Account"

 

import com.atlassian.jira.event.issue.link.IssueLinkCreatedEvent import com.atlassian.jira.event.issue.link.IssueLinkDeletedEvent import org.apache.log4j.Logger import org.apache.log4j.Level import com.atlassian.jira.component.ComponentAccessor import com.atlassian.jira.issue.CustomFieldManager import com.atlassian.jira.issue.ModifiedValue import com.atlassian.jira.issue.util.DefaultIssueChangeHolder import com.atlassian.jira.issue.index.IssueIndexingService import com.atlassian.jira.util.ImportUtils import com.atlassian.jira.issue.MutableIssue import com.atlassian.jira.event.type.EventDispatchOption import com.atlassian.jira.issue.util.IssueChangeHolder def log = Logger.getLogger(com.atlassian.jira.event.issue.link.IssueLinkCreatedEvent) log.setLevel(Level.INFO) if ([IssueLinkCreatedEvent].contains(event.getClass())) { if (event.issueLink.issueLinkType.name == "Epic-Story Link") { def currentUser = ComponentAccessor.jiraAuthenticationContext.loggedInUser def issueManager = ComponentAccessor.getIssueManager() def cfManager = ComponentAccessor.getCustomFieldManager() def accountField = cfManager.getCustomFieldObjects(event.issueLink.sourceObject)?.find{it.name == "Account"} def linkedField = cfManager.getCustomFieldObjects(event.issueLink.destinationObject)?.find{it.name == "Account"} MutableIssue issueInEpic = event.issueLink.destinationObject as MutableIssue MutableIssue epic = event.issueLink.sourceObject as MutableIssue def newCfValue = accountField.getValue(epic) def oldCfValue = linkedField.getValue(issueInEpic) issueInEpic.setCustomFieldValue(linkedField, newCfValue) issueManager.updateIssue(currentUser, issueInEpic, EventDispatchOption.DO_NOT_DISPATCH, false) def issueIndexingService = ComponentAccessor.getComponent(IssueIndexingService.class) def wasIndexing = ImportUtils.isIndexIssues() ImportUtils.setIndexIssues(true) issueIndexingService.reIndex(event.issueLink.destinationObject) ImportUtils.setIndexIssues(wasIndexing) log.info(accountField) log.info(newCfValue) log.info(oldCfValue) log.info(issueInEpic) log.info(epic) log.info(linkedField) } }

2 answers

0 votes
Eileen McEneaney August 14, 2023

I don't think this script works.....

0 votes
Raynard Rhodes
Contributor
July 10, 2019

I'm unable to edit the code properly so I'll place the updated information here.

import com.atlassian.jira.event.issue.link.IssueLinkCreatedEvent
import com.atlassian.jira.event.issue.link.IssueLinkDeletedEvent
import org.apache.log4j.Logger
import org.apache.log4j.Level

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.issue.ModifiedValue
import com.atlassian.jira.issue.util.DefaultIssueChangeHolder
import com.atlassian.jira.issue.index.IssueIndexingService
import com.atlassian.jira.util.ImportUtils
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.event.type.EventDispatchOption

import com.atlassian.jira.issue.util.IssueChangeHolder


def log = Logger.getLogger(com.atlassian.jira.event.issue.link.IssueLinkCreatedEvent)
log.setLevel(Level.INFO)


if ([IssueLinkCreatedEvent].contains(event.getClass())) {


if (event.issueLink.issueLinkType.name == "Epic-Story Link") {
def currentUser = ComponentAccessor.jiraAuthenticationContext.loggedInUser
def issueManager = ComponentAccessor.getIssueManager()
def cfManager = ComponentAccessor.getCustomFieldManager()
def accountField = cfManager.getCustomFieldObjects(event.issueLink.sourceObject)?.find{it.name == "Account"}
def linkedField = cfManager.getCustomFieldObjects(event.issueLink.destinationObject)?.find{it.name == "Account"}
MutableIssue issueInEpic = event.issueLink.destinationObject as MutableIssue
MutableIssue epic = event.issueLink.sourceObject as MutableIssue
def newCfValue = accountField.getValue(epic)
def oldCfValue = linkedField.getValue(issueInEpic)


issueInEpic.setCustomFieldValue(linkedField, newCfValue)
issueManager.updateIssue(currentUser, issueInEpic, EventDispatchOption.DO_NOT_DISPATCH, false)


def issueIndexingService = ComponentAccessor.getComponent(IssueIndexingService.class)
def wasIndexing = ImportUtils.isIndexIssues()
ImportUtils.setIndexIssues(true)
issueIndexingService.reIndex(event.issueLink.destinationObject)
ImportUtils.setIndexIssues(wasIndexing)

log.info(accountField)
log.info(newCfValue)
log.info(oldCfValue)
log.info(issueInEpic)
log.info(epic)
log.info(linkedField)
}
}

Suggest an answer

Log in or Sign up to answer