I have a script that gets fired on issueupdated/issuedeleted events and renames options configured in a single-select custom field.
The renaming part is working fine, however when I look at issues using the renamed option, on the "view" screen they are still showing the old value. If I go into "edit" mode the new option value is displayed (and is correctly selected as the current value for that issue).
Things I've tried:
- Perform a full re-index.
- Restart the JIRA service.
- Extending the script to get a list of afffected issues and explicitly updating the field value.
- Extending the script to get a list of affected issues and reindex them one by one.
Is there an extra step that needs to be performed to let issues know that the option has been renamed so they display the correct value? Here's a snippet of the code I'm using (including my attempts to get the issue to recognise the new value):
CustomField customField = this.customFieldManager.getCustomFieldObject(CUSTOMFIELD_ID);
FieldConfig fieldConfig = customField.getConfigurationSchemes().listIterator().next().getOneAndOnlyConfig();
Options fieldOptions = this.optionsManager.getOptions(fieldConfig);
Option existingOption = fieldOptions.getOptionForValue(originalValue, null);
if (existingOption) {
existingOption.setValue(newValue);
// later that evening...
List<Issue> issues = searchResults.getIssues();
if (issues) {
fieldOptions = this.optionsManager.getOptions(fieldConfig);
existingOption = fieldOptions.getOptionForValue(newValue, null);
IssueChangeHolder changeHolder = new DefaultIssueChangeHolder();
for (Issue existingIssue : issues) {
// Update the new issues with the renamed option
customField.updateValue(null, existingIssue, new ModifiedValue(customField.getValue(existingIssue), existingOption), changeHolder);
this.issueManager.updateIssue(this.currentUser.getDirectoryUser(), existingIssue, EventDispatchOption.ISSUE_UPDATED, false);
// Explicitly reindex the issues
ComponentAccessor.getIssueIndexManager().reIndex(existingIssue);
}
}
}