Forums

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

behavior script add an option value depending on the user group

wajih zouaoui
Contributor
July 24, 2019

Hi,

 

i'm trying to create a groovy script with behavior to add an option value to a custum field depending on the reporter group.

The vlue mustbe setwhile creating the issue.

 

we have a custom field with 20 optiosn values and a match user groups with the same values.

The script can search for the user group and then try to make a match with the custom feld values and if find something it will set the values found on the customfield while creating the issue.

I have an old script and it stop working ( i think after we done the jira upgrade from 6.4 to 7.13 and the plugin has been updated also).

Here is the script we have now:

 

import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.security.Permissions;
import org.apache.log4j.Category;

Category log = Category.getInstance("com.oddo.behaviours");
def cfSDGList = getFieldById("customfield_10061");
def cfOwner = getFieldById("customfield_10103");
def user = ComponentAccessor.JiraAuthenticationContext.getLoggedInUser();
cfSDGList.setRequired(true);

Boolean fieldVisible = !ComponentAccessor.getGlobalPermissionManager().hasPermission(Permissions.USER_PICKER, ComponentAccessor.jiraAuthenticationContext.user)
//cfSDGList.setHidden(fieldVisible);
//cfSDGList.setReadOnly(fieldVisible);
//cfSDGList.setRequired(fieldVisible);
Map fieldOptions = [:] ;
fieldOptions.put ("13940", "Undefined") ;
def optionToSelect;

//find the team the user belongs to
def groupList = ComponentAccessor.getGroupManager().getGroupsForUser(user);
def reporterTeamGroup = groupList.find { !( it.value !== /(jira\-.*|Dash.*|Clients)/ ) }
//If we founbd a matching group, find the possible options of the SdG List Field
if (reporterTeamGroup) {
def optionsManager = ComponentAccessor.getOptionsManager();
def cfSDGListCF = ComponentAccessor.getCustomFieldManager().getCustomFieldObject(cfSDGList.getFieldId());
def fieldConfig = cfSDGListCF.getRelevantConfig(getIssueContext());
def options = optionsManager.getOptions(fieldConfig);
//set the CF values
optionToSelect = options.find { it.value == reporterTeamGroup.split(" - ")[0] };
}
//If we found something, add the value to the list of filtered options, and set the option of the select list we found if it isn't already defined (empty or "Undefined")
if (optionToSelect) {
fieldOptions.put (optionToSelect.getOptionId().toString(), optionToSelect.getValue()) ;
if ((!getUnderlyingIssue()?.getCustomFieldValue(ComponentAccessor.getCustomFieldManager().getCustomFieldObject("customfield_10061"))) || (cfSDGList.getValue()=="Undefined") ) {
cfSDGList.setFormValue(optionToSelect.getOptionId());
}

}

if (fieldVisible) {cfSDGList.setFieldOptions (fieldOptions);}
if (!getUnderlyingIssue()?.getCustomFieldValue(ComponentAccessor.getCustomFieldManager().getCustomFieldObject("customfield_10103"))) {cfOwner.setFormValue(user);}
cfSDGList.setRequired(true);

 

 

Thanks in advance and sorry i'm trying to learn groovy.

 

Best Regards,

Wajih

1 answer

1 accepted

Suggest an answer

Log in or Sign up to answer
1 vote
Answer accepted
Corey Leighton
Contributor
September 21, 2021

I figure I'll answer my own question here so I can serve as a warning to others... but to get that blank, 'Unknown' entry, I don't do it directly to a list of versions.... because that 'Unknown' value in the UI is backed up by an entry with an id of -1..  and you can't add an invalid version to a Collection<Version>.

So instead:

Collection<Version> prodVersions = [...]
Map<Long, String> versionFieldOptions = [(-1L): "Unknown"] // This seeds the map and creates that initial, blank entry in the UI
prodVersions?.each { versionFieldOptions.put(it.id as Long, it.name) }
someVersionFormfield.setFieldOptions(versionFieldOptions)
TAGS
AUG Leaders

Atlassian Community Events