Hello everyone!
I need a help with the code for Script Runner.
I am trying to build the listener for the event of issue updated.
If the trigger issue is Epic I need to iterate through all issues in epic and copy custom field cf[10112] "Project team" to every issue in epic.
I know you can use
def query = jqlQueryParser.parseQuery("\"Epic Link\" in (${issue.key})")
def results = searchProvider.search(query, user, PagerFilter.getUnlimitedFilter())And then iterate with
results.getIssues().each{
} But, unfortunately, I lack the knowledge in overall ScriptRunner code logic.
Could you please help me with this task?
Thanks in advance!
Update (working code for custom listener of "issue updated" event):
import com.atlassian.jira.user.ApplicationUser
import com.atlassian.jira.bc.issue.search.SearchService
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.IssueManager
import com.atlassian.jira.issue.util.DefaultIssueChangeHolder
import com.atlassian.jira.issue.ModifiedValue
import com.atlassian.jira.issue.search.SearchProvider
import com.atlassian.jira.jql.parser.JqlQueryParser
import com.atlassian.jira.web.bean.PagerFilter
def issue = event.issue as Issue
if(issue.issueType.name=="Epic")
{
def jqlQueryParser = ComponentAccessor.getComponent(JqlQueryParser.class)
def searchProvider = ComponentAccessor.getComponent(SearchProvider.class)
def issueManager = ComponentAccessor.getIssueManager()
def user = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()
//def query = jqlQueryParser.parseQuery("\"Epic Link\" in (${issue.key})")
def query = jqlQueryParser.parseQuery("issue in childIssuesOf(\"${issue.key}\")")
def results = searchProvider.search(query, user, PagerFilter.getUnlimitedFilter())
log.error("List of epic children : " + results.getIssues())
def customFieldManager = ComponentAccessor.getCustomFieldManager()
int cfProjectTeamId = 10112
def cfProjectTeam = customFieldManager.getCustomFieldObject(cfProjectTeamId)
def cfProjectTeamValue = issue.getCustomFieldValue(cfProjectTeam)
log.error("Epic Project team : " + cfProjectTeamValue)
def changeHistoryManager = com.atlassian.jira.component.ComponentAccessor.getChangeHistoryManager()
results.getIssues().each {myIssue ->;
def docIssue = issueManager.getIssueObject(myIssue.id)
def cfProjectTeamCurrentValue = docIssue.getCustomFieldValue(cfProjectTeam)
log.error("Project team to be replaced : " + cfProjectTeamCurrentValue)
cfProjectTeam.updateValue(null, docIssue, new ModifiedValue(cfProjectTeamCurrentValue, cfProjectTeamValue), new DefaultIssueChangeHolder())
}
}