Create
cancel
Showing results for 
Search instead for 
Did you mean: 
Sign up Log in
Celebration

Earn badges and make progress

You're on your way to the next level! Join the Kudos program to earn points and save your progress.

Deleted user Avatar
Deleted user

Level 1: Seed

25 / 150 points

Next: Root

Avatar

1 badge earned

Collect

Participate in fun challenges

Challenges come and go, but your rewards stay with you. Do more to earn more!

Challenges
Coins

Gift kudos to your peers

What goes around comes around! Share the love by gifting kudos to your peers.

Recognition
Ribbon

Rise up in the ranks

Keep earning points to reach the top of the leaderboard. It resets every quarter so you always have a chance!

Leaderboard

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,552,518
Community Members
 
Community Events
184
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

0 votes
Joshua Yamdogo _ Adaptavist
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
May 08, 2018

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. 

Joshua Yamdogo _ Adaptavist
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
May 09, 2018

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
AUG Leaders

Atlassian Community Events