Hi,
I have to update custom field context using java api, any code to share?
Thanks
Ahmed
I can't share any code without specific goals... but I can point you to the correct apis
https://docs.atlassian.com/software/jira/docs/api/8.5.1/com/atlassian/jira/issue/fields/config/manager/FieldConfigSchemeManager.html
and
https://docs.atlassian.com/software/jira/docs/api/8.5.1/com/atlassian/jira/issue/fields/config/FieldConfigScheme.html
With these you can create/update the contest (name description, project, issuetype).
import com.atlassian.jira.component.ComponentAccessorimport com.atlassian.jira.issue.fields.config.FieldConfigSchemeimport com.atlassian.jira.issue.context.ProjectContextdef fieldConfigSchemeManager = ComponentAccessor.fieldConfigSchemeManagerdef customFieldManager = ComponentAccessor.customFieldManagerdef customField = customFieldManager.getCustomFieldObjectsByName('Scrum Team').first()def project = ComponentAccessor.projectManager.getProjectByCurrentKey('JSP')def configurableField = ComponentAccessor.fieldManager.getConfigurableField(customField.id)def fieldConfigScheme = fieldConfigSchemeManager.getConfigSchemesForField(configurableField).find { config -> config.contexts.any { context -> context.projectObject?.key == project.key }}if(!fieldConfigScheme){ //create one def configScheme = new FieldConfigScheme.Builder().setName("some name").setDescription("some desc").toFieldConfigScheme() def projectContext = new ProjectContext(project.id, ComponentAccessor.projectManager) fieldConfigScheme = fieldConfigSchemeManager.createFieldConfigScheme(configScheme, [projectContext] as List, [null] as List, configurableField)}def context = fieldConfigScheme.contexts.find{ it.projectObject.key == project.key}def fieldConfig = customField.getRelevantConfig(context) // << this can be used to create/delete/update options using optionsManager//get the default valuecustomField.customFieldType.getDefaultValue(fieldConfig)//set the default valuedef newDefault = '' // depends on the field type, may need to be an option object is custom field is a selectcustomField.customFieldType.setDefaultValue(fieldConfig, newDefault)
Hi Peter,
Thanks for your reply
The goal is to apply specific context (projects/issue types) based on screens linked to custom fields.
As per Atlassian recommendation, custom field Global context may impact performance.
Regards,
Yeah, I have some of those conversions to do in my own environment.
I hope what I've shared will point you in the correct direction.
Remove and update context are not working based on the below script, any idea?
import com.atlassian.jira.component.ComponentAccessorimport com.atlassian.jira.issue.fields.config.manager.FieldConfigSchemeManagerimport com.atlassian.jira.issue.fields.config.FieldConfigSchemeimport com.atlassian.jira.issue.context.ProjectContextimport com.atlassian.jira.issue.CustomFieldManagerimport com.atlassian.jira.issue.fields.CustomFieldimport com.atlassian.jira.issue.fields.FieldManagerimport com.atlassian.jira.issue.fields.ConfigurableFieldimport com.atlassian.jira.project.ProjectManagerimport com.atlassian.jira.issue.customfields.CustomFieldUtilsimport com.atlassian.jira.issue.context.JiraContextNodeimport org.apache.log4j.Loggerimport org.apache.log4j.Level
def log = Logger.getLogger("update custom fields context")
/*Variables to be set before executing the script*/log.setLevel(Level.DEBUG) // Replace DEBUG per INFO to disable logging
FieldConfigSchemeManager fieldConfigSchemeManager = ComponentAccessor.fieldConfigSchemeManagerCustomFieldManager customFieldManager = ComponentAccessor.customFieldManagerProjectManager projectManager = ComponentAccessor.projectManagerCustomFieldUtils customFieldUtils = ComponentAccessor.getComponent(CustomFieldUtils.class)
String customFieldid = "customfield_11900"def project = ComponentAccessor.projectManager.getProjectByCurrentKey('DX')List<Long> projectIds = new ArrayList<Long>();projectIds.add(project.getId());log.debug("projectIds: $projectIds");Long[] ids = new Long[projectIds.size()];
ConfigurableField configurableField = ComponentAccessor.fieldManager.getConfigurableField(customFieldid)
//Get the initial configList<FieldConfigScheme> fieldConfigSchemes = fieldConfigSchemeManager.getConfigSchemesForField(configurableField)FieldConfigScheme fieldConfigScheme = fieldConfigSchemes[0]log.debug("Initial config : ${fieldConfigScheme.getAssociatedProjectIds()};${fieldConfigScheme.getAssociatedIssueTypeIds()}")
//update contextList<JiraContextNode> contexts = CustomFieldUtils.buildJiraIssueContexts(true, projectIds.toArray(ids),ComponentAccessor.getProjectManager());
//Remove the existing associationfieldConfigSchemeManager.removeSchemeAssociation(contexts, configurableField);log.debug("Removing config : ${fieldConfigScheme.getAssociatedProjectIds()};${fieldConfigScheme.getAssociatedIssueTypeIds()}")
//update associationfieldConfigSchemeManager.updateFieldConfigScheme(fieldConfigSchemes[0], contexts, configurableField);log.debug("Updating config : ${fieldConfigScheme.getAssociatedProjectIds()};${fieldConfigScheme.getAssociatedIssueTypeIds()}")
It looks like you're new here. Sign in or register to get started.