Come for the products,
stay for the community

The Atlassian Community can help you and your team get more value out of Atlassian products and practices.

Atlassian Community about banner
4,360,473
Community Members
 
Community Events
168
Community Groups

How to default the value of a custom field on a sub-task from the parent using ScriptRunner

I'm using ScriptRunner to default fields from the parent when a sub-task is created.  I have a custom field that is a dropdown and I'm having trouble getting this field on the sub-task to default to the value from the parent.  I'm used the sample code from Script Runner, making just a few modifications for the fields I'm interested in:

import com.atlassian.jira.component.ComponentAccessor 
import com.atlassian.jira.issue.customfields.option.Option
import com.atlassian.jira.issue.fields.CustomField
import com.atlassian.jira.web.util.OutlookDate
import com.atlassian.jira.web.util.OutlookDateManager
import com.onresolve.jira.groovy.user.FieldBehaviours
import com.onresolve.jira.groovy.user.FormField
import groovy.transform.BaseScript
import java.sql.Timestamp
import static com.atlassian.jira.issue.IssueFieldConstants.*

@BaseScript
FieldBehaviours fieldBehaviours

FormField field = getFieldById(getFieldChanged())
FormField parent = getFieldById(
"parentIssueId")
Long parentIssueId = parent.getFormValue()
as Long


if (!parentIssueId || field.getFormValue()) {
// this is not a subtask, or the field already has data return
}

def issueManager = ComponentAccessor.getIssueManager()
def parentIssue = issueManager.getIssueObject(parentIssueId)
def customFieldManager = ComponentAccessor.getCustomFieldManager()

// REMOVE OR MODIFY THE SETTING OF THESE FIELDS AS NECESSARY

OutlookDate outlookDate = ComponentAccessor.getComponent(OutlookDateManager).getOutlookDate(Locale.getDefault())

getFieldById(ASSIGNEE).setFormValue(parentIssue.assigneeId)

// IF YOU DON'T WANT CUSTOM FIELDS COPIED REMOVE EVERYTHING BELOW HERE
// IF YOU ONLY WANT SOME FIELDS INHERITED ADD THEM TO THE LIST BELOW, OR LEAVE EMPTY FOR ALL
// eg ['Name of first custom field', 'Name of second custom field']

List copyCustomFields = ['customfield_100']
List<CustomField> parentFields = customFieldManager.getCustomFieldObjects(parentIssue)

for (def cf in parentFields) {
if (copyCustomFields && !copyCustomFields.contains(cf.name)) {
return }

def parentValue = cf.getValue(parentIssue) as List<Option>
if (!parentValue) {
return }

getFieldById(cf.id).setFormValue(parentValue)
log.debug(
"parentValue: ${parentValue?.class} for type ${cf.name}")

if (parentValue instanceof Timestamp) {
getFieldById(cf.id).setFormValue(outlookDate.formatDMY(parentValue))
}
else if (parentValue instanceof Option) {
getFieldById(cf.id).setFormValue(parentValue.optionId)
}
else if (parentValue instanceof List && parentValue[0] instanceof Option) {
getFieldById(cf.id).setFormValue(parentValue*.optionId)
}
else { getFieldById(cf.id).setFormValue(parentValue)
}
}

 

1 answer

Valerie,

Have you made sure that this script is NOT being used in an initializer of the behaviour? You need to attach this script to a field, e.g. description. From our docs: "This script hinges on the parentIssueId being present in the form. As such, you will need to associate the script with a visible field. It will not work as an initialiser."

Regards,

Josh

Correct.  The script is attached to a field on the screen, not used as an initializer.  I was able to get non-custom fields like assignee to work, but was getting inconsistent results for the custom field unfortunately.   I ended up finding another solution since I couldn't get this to work. 

Hi Valerie,

I'm sorry to hear that!  If you're still interested in trying to make it work, I have some questions for you that might help me try to think of a fix.

You mentioned you want to set a custom field that is a drop-down. Is this a standard custom field, as in the standard Select List custom field in Jira? Or does this drop-down field come from another plugin?

Which version of ScriptRunner are you on? I see you're trying to use one of the examples in our documentation here: https://scriptrunner.adaptavist.com/latest/jira/recipes/behaviours/subtask-default-fields.html

Your code has a logging statement 

log.debug("parentValue: ${parentValue?.class} for type ${cf.name}") 

You might look in the atlassian-jira.log and see what's being logged. That might give us some clues as to what's going wrong.

Regards,

Josh

Suggest an answer

Log in or Sign up to answer
TAGS
Community showcase
Published in Jira

Online AMA this week: Your project management questions answered by Jira Design Lead James Rotanson

We know that great teams require amazing project management chops. It's no surprise that great teams who use Jira have strong project managers, effective workflows, and secrets that bring planning ...

196 views 1 6
Read article

Atlassian Community Events