How to edit an option of a custom field using the option ID using script runner

I am trying to update an option of a select list (based on changes in a certain issue). For example if the Description of "Issue 1" changes from "OptionName" to "Option Name" then the option of the select list custom field should also change to "Option Name".

Is there any way to update an option using the option ID for a particular custom field?

2 answers

0 vote
Anton Chemlev Community Champion Jan 29, 2018

Hi,

What problem are you trying to solve? Could you please provide business-case?

You mean adding new options to select list on the fly? Or just choosing from existing ones?

Hi Anton,

I have to update/rename an option from the set of already existing options. 

We already have a script to add new options in the form of issues (if a certain issue type is created its summary will be automatically be added as option). So if the user updates (changes the summary) the issue, the option should also change.

Ex:

IssueType: Fruits

Custom field Name: "Select Fruits"

Now if a new issue of type "Fruits" gets created, say for example "Apple" it will get added as an option to the Custom_field "Select Fruits" - this is working. But if someone edits the issue and changes from "Apple" to "Apples" it should Update the option also to "Apples" - this I'm unable to do.

0 vote
Anton Chemlev Community Champion Jan 29, 2018

Mmm, yes, it seems to be possible...

1) You can get previous Summary field value via https://docs.atlassian.com/software/jira/docs/api/7.0.4/com/atlassian/jira/issue/changehistory/ChangeHistoryManager.html

For example:

def changeItems = changeHistoryManager.getAllChangeItems(issue)

if (changeItems) {
def originalResolutionDate = changeItems.findAll {
it.field == "resolution"
}?.created.last()

 

2) And update custom field options via https://docs.atlassian.com/software/jira/docs/api/7.6.1/com/atlassian/jira/issue/customfields/manager/OptionsManager.html. There's findByOptionId(Long optionId) method and setValue(Option option, String value) .

3) You can get appropriate field config via https://docs.atlassian.com/software/jira/docs/api/7.2.0/com/atlassian/jira/issue/fields/CustomField.html#getRelevantConfig-com.atlassian.jira.issue.Issue-

 

Hope this will help.

Hi Anton, I have tried the above suggestion, however I am unable to use the setValue() method. It is throwing error. 

Error Message:  

 [Static type checking) - Cannot find matching method

Script356#setValue(com.atlassian.jira.issue.customfields.option.Option,

java.lang.String). Please check if the declared type is right and if the method

exists.

Possible solutions: getClass()  line 22, column 1.

 

Below is my code for your reference

 

def issue = event.issue as Issue

OptionsManager optionsManager = ComponentManager.getComponentInstanceOfType(OptionsManager.class);
def customFieldManager = ComponentAccessor.getCustomFieldManager()
def newOptionValue = ComponentAccessor.getChangeHistoryManager().getChangeItemsForField(issue, "Name").collect {it.toString }.join(", ")
def oldOptionValue = ComponentAccessor.getChangeHistoryManager().getChangeItemsForField(issue, "Name").collect {it.fromString }.join(", ")


def cf = customFieldManager.getCustomFieldObjectByName("Custom_Field")
def fieldConfig = cf.getRelevantConfig(issue)
Option oldOption = ComponentAccessor.optionsManager.getOptions(fieldConfig)?.find { it.toString() == oldOptionValue.toString()}

void setValue(oldOption, newOptionValue)

Suggest an answer

Log in or Sign up to answer
Atlassian Community Anniversary

Happy Anniversary, Atlassian Community!

This community is celebrating its one-year anniversary and Atlassian co-founder Mike Cannon-Brookes has all the feels.

Read more
Community showcase
Bridget Sauer
Published yesterday in Marketplace Apps

Calling all developers––You're invited to Atlas Camp 2018

 Atlas Camp   is our developer event which will take place in Barcelona, Spain  from the 6th -7th of   September . This is a great opportunity to meet other developers and get n...

62 views 0 4
Read article

Atlassian User Groups

Connect with like-minded Atlassian users at free events near you!

Find a group

Connect with like-minded Atlassian users at free events near you!

Find my local user group

Unfortunately there are no AUG chapters near you at the moment.

Start an AUG

You're one step closer to meeting fellow Atlassian users at your local meet up. Learn more about AUGs

Groups near you