Forums

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

Values in two user picker Custom fields should be copy to a multi user picker custom field

Satyanarayana Singamsetti December 24, 2019

Hi ,

I need the code for Copy the value of two user-pickers custom field values into another custom field which is a multi user picker.

ex: CF1: user1, CF2: user2 and for CF3 the value should be as "user1,user2". CF3 is a User Picker (multiple users).

Note: CF3 will be empty during creation of issue. during the flow of issue once CF1 and CF2 gets values by the code CF3 should populate the merged value.

I tried with this below code but not worked :(

package UpdateIssue
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.event.type.EventDispatchOption
import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.issue.IssueManager
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.issue.util.DefaultIssueChangeHolder
import com.atlassian.jira.issue.UpdateIssueRequest
import com.atlassian.jira.issue.fields.CustomField
import com.atlassian.jira.project.Project
import com.atlassian.jira.user.ApplicationUser
import com.atlassian.jira.issue.ModifiedValue

IssueManager issueManager = ComponentAccessor.getIssueManager();
MutableIssue issue = issueManager.getIssueObject("TKT-16")
if (issue)
{
CustomFieldManager customFieldManager = ComponentAccessor.getCustomFieldManager();

CustomField cstFld1 = customFieldManager.getCustomFieldObject("Customfield_1123")
CustomField cstFld2 = customFieldManager.getCustomFieldObject("Customfield_1123")
CustomField cstFld3 = customFieldManager.getCustomFieldObject("Customfield_1144")

ApplicationUser curUser = ComponentAccessor.getJiraAuthenticationContext().getUser();
UpdateIssueRequest updateIssueRequest = new UpdateIssueRequest(new UpdateIssueRequest.UpdateIssueRequestBuilder().eventDispatchOption(EventDispatchOption.ISSUE_UPDATED).sendMail(false))

// issue.setCustomFieldObject(cstFld1.getValue(issue).toString() + "," + cstFld2.getValue(issue).toString())
def CR = (cstFld1.getValue(issue).toString() + "," + cstFld2.getValue(issue).toString())
def changeHolder = new DefaultIssueChangeHolder()
cstFld3.updateValue(null, issue, new ModifiedValue(cstFld3,CR),changeHolder)
}

 

Getting this error

MUPERROR.png

I know why i get this error because

cstFld3 is Customfield with user picker and  CR is a string value, but don't know how to make string to custom field value(user picker).

Could some one help me on it.

Thanks in advance

2 answers

2 accepted

0 votes
Answer accepted
Satyanarayana Singamsetti December 26, 2019

Thanks @Sreenivasaraju P , used your idea with different approach

 

 

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.issue.IssueManager
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.ComponentManager
import com.atlassian.jira.issue.fields.CustomField
import com.atlassian.jira.issue.MutableIssue;
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.user.ApplicationUser
import com.atlassian.jira.event.type.*
import com.atlassian.crowd.embedded.api.User;
import com.atlassian.jira.issue.ModifiedValue
import com.atlassian.jira.issue.util.DefaultIssueChangeHolder
import com.atlassian.jira.user.ApplicationUser;

log.info(issue.getKey())
def changeHolder = new DefaultIssueChangeHolder()
def issueManager = ComponentAccessor.getIssueManager();
def customFieldManager = ComponentAccessor.getCustomFieldManager()
def user = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()
//MutableIssue issue = issueManager.getIssueByCurrentKey("ARLOANDRD-1289")
String selectedIssueType = issue.issueTypeObject.name
if(selectedIssueType == "Bug" ||selectedIssueType == "Story"|| selectedIssueType == "Task"){
def CodeReviewer1 = customFieldManager.getCustomFieldObjectByName("Code Reviewer(One)")
def CodeReviewer2 = customFieldManager.getCustomFieldObjectByName("Code Reviewer(Two)")
log.info(CodeReviewer1)
log.info(CodeReviewer2)
def codeReviewers = customFieldManager.getCustomFieldObjects(issue).find {it.name == "Code Reviewer(s)"}
log.info(codeReviewers)
def crV1 = issue.getCustomFieldValue(CodeReviewer1) as ApplicationUser
def crV2 = issue.getCustomFieldValue(CodeReviewer2) as ApplicationUser
def crsV = issue.getCustomFieldValue(codeReviewers) as List
log.info(crV1)
log.info(crV2)
log.info(crsV)
List userList = []
if(crsV != null)
{
userList = crsV
if(crV1 != null){
userList.add(crV1)
}
if(crV2 != null)
{
userList.add(crV2)
}
log.info(userList.unique())
}else{
if(crV1 != null && crV2 != null){
userList.addAll([crV1,crV2])
log.info(userList.unique())
}
}
if(codeReviewers != null && userList != null){
//issue.setCustomFieldValue(codeReviewers, userList.unique() )
//issueManager.updateIssue(user, issue, EventDispatchOption.ISSUE_ASSIGNED, false)
codeReviewers.updateValue(null, issue, new ModifiedValue(issue.getCustomFieldValue(codeReviewers), userList.unique()),changeHolder)
}
}

 

 

Its working fine :)

0 votes
Answer accepted
Sreenivasaraju P
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
December 25, 2019

Hi @Satyanarayana Singamsetti ,

You can do other way around.  

  1. Get the application users from your source fields (from single user picker fields in your case cstFld1 , cstFld2)
    ApplicationUser userValue1 = (ApplicationUser)mIssue.getCustomFieldValue(cstFld1 );
    ApplicationUser userValue2 = (ApplicationUser)mIssue.getCustomFieldValue(cstFld2 );
  2.  Get the collection of application users from destination field (in your case cstFld3). 
    Collection<ApplicationUser> usersList = (Collection<ApplicationUser>)mIssue.getCustomFieldValue(cstFld3 );
  3. Add the application users to the userlist.
    usersList.add(userValue1 );
    usersList.add(userValue2 );
  4. set the custom field value of the with the user list.
    mIssue.setCustomFieldValue(cstFld3,usersList);

 

I hope this may help you.

Satyanarayana Singamsetti December 26, 2019

Thanks for the reply @Sreenivasaraju P 

I tried but getting this error

Script console script failed: java.lang.NullPointerException

and multi-user field didn't updated with users

Satyanarayana Singamsetti December 26, 2019

Got the code.

Suggest an answer

Log in or Sign up to answer