getFieldByName() not working from script runner

Srilatha Pokala May 10, 2017

Hi I have following code to set field as required and the following code works as expected:

import com.onresolve.jira.groovy.user.FormField
FormField num = getFieldByName("Change Request Number");
num.setRequired(true)

I would like to write a wapper class around to avoid duplicate code every where.

Created groovy file called FieldAttr.groovy in behaviourutil folder
package behaviourutil

import com.onresolve.jira.groovy.user.FieldBehaviours
import com.onresolve.jira.groovy.user.FormField
@BaseScript FieldBehaviours fieldBehaviours

def showRequired(String field) {
log.info("inside showRequired...." + field);
FormField sField = getFieldByName(field)
sField.setRequired(true)
}

Issue is with following code, where trying to import above groovy code
import behaviourutil.FieldAttr
def d = new FieldAttr()
d.showRequired("Change Request Number");

This gives me following error:

 Script function failed on issue: (create issue) project/issuetype:  fieldId: customfield_11122, file: <inline script>
java.lang.NullPointerException: Cannot invoke method getFieldIdByName() on null object
        at com.onresolve.jira.groovy.Behaviour$getFieldIdByName$2.call(Unknown Source)
        at com.onresolve.jira.groovy.user.FieldBehaviours.getFieldByName(FieldBehaviours.groovy:53)
        at com.onresolve.jira.groovy.user.FieldBehaviours$getFieldByName.callCurrent(Unknown Source)
        at behaviourutil.FieldAttr.showRequired(FieldAttr.groovy:19)
        at behaviourutil.FieldAttr$showRequired.call(Unknown Source)
        at Script1.run(Script1.groovy:5)

1 answer

1 vote
Jonny Carter
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 15, 2017

I think the issue is that you can't use the BaseScript annotation on a utility script quite like that. 

A utility class for two lines of code seems a bit like overkill, but you might be able to workaround it by using Groovy's means of turning methods into closures.

 

package behaviourutil

import com.onresolve.jira.groovy.user.FormField

class FieldAttr {
    static def showRequired(String field, getFieldByName) {
        FormField sField = getFieldByName(field)
        sField.setRequired(true)
    }
}

Then your behaviour script would just be:

import behaviourutil.FieldAttr
log.debug("Go!")
FieldAttr.showRequired("TextFieldA", this.&getFieldByName)

A bit hacky, and if your method isn't actually more involved than that, I would just reduplicate the two lines of code, personally.

Suggest an answer

Log in or Sign up to answer
TAGS
AUG Leaders

Atlassian Community Events