Forums

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

How to add an issue type to a custom field context

Malesys Elie November 25, 2019

Hi

I try to add an issuetype (with id 16800) to field contexts that already contains another type (with id 20).

I tried with the following code but no change is done after running this script, could you please help :

import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.issue.fields.CustomField;
import com.atlassian.jira.issue.fields.ConfigurableField;
import com.atlassian.jira.issue.CustomFieldManager;
import com.atlassian.jira.issue.fields.config.FieldConfigScheme;
import com.atlassian.jira.issue.fields.config.FieldConfig;
import com.atlassian.jira.issue.fields.config.manager.FieldConfigSchemeManager;
import com.atlassian.jira.issue.fields.config.manager.FieldConfigManager;
import com.atlassian.jira.issue.fields.FieldManager;
import com.atlassian.jira.issue.context.ProjectContext;
import com.atlassian.jira.issue.context.JiraContextNode;
import com.atlassian.jira.issue.context.manager.JiraContextTreeManager;
import com.atlassian.jira.issue.customfields.CustomFieldUtils;

String newType = 16800;
String oldType = 20;

CustomFieldManager customFieldManager = ComponentAccessor.getCustomFieldManager();
FieldConfigSchemeManager fieldConfigSchemeManager = ComponentAccessor.getFieldConfigSchemeManager();
FieldConfigManager fieldConfigManager = ComponentAccessor.getComponentOfType(FieldConfigManager.class);
FieldManager fieldManager = ComponentAccessor.getFieldManager();

//List<CustomField> fields = customFieldManager.getCustomFieldObjects();
List<CustomField> fields = new ArrayList<CustomField>();
fields.add(customFieldManager.getCustomFieldObject(76940L))
for (CustomField field : fields){
List<FieldConfigScheme> fieldConfigSchemes = field.getConfigurationSchemes();
for (FieldConfigScheme fieldConfigScheme : fieldConfigSchemes){
if (fieldConfigScheme.getAssociatedIssueTypeIds().contains(oldType)){
FieldConfigScheme newFieldConfigScheme = fieldConfigSchemeManager.getFieldConfigScheme(fieldConfigScheme.getId())
FieldConfigScheme.Builder newSchemeBuilder = new FieldConfigScheme.Builder(newFieldConfigScheme);
FieldConfig config = fieldConfigScheme.getOneAndOnlyConfig();
Map configs = new HashMap()
for (String issueTypeId : fieldConfigScheme.getAssociatedIssueTypeIds()){
configs.put(issueTypeId, config);
}
configs.put(newType, config);
newSchemeBuilder.setConfigs(configs);
FieldConfigScheme newConfigScheme = newSchemeBuilder.toFieldConfigScheme();
// return (configs.toString() + " // " + newFieldConfigScheme.getConfigs())
List<Long> projectIds = fieldConfigScheme.getAssociatedProjectIds();
List contexts = CustomFieldUtils.buildJiraIssueContexts(false,projectIds.toArray(new Long[projectIds.size()]),ComponentAccessor.getProjectManager());
fieldConfigSchemeManager.updateFieldConfigScheme(newFieldConfigScheme, contexts, customFieldManager.getCustomFieldObject(field.getId()))
}
}
}

 

note that if I uncomment le ligne "return (configs.toString() + " // " + newFieldConfigScheme.getConfigs())" I got :

[16800:com.atlassian.jira.issue.fields.config.FieldConfigImpl@f2d93640, 20:com.atlassian.jira.issue.fields.config.FieldConfigImpl@f2d93640, 21:com.atlassian.jira.issue.fields.config.FieldConfigImpl@f2d93640]//[20:com.atlassian.jira.issue.fields.config.FieldConfigImpl@f2d93640, 21:com.atlassian.jira.issue.fields.config.FieldConfigImpl@f2d93640]

I don't understand why the config from newFieldConfigScheme doesn't contains issue type 16800 despite this id is in configs map

Regards,

Elie.

3 answers

1 accepted

1 vote
Answer accepted
Malesys Elie November 25, 2019

Hi Victor,

I've found my mistake, I was using newFieldConfigScheme instead of newConfigScheme

here is the corrected version :

import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.issue.fields.CustomField;
import com.atlassian.jira.issue.fields.ConfigurableField;
import com.atlassian.jira.issue.CustomFieldManager;
import com.atlassian.jira.issue.fields.config.FieldConfigScheme;
import com.atlassian.jira.issue.fields.config.FieldConfig;
import com.atlassian.jira.issue.fields.config.manager.FieldConfigSchemeManager;
import com.atlassian.jira.issue.fields.config.manager.FieldConfigManager;
import com.atlassian.jira.issue.fields.FieldManager;
import com.atlassian.jira.issue.context.ProjectContext;
import com.atlassian.jira.issue.context.JiraContextNode;
import com.atlassian.jira.issue.context.manager.JiraContextTreeManager;
import com.atlassian.jira.issue.customfields.CustomFieldUtils;

String newType = 16800;
String oldType = 20;

CustomFieldManager customFieldManager = ComponentAccessor.getCustomFieldManager();
FieldConfigSchemeManager fieldConfigSchemeManager = ComponentAccessor.getFieldConfigSchemeManager();
FieldConfigManager fieldConfigManager = ComponentAccessor.getComponentOfType(FieldConfigManager.class);
FieldManager fieldManager = ComponentAccessor.getFieldManager();

//List<CustomField> fields = customFieldManager.getCustomFieldObjects();
List<CustomField> fields = new ArrayList<CustomField>();
fields.add(customFieldManager.getCustomFieldObject(76940L))
for (CustomField field : fields){
List<FieldConfigScheme> fieldConfigSchemes = field.getConfigurationSchemes();
for (FieldConfigScheme fieldConfigScheme : fieldConfigSchemes){
if (fieldConfigScheme.getAssociatedIssueTypeIds().contains(oldType)){
FieldConfigScheme newFieldConfigScheme = fieldConfigSchemeManager.getFieldConfigScheme(fieldConfigScheme.getId())
FieldConfigScheme.Builder newSchemeBuilder = new FieldConfigScheme.Builder(newFieldConfigScheme);
FieldConfig config = fieldConfigScheme.getOneAndOnlyConfig();
Map configs = new HashMap()
for (String issueTypeId : fieldConfigScheme.getAssociatedIssueTypeIds()){
configs.put(issueTypeId, config);
}
configs.put(newType, config);
newSchemeBuilder.setConfigs(configs);
FieldConfigScheme newConfigScheme = newSchemeBuilder.toFieldConfigScheme();
// return (configs.toString() + "//" + newConfigScheme.getConfigs())
List<Long> projectIds = fieldConfigScheme.getAssociatedProjectIds();
List contexts = CustomFieldUtils.buildJiraIssueContexts(false,projectIds.toArray(new Long[projectIds.size()]),ComponentAccessor.getProjectManager());
fieldConfigSchemeManager.updateFieldConfigScheme(newConfigScheme, contexts, customFieldManager.getCustomFieldObject(field.getId()))
}
}
}

0 votes
Malesys Elie November 25, 2019

Hi Victor,

this document is about manual update but my concern is to add an additional issue type to an existing context vith the API (the goal is to update all contexts that use issuetype id 20 and add issuetype id 16800)

Regards,

Elie.

0 votes
Victor Mutambuki
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.
November 25, 2019

Elie,

When you create field context, you have the ability to associate the field context with an issue type and a project, or several issue types and projects.

See topic on Adding a new context.

Victor

Suggest an answer

Log in or Sign up to answer