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())
}
}
}
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.