Create
cancel
Showing results for 
Search instead for 
Did you mean: 
Sign up Log in
Celebration

Earn badges and make progress

You're on your way to the next level! Join the Kudos program to earn points and save your progress.

Deleted user Avatar
Deleted user

Level 1: Seed

25 / 150 points

Next: Root

Avatar

1 badge earned

Collect

Participate in fun challenges

Challenges come and go, but your rewards stay with you. Do more to earn more!

Challenges
Coins

Gift kudos to your peers

What goes around comes around! Share the love by gifting kudos to your peers.

Recognition
Ribbon

Rise up in the ranks

Keep earning points to reach the top of the leaderboard. It resets every quarter so you always have a chance!

Leaderboard

Come for the products,
stay for the community

The Atlassian Community can help you and your team get more value out of Atlassian products and practices.

Atlassian Community about banner
4,644,335
Community Members
 
Community Events
196
Community Groups

ScriptRunner Listener: Copy free-text custom field value into a label custom field

Similar to: https://community.atlassian.com/t5/Jira-Core-questions/Copy-Custom-field-value-from-one-field-to-another/qaq-p/73207

However in my case I'm trying to copy a free-text custom field into a label custom field.

E.G. I've got a free-text custom field named "Country" that is auto-filled by a behavior mapped to a local gazetteer that I want to copy to a label custom field named "Country (Index)". The second thing I have to consider is that some values are multi-word... So I believe I would need to convert the value to HTML and substitute spaces with underscores like: "United_States".

Any suggestions would be greatly appreciated!

4 answers

2 accepted

1 vote
Answer accepted
Ivan Tovbin
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.
Mar 06, 2018

Hi Chase,

The difference between a free-text custom field and label custom field is that the former contains a string and the latter contains an array of Label objects. And so you need to treat these fields accordingly when setting their respective values.

As per LabelManager Interface documentation, addLabel method seems to be the one you need:

addLabel(ApplicationUser remoteUser, Long issueId, Long customFieldId, String label, boolean sendNotification)

 As you can see, you simply have to use your free-text custom field value as the 4th argument of this method and it should do it.

Can you give me an example of how this would be scripted?

E.G.

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.issue
import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.issue.label
import com.atlassian.jira.user

def country = getFieldById("Country")

def defaultValue = addLabel(ApplicationUser remoteUser, Long issueId, Long customFieldId, String label, boolean sendNotification)

 

I think I'm a bit lost, but not far from what I'm trying to accomplish. 

Ivan Tovbin
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.
Mar 07, 2018

Here's how you do it:

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.label.LabelManager

def currentUser = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()
def cfMgr = ComponentAccessor.getCustomFieldManager()
def country = issue.getCustomFieldValue(cfMgr.getCustomFieldObjectByName("Country"))
def labelCfId = cfMgr.getCustomFieldObjectByName("your label custom field name").getIdAsLong()
def labelMgr = ComponentAccessor.getComponent(LabelManager)

labelMgr.addLabel(currentUser, issue.getId(), labelCfId, country, false)

Ivan,

Thank you for your support! I see how far off I am now..

ScriptRunner is showing an error with this section:

 def country = issue.getCustomFieldValue(cfMgr.getCustomFieldObjectByName("Country"))

The error is "The variable [issue] is undeclared.  

What do you suggest?

Ivan Tovbin
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.
Mar 08, 2018

Oh, my bad. I've just realized that you want a listener and not a post function where 'issue' is pre-declared. But not to worry, it's an easy fix. Simply replace 'issue' in the code with 'event.issue'.

Ivan Tovbin
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.
Mar 08, 2018

@Chase B.

Great news! Please mark the solution as "Accepted" if it resolved your issue.

0 votes
Answer accepted

That worked but I had to make a few tweaks.

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.label.LabelManager

def currentUser = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()
def cfMgr = ComponentAccessor.getCustomFieldManager()
def country = event.issue.getCustomFieldValue(cfMgr.getCustomFieldObjectByName("Country"))toString().replaceAll(" ","_")
def labelCfId = cfMgr.getCustomFieldObjectByName("your label custom field name").getIdAsLong()
def labelMgr = ComponentAccessor.getComponent(LabelManager)

if (country == "null") { }else{
labelMgr.addLabel(currentUser, event.issue.getId(), labelCfId, country, false);
   }
Z B
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.
Mar 06, 2020

Hi Chase Brown,

thank you for this! I'm trying to run this as a listener but "import com.atlassian.jira.user" is causing an error:

The script could not be compiled:

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
Script397.groovy: 13: unable to resolve class com.atlassian.jira.user
 @ line 13, column 1.
   import com.atlassian.jira.user
   ^

1 error

As I understand, import com.atlassian.jira.user was replaced by Application user, but even if I insert all these into the beginning of the code, it still doesn't work:

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.issue.label.LabelManager
import com.atlassian.jira.security.Permissions
import com.atlassian.jira.event.type.EventDispatchOption
import com.atlassian.jira.user.ApplicationUser;
import com.atlassian.jira.user.util.UserUtil
import com.atlassian.jira.user.UserUtils
com.atlassian.jira.user.ApplicationUser
import com.atlassian.jira.user

Do you maybe have an idea how to solve this?

Like Z B likes this

There is also an option, to auto populate specific field from historical free text field (like summary or description) with ML1 plugin.  

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.label.LabelManager

def currentUser = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()
def cfMgr = ComponentAccessor.getCustomFieldManager()
def country = event.issue.getCustomFieldValue(cfMgr.getCustomFieldObjectByName("Country"))toString().replaceAll(" ","_")
def labelCfId = cfMgr.getCustomFieldObjectByName("your label custom field name").getIdAsLong()
def labelMgr = ComponentAccessor.getComponent(LabelManager)

if (country == "null") { }else{
labelMgr.addLabel(currentUser, event.issue.getId(), labelCfId, country, false);
   }
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.label.LabelManager

def currentUser = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()
def cfMgr = ComponentAccessor.getCustomFieldManager()
def country = event.issue.getCustomFieldValue(cfMgr.getCustomFieldObjectByName("Country"))toString().replaceAll(" ","_")
def labelCfId = cfMgr.getCustomFieldObjectByName("your label custom field name").getIdAsLong()
def labelMgr = ComponentAccessor.getComponent(LabelManager)

if (country == "null") { }else{
labelMgr.addLabel(currentUser, event.issue.getId(), labelCfId, country, false);
   }
Z B
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.
Mar 10, 2020
Z B
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.
Mar 11, 2020

@Michael Virden I have another question though. Do you think the "{ }" in this in the if statement "if (country == "null") { }" could cause a problem? For eg if I filter for the issue created even in the listener where I run the script, eventually there are gonna be cases where it doesn't go into the else branch because the value is null. Is then the empty "{ }" not a problem, does that never create a loop or anything?

Suggest an answer

Log in or Sign up to answer
TAGS
AUG Leaders

Atlassian Community Events