Forums

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

Setting Assignee using Listener for "Issue Updated" event

Shrikant Pandurang Mandlik June 29, 2023

Hello,

Can you please give me script for Listener by which I can set assignee for "Issue Updated" Event. In post-function we can directly use issue.setAssignee() but the same function is not applicable in Listener.

For each case in Script, I need different user assigned for each selection and I am not able find the appropriate solution. Can you please recorrect this script or maybe just provide me lines that can be used in the Cases.

My script is given below :

 

import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.CustomFieldManager;
import com.atlassian.jira.user.util.UserManager
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.ModifiedValue
import com.atlassian.jira.issue.util.DefaultIssueChangeHolder



UserManager userManager =   ComponentAccessor.getUserManager();
Issue issue = event.getIssue();
MutableIssue mutableIssue = null;


def issueManager = ComponentAccessor.getIssueManager()
def customFieldManager = ComponentAccessor.getCustomFieldManager()
//def cField = customFieldManager.getCustomFieldObjectsByName("Team:Task")
def cField = customFieldManager.getCustomFieldObject("customfield_29500")
log.warn(cField)
//log.warn(cField2)

def currentIssue = issueManager.getIssueObject(issue.getKey()) as Issue
log.warn(issue)

Map temp=currentIssue.getCustomFieldValue(cField) as Map
log.warn(temp)
log.warn(temp.get(0).toString())
log.warn(temp.get(1).toString())
def cFieldValue = temp.get(null).toString()
def secondValue=temp.get('1').toString()

def team = customFieldManager.getCustomFieldObject("customfield_28112")



def Cobolepic = issueManager.getIssueObject("GOXFUNC-5611")
log.warn(Cobolepic)
def Backdeskepic = issueManager.getIssueObject("GOXFUNC-6635")
def Javaepic = issueManager.getIssueObject("GOXFUNC-6633")
def KMToolsepic = issueManager.getIssueObject("GOXFUNC-6634")
def UCDepic = issueManager.getIssueObject("GOXFUNC-6488")
def ProductionLineepic = issueManager.getIssueObject("GOXFUNC-5435")
def issueService = ComponentAccessor.getIssueService()

def epicLink = customFieldManager.getCustomFieldObjects(currentIssue).find { it.name == 'Epic Link' }



def CobolTeam=ComponentAccessor.userManager.getUserByName("x-cteam")
def BasisTeamComponentAccessor.userManager.getUserByName("x-bteam")
def JavaTeam=ComponentAccessor.userManager.getUserByName("x-jteam")
//def KMToolsTeam=ComponentAccessor.userManager.getUserByName("x-kteam")
def UCDTeam=ComponentAccessor.userManager.getUserByName("x-uteam")
def ProductionLineTeam=ComponentAccessor.userManager.getUserByName("x-pteam")

switch(cFieldValue){
   
    case "COBOL/DBA/Mainframe Team":
   
 //   issue.setAssignee(CobolTeam)
    team.updateValue(null, issue, new ModifiedValue(issue.getCustomFieldValue(team), "COBOL/DBA/Mainframe Team"), new DefaultIssueChangeHolder())
    epicLink.updateValue(null, currentIssue, new ModifiedValue(currentIssue.getCustomFieldValue(epicLink),Cobolepic),new DefaultIssueChangeHolder())
    def user = userManager.getUserByName("x-cteam")
    def validateAssignResult = issueService.validateAssign(user, issue.id, "x-cteam")
    break;

   
    break
     
   
    case "UCD Team":
 //   issue.setAssignee(UCDTeam)
  //      mutableIssue.setAssignee(UCDTeam)
        team.updateValue(null, issue, new ModifiedValue(issue.getCustomFieldValue(team), "UCD Team"), new DefaultIssueChangeHolder())
    epicLink.updateValue(null, issue, new ModifiedValue(issue.getCustomFieldValue(epicLink),UCDepic),new DefaultIssueChangeHolder())
    def user = userManager.getUserByName("x-uteam")
    def validateAssignResult = issueService.validateAssign(user, issue.id, "x-uteam")
    break;
   
   
    case "Java Team":
 //   issue.setAssignee(JavaTeam)
// mutableIssue.setAssignee(JavaTeam)
        team.updateValue(null, issue, new ModifiedValue(issue.getCustomFieldValue(team), "Java Team"), new DefaultIssueChangeHolder())
        epicLink.updateValue(null, issue, new ModifiedValue(issue.getCustomFieldValue(epicLink),Javaepic),new DefaultIssueChangeHolder())
        def user = userManager.getUserByName("x-jteam")
    def validateAssignResult = issueService.validateAssign(user, issue.id, "x-jteam")
    break;
   
    case "BASIS-Team":
//    issue.setAssignee(BasisTeam)
 //   issue.setPriorityId("11201")
 //mutableIssue.setAssignee(BasisTeam)
    team.updateValue(null, issue, new ModifiedValue(issue.getCustomFieldValue(team), "Backdesk Team"), new DefaultIssueChangeHolder())
    epicLink.updateValue(null, currentIssue, new ModifiedValue(currentIssue.getCustomFieldValue(epicLink),Backdeskepic),new DefaultIssueChangeHolder())
    def user = userManager.getUserByName("x-bteam")
    def validateAssignResult = issueService.validateAssign(user, issue.id, "x-bteam")
    break;
/*    
    case "KM-Tools Team":
    issue.setAssignee(KMToolsTeam)
    issue.setPriorityId("11201")
    team.updateValue(null, issue, new ModifiedValue(issue.getCustomFieldValue(team), "KM-Tools Team"), new DefaultIssueChangeHolder())
    epicLink.updateValue(null, currentIssue, new ModifiedValue(currentIssue.getCustomFieldValue(epicLink),KMToolsepic),new DefaultIssueChangeHolder())
*/
    break;
   
    case "PL/Infra/KM":
  //  issue.setAssignee(ProductionLineTeam)
      ProductionLineTeam == issue.assignee
    team.updateValue(null, issue, new ModifiedValue(issue.getCustomFieldValue(team), "Production Line Team"), new DefaultIssueChangeHolder())
    epicLink.updateValue(null, currentIssue, new ModifiedValue(currentIssue.getCustomFieldValue(epicLink),ProductionLineepic),new DefaultIssueChangeHolder())
    def user = userManager.getUserByName("x-pteam")
    def validateAssignResult = issueService.validateAssign(user, issue.id, "x-pteam")
    break;
   
    case "Others":
  //  issue.setAssignee(ProductionLineTeam)
  ProductionLineTeam == issue.assignee
      team.updateValue(null, issue, new ModifiedValue(issue.getCustomFieldValue(team), "Other"), new DefaultIssueChangeHolder())
      def user = userManager.getUserByName("x-pteam")
    def validateAssignResult = issueService.validateAssign(user, issue.id, "x-pteam")
               break;
   
}
   

1 answer

1 accepted

0 votes
Answer accepted
Evgenii
Community Champion
June 29, 2023

Hi, @Shrikant Pandurang Mandlik 

Here, try this. I took your script as example, and slightly refactored it. 

/*
* Created 2023.
* @author Evgeniy Isaenkov
* @github https://github.com/Udjin79/SRUtils
*/

import com.atlassian.jira.event.type.EventDispatchOption
import com.atlassian.jira.issue.IssueManager
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.issue.fields.CustomField
import com.atlassian.jira.issue.index.IssueIndexingService
import com.atlassian.jira.user.ApplicationUser
import com.atlassian.jira.user.util.UserManager

UserManager userManager = ComponentAccessor.getUserManager()
IssueManager issueManager = ComponentAccessor.getIssueManager()
CustomFieldManager customFieldManager = ComponentAccessor.getCustomFieldManager()
IssueIndexingService issueIndexingService = ComponentAccessor.getComponent(IssueIndexingService)

MutableIssue issue = issueManager.getIssueObject(event.getIssue().getKey())

CustomField cField = customFieldManager.getCustomFieldObject("customfield_29500")
CustomField team = customFieldManager.getCustomFieldObject("customfield_28112")
CustomField epicLink = customFieldManager.getCustomFieldObject("Epic Link")

Map temp = issue.getCustomFieldValue(cField) as Map
String cFieldValue = temp.get(null).toString()

Map variables = [
"COBOL/DBA/Mainframe Team": ["GOXFUNC-5611", "x-cteam", "COBOL/DBA/Mainframe Team"],
"BASIS-Team" : ["GOXFUNC-6635", "x-bteam", "Backdesk Team", 11201],
"UCD Team" : ["GOXFUNC-6488", "x-uteam", "UCD Team"],
"Java Team" : ["GOXFUNC-6633", "x-jteam", "Java Team"],
"KM-Tools Team" : ["GOXFUNC-6634", "x-kteam", "KM-Tools Team", 11201],
"PL/Infra/KM" : ["GOXFUNC-5435", "x-pteam", "Production Line Team"],
"Others" : [null, "x-pteam", "Other"]
]

if (cFieldValue in variables.keySet()) {
ApplicationUser assignee = userManager.getUserByName(variables[cFieldValue][1])
issue.setAssignee(assignee)
if (variables[cFieldValue][3]) {
issue.setPriorityId(variables[cFieldValue][3])
}
issue.setCustomFieldValue(team, variables[cFieldValue][2])
if (variables[cFieldValue][0]) {
MutableIssue epicIssue = issueManager.getIssueObject(variables[cFieldValue][0])
issue.setCustomFieldValue(epicLink, epicIssue)
}
ApplicationUser user = userManager.getUserByName("x-bteam")
issueManager.updateIssue(user, issue, EventDispatchOption.DO_NOT_DISPATCH, false)
issueIndexingService.reIndex(issue)
}
Evgenii
Community Champion
June 29, 2023

One small notice - please, don's start variables names from caps letters, like BasisTeam, JavaTeam. They can be mixed up with Java classes names. 

Commonly used naming is variableName, like customField, epicName, teamLead and so on.

Shrikant Pandurang Mandlik June 30, 2023

Hi @Evgenii 

Thank you for the suggestion and script. I'll check it out and will let you know if it's working or not.

Thank you!

Best Regards,
Shrikant Mandlik

Shrikant Pandurang Mandlik July 3, 2023

Hi @Evgenii ,

The Script you have provided is showing error "cannot find matching method" for the below lines :

ApplicationUser assignee = userManager.getUserByName(variables[cFieldValue][1])
issue.setPriorityId(variables[cFieldValue][3])
MutableIssue epicIssue = issueManager.getIssueObject(variables[cFieldValue][0])
Can you please resend the script. It would really help me.
Thanks in Advance!
Best Regards,
Shrikant Mandlik
Evgenii
Community Champion
July 3, 2023

Hi, @Shrikant Pandurang Mandlik 

Can you tell, what type of custom field are you using here? 

CustomField cField = customFieldManager.getCustomFieldObject("customfield_29500")

 It's single select field, or radio-button,  or multi-select field? It's the only bottleneck, that I see

Shrikant Pandurang Mandlik July 3, 2023

Hi @Evgenii ,

 

It is "Select List (cascading)" type of field.

Evgenii
Community Champion
July 4, 2023

Ok, got it. Found error with type of value, for priorityId. Fixed it. In current script issues are changed under permissions of users, set in dictionary (different for everey team). If you want to use service acount, to change issues, modifie line 54, add there username of service account, instead of value from dictionary.

/*
* Created 2023.
* @author Evgeniy Isaenkov
* @github https://github.com/Udjin79/SRUtils
*/

import com.atlassian.jira.event.type.EventDispatchOption
import com.atlassian.jira.issue.IssueManager
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.issue.fields.CustomField
import com.atlassian.jira.issue.index.IssueIndexingService
import com.atlassian.jira.user.ApplicationUser
import com.atlassian.jira.user.util.UserManager

UserManager userManager = ComponentAccessor.getUserManager()
IssueManager issueManager = ComponentAccessor.getIssueManager()
CustomFieldManager customFieldManager = ComponentAccessor.getCustomFieldManager()
IssueIndexingService issueIndexingService = ComponentAccessor.getComponent(IssueIndexingService)

MutableIssue issue = issueManager.getIssueObject(event.getIssue().getKey())

CustomField cField = customFieldManager.getCustomFieldObject("customfield_29500")
CustomField team = customFieldManager.getCustomFieldObject("customfield_28112")
CustomField epicLink = customFieldManager.getCustomFieldObject("Epic Link")

Map temp = issue.getCustomFieldValue(cField) as Map
String cFieldValue = temp.get(null).toString()

Map<String, List<String>> variables = [
"COBOL/DBA/Mainframe Team": ["GOXFUNC-5611", "x-cteam", "COBOL/DBA/Mainframe Team"],
"BASIS-Team" : ["GOXFUNC-6635", "x-bteam", "Backdesk Team", "11201"],
"UCD Team" : ["GOXFUNC-6488", "x-uteam", "UCD Team"],
"Java Team" : ["GOXFUNC-6633", "x-jteam", "Java Team"],
"KM-Tools Team" : ["GOXFUNC-6634", "x-kteam", "KM-Tools Team", "11201"],
"PL/Infra/KM" : ["GOXFUNC-5435", "x-pteam", "Production Line Team"],
"Others" : [null, "x-pteam", "Other"]
]

if (cFieldValue in variables.keySet()) {
ApplicationUser assignee = userManager.getUserByName(variables[cFieldValue][1])
issue.setAssignee(assignee)
if (variables[cFieldValue][3]) {
issue.setPriorityId(variables[cFieldValue][3])
}
issue.setCustomFieldValue(team, variables[cFieldValue][2])
if (variables[cFieldValue][0]) {
MutableIssue epicIssue = issueManager.getIssueObject(variables[cFieldValue][0])
issue.setCustomFieldValue(epicLink, epicIssue)
}
// Set here username of service account, for changing issues (if needed)
ApplicationUser user = userManager.getUserByName(variables[cFieldValue][1])
issueManager.updateIssue(user, issue, EventDispatchOption.DO_NOT_DISPATCH, false)
issueIndexingService.reIndex(issue)
}
Shrikant Pandurang Mandlik July 6, 2023

Hi @Evgenii ,

Sorry for the late reply, This script is working fine. Thank you so much for your help. You are great!

 

Best Regards,
Shrikant Mandlik

Like Evgenii likes this

Suggest an answer

Log in or Sign up to answer