I am looking to update the Tempo Account field of any issue added to an Epic. This works if I go directly from the Epic, but if I add the Epic Name to an issue the Account field is not updated.
I'm using the ScriptRunner Listener listening for IssueLinkCreatedEvent
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.ModifiedValue
import com.atlassian.jira.issue.util.DefaultIssueChangeHolder
import com.onresolve.scriptrunner.runner.customisers.PluginModule
import com.onresolve.scriptrunner.runner.customisers.WithPlugin
import com.tempoplugin.accounts.account.api.AccountService
import com.tempoplugin.accounts.account.api.Account
import org.apache.log4j.Logger
import org.apache.log4j.Level
log.setLevel(Level.INFO)
@WithPlugin(["com.tempoplugin.tempo-accounts"])
@PluginModule
AccountService accountService
def issue = event.getIssueLink().getSourceObject()
def destIssue = event.getIssueLink().getDestinationObject()
if (issue.issueType.name != "Epic") {
return
}
def customFieldManager = ComponentAccessor.customFieldManager
def accountField = customFieldManager.getCustomFieldObjects(issue).find { it.name == "Account" }
def destAccountField = customFieldManager.getCustomFieldObjects(destIssue).find { it.name == "Account" }
def account = issue.getCustomFieldValue(accountField) as Account
log.info("Destination Issue: "+destIssue)
if(destIssue){
if(event.getIssueLink().getIssueLinkType().outward == "is Epic of"){
def selectedAccountOnLinkedIssue = destIssue.getCustomFieldValue(destAccountField)
accountField.updateValue(null, destIssue, new ModifiedValue(selectedAccountOnLinkedIssue, account), new DefaultIssueChangeHolder())
}
}
log.info("Link Type of "+destIssue+" is "+event.getIssueLink().getIssueLinkType().outward)
I was able to get this working. There are still tweaks, but this worked.
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.ModifiedValue
import com.atlassian.jira.issue.util.DefaultIssueChangeHolder
import com.onresolve.scriptrunner.runner.customisers.PluginModule
import com.onresolve.scriptrunner.runner.customisers.WithPlugin
import com.tempoplugin.accounts.account.api.AccountService
import com.tempoplugin.accounts.account.api.Account
import org.apache.log4j.Logger
import org.apache.log4j.Level
import com.atlassian.jira.issue.changehistory.ChangeHistoryItem
import com.atlassian.jira.issue.link.IssueLinkType
import com.atlassian.jira.issue.Issue
log.setLevel(Level.INFO)
@WithPlugin(["com.tempoplugin.tempo-accounts"])
@PluginModule
AccountService accountService
def customFieldManager = ComponentAccessor.customFieldManager
def update = event.getIssue()
def updateID = event.getIssue().id
def changeHistoryManager = ComponentAccessor.getChangeHistoryManager()
def changeLogs = event.getChangeLog()
List<ChangeHistoryItem> changedItem = changeHistoryManager.getAllChangeItems(update).findAll { it.changeGroupId == changeLogs.id }
def epicLink = customFieldManager.getCustomFieldObjects(update).find { it.name == "Epic Link" }
String epicLinkValue = update.getCustomFieldValue(epicLink)
def epicIssue = update.getCustomFieldValue(epicLink) as Issue
def epicNameField = customFieldManager.getCustomFieldObjects(epicIssue).find{it.name=="Epic Name"}
String epicIssueName = epicIssue.getCustomFieldValue(epicNameField) as String
def accountField = customFieldManager.getCustomFieldObjects(epicIssue).find { it.name == "Account" }
def destAccountField = customFieldManager.getCustomFieldObjects(update).find { it.name == "Account" }
def account = epicIssue.getCustomFieldValue(accountField) as Account
def account2 = update.getCustomFieldValue(accountField) as Account
def issueLinkManager = ComponentAccessor.getIssueLinkManager()
def issuesInEpic = new ArrayList<Issue>()
def test = issueLinkManager.getInwardLinks(update.id)*.getDestinationObject()
def test2 = issueLinkManager.getInwardLinks(update.id)*.getSourceObject()
log.info (test)
log.info(test2)
issueLinkManager.getOutwardLinks(epicIssue.id).each {issueLink ->;
if (issueLink.issueLinkType.name == "Epic-Story Link") {
Issue linkedIssue = issueLink.destinationObject
log.info("epic-story link")
log.info(linkedIssue)
if(update in linkedIssue&&account2==null&&epicNameField!=null){
log.info("update in linkedissue")
def selectedAccountOnLinkedIssue = update.getCustomFieldValue(destAccountField)
accountField.updateValue(null, update, new ModifiedValue(selectedAccountOnLinkedIssue, account), new DefaultIssueChangeHolder())
}
}
}
Online forums and learning are now in one easy-to-use experience.
By continuing, you accept the updated Community Terms of Use and acknowledge the Privacy Policy. Your public name, photo, and achievements may be publicly visible and available in search engines.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.