You're on your way to the next level! Join the Kudos program to earn points and save your progress.
Level 1: Seed
25 / 150 points
Next: Root
1 badge earned
Challenges come and go, but your rewards stay with you. Do more to earn more!
What goes around comes around! Share the love by gifting kudos to your peers.
Keep earning points to reach the top of the leaderboard. It resets every quarter so you always have a chance!
Join now to unlock these features and more
The Atlassian Community can help you and your team get more value out of Atlassian products and practices.
My requirement is to copy Text field data into USer picker field. Text Field data has single email address.
When I used script runner "Copy custom field" option it gave me type casting error.
Can anyone please help me with groovy script which will help me to update the same. We have around 30k+ records which need to be updated.
To expand on @Vasiliy Zverev's answer a bit, you could get the results of a JQL query in a console script, then iterate through the list of values to update them.
import com.atlassian.jira.component.ComponentAccessor import com.atlassian.jira.event.type.EventDispatchOption import com.atlassian.jira.issue.CustomFieldManager import com.atlassian.jira.issue.UpdateIssueRequest import com.atlassian.jira.issue.search.SearchProvider import com.atlassian.jira.jql.parser.JqlQueryParser import com.atlassian.jira.security.JiraAuthenticationContext import com.atlassian.jira.web.bean.PagerFilter def jqlQueryParser = ComponentAccessor.getComponent(JqlQueryParser) def searchProvider = ComponentAccessor.getComponent(SearchProvider) def issueManager = ComponentAccessor.getIssueManager() def jiraAuthenticationContext = ComponentAccessor.getJiraAuthenticationContext() def user = jiraAuthenticationContext.getUser() // edit this query to suit def query = jqlQueryParser.parseQuery("summary is not EMPTY") def results = searchProvider.search(query, user, PagerFilter.getUnlimitedFilter()) log.debug("Total issues: ${results.total}") def customFieldManager = ComponentAccessor.getCustomFieldManager() def cfUser = customFieldManager.getCustomFieldObjectByName("userFiledName") def cfEmail = customFieldManager.getCustomFieldObjectByName("emaiFiledName") def emailUserMap = ComponentAccessor.getUserManager().getAllApplicationUsers().collectEntries { [(user.getEmailAddress()): user] } results.getIssues().each { documentIssue -> log.debug(documentIssue.key) // if you need a mutable issue you can do: def issue = issueManager.getIssueObject(documentIssue.id) issue.setCustomFieldValue(cfUser, emailUserMap.get(issue.getCustomFieldValue(cfEmail))) UpdateIssueRequest updateIssueRequest = UpdateIssueRequest.builder().eventDispatchOption(EventDispatchOption.ISSUE_UPDATED).sendMail(false).build() issueManager.updateIssue(user, issue, updateIssueRequest) // do something to the issue... log.debug(issue.summary) }
Here is script for script console to update single issue
import com.atlassian.jira.component.ComponentAccessor import com.atlassian.jira.event.type.EventDispatchOption import com.atlassian.jira.issue.MutableIssue import com.atlassian.jira.issue.UpdateIssueRequest import com.atlassian.jira.issue.fields.CustomField import com.atlassian.jira.user.ApplicationUser Map<String, ApplicationUser> emailUserMap = new HashMap<>(); for(ApplicationUser user: ComponentAccessor.getUserManager().getAllApplicationUsers()){ emailUserMap.put(user.getEmailAddress(), user) } CustomField cfUser = ComponentAccessor.getCustomFieldManager().getCustomFieldObjectByName("userFiledName") CustomField cfEmail = ComponentAccessor.getCustomFieldManager().getCustomFieldObjectByName("emaiFiledName") MutableIssue issue = ComponentAccessor.getIssueManager().getIssueObject("issueKey"); issue.setCustomFieldValue( cfUser , emailUserMap.get(issue.getCustomFieldValue(cfEmail)) ) UpdateIssueRequest updateIssueRequest = UpdateIssueRequest.builder().eventDispatchOption(EventDispatchOption.ISSUE_UPDATED).sendMail(false).build() ComponentAccessor.getIssueManager().updateIssue( ComponentAccessor.getJiraAuthenticationContext().getUser() , issue , updateIssueRequest )
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You've answered your own question really. Fields have to contain compatible data types for a simple copy to work. A text string is not a user object.
You'll need to write a bit of code that can look up the email address, and find a user with that email address (you'll need to check for duplicates with a rule, even if it's just "the first one I find")
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.