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.
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()))
}
}
}
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.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Online forums and learning are now in one easy-to-use experience.
By continuing, you accept the updated Community Terms of Use and acknowledge the Privacy Policy. Your public name, photo, and achievements may be publicly visible and available in search engines.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.