Set customn field to component lead

I have customn field that I would like to set to the component lead if chosen and if not to the project lead. I have used a script as post function to realize this on issue creation, but it does not do anything sad

 

This is the code:

import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.issue.CustomFieldManager;
import com.atlassian.jira.issue.fields.CustomField;
import com.atlassian.jira.issue.Issue;
import com.atlassian.jira.issue.ModifiedValue;
import com.atlassian.jira.issue.MutableIssue;
import com.atlassian.jira.issue.util.DefaultIssueChangeHolder;
import com.atlassian.jira.issue.util.IssueChangeHolder;
import com.atlassian.jira.user.ApplicationUser;

// GOAL: assign all user ids of the current issue components' lead to the custom field 'Additional assignee'
Issue issue = issue; // Not really needed but it will save you some red underlining when creating the listener
CustomField additionalAssigneeField = ComponentAccessor.getCustomFieldManager().getCustomFieldObjectsByName("Additional Assignee(s)")[0];
//for every component that it is linked to the current issue
for (int i = 0; i < issue.getComponentObjects().size() ; ++i)
{
    // 1-Get the issue's component's lead
    // 1.1- get the component of the current issue
    ApplicationUser componentLead = issue.getComponentObjects()[i].getComponentLead(); // returns an ApplicationUser
    // 1.2- get the lead id of the component
    String componentLeadId = componentLead.getKey();
    
    // 2-Assign it to the issue's custom field
    // 2.1- Prepare the ModifiedValue pair
    List oldValue = issue.getCustomFieldValue(additionalAssigneeField) as List;
	List newValue = oldValue;
	ModifiedValue modifiedValue = new ModifiedValue(oldValue, newValue);
	newValue.add(ComponentAccessor.getUserUtil().getUserByKey(componentLeadId));
	// 2.2- Create a ChangeHolder
    IssueChangeHolder changeHolder = new DefaultIssueChangeHolder();
	// 2.3- Update the value in database
	additionalAssigneeField.updateValue(null, issue, modifiedValue, changeHolder);
}
return true;

What did I do wrong here?

8 answers

Hi,

 

When do you call this postfunction ? You first have to create the issue and then in the 2nd step of the transition run the postfuction. See screenshot. Does this help ?

Regards,

 

BartpostFunction.jpg

I call it at the very end of the list (in your case step 5).

 

btw. I also checked it with a next workflow step, but nothing happens there as well

if you call it before the "set status", "re-index" steps, does this resolve the issue ? I definitely would call it before those 2 steps...

What kind of "field" is your custom field ? 

another thing you could try, is to define your Customfield "additionalAssigneeField" by its customf-field ID (you can see the ID if you go to your custom field and for instance click the edit button, if the URL you will see the ID of your custom field)

 

import com.atlassian.jira.ComponentManager;

def CustomFieldManager = ComponentManager.getInstance().getCustomFieldManager()

def additionalAssigneeField= CustomFieldManager.getCustomFieldObject(the ID of your additionalAssigneeField customfield)  

I placed it on the correct line now and still does not work. I will try your suggestion. Can you tell me which lines to change?

2015-10-26 14_50_03-Transition_ Create - Jira - TASS International.png

 

CustomField additionalAssigneeField = ComponentAccessor.getCustomFieldManager().getCustomFieldObjectsByName("Additional Assignee(s)")[0];


can be replaced by:


def CustomFieldManager = ComponentManager.getInstance().getCustomFieldManager()

def additionalAssigneeField= CustomFieldManager.getCustomFieldObject(the ID of your additionalAssigneeField customfield)  

 

don't forget to add "import com.atlassian.jira.ComponentManager;" also at the top of your code

I tried this as well, but still nothing happens (additional assignee(s) is not filled in :( )

I also get a lot of errors/ warnings using these 2 lines

I would try using this:

MutableIssue mIssue = (MutableIssue)issue;
mIssue.setCustomFieldValue(modifiedValue);

Where would I use this and how?

You would add the first line, and use the second line in place of "additionalAssigneeField.updateValue(null, issue, modifiedValue, changeHolder);".

Tried this but nothing really happens....

Suggest an answer

Log in or Sign up to answer
Community showcase
Published yesterday in Jira Service Desk

Frequently Asked Questions for Jira Service Desk (AKA JSD FAQ)

Just the FAQs! Welcome to the Community, and this Focused-FAQ! Here, we've pulled together some of the most frequently asked questions associated with Jira Service Desk (JSD). We hope ...

99 views 0 9
Read article

Atlassian User Groups

Connect with like-minded Atlassian users at free events near you!

Find a group

Connect with like-minded Atlassian users at free events near you!

Find my local user group

Unfortunately there are no AUG chapters near you at the moment.

Start an AUG

You're one step closer to meeting fellow Atlassian users at your local meet up. Learn more about AUGs

Groups near you