Hi everyone.
I am writing some code to access fields but it is not working.
First off this code is in the Initializer section of a behavior.
In the code below at line 14 I am trying to get the value of the sys "Work Item Type" field but it is returning null. I know at this point no selection has been made but I would think it would return the default value.
On line 20 I am trying to get access to the current issue to get a hook into the custom fields.
It is also failing.
Any help would be appreciated.
Thanks,
C.J.
The groovy language used throughout Scriptrunner is a Java-based language.
As such, I would highly advise you to adhere to industry-standard java conventions. There are many places you can you look that up, but here is an example: https://www.javatpoint.com/java-naming-conventions
Also, groovy doesn't require any semicolons.
I'm not familiar with the "work item type" system field. Are you sure you have that right? Normally, you can find all the system field ids from the IssueFieldConstants class and I'm not seeing any system field that matches that label.
The current issue in a behaviour is available in an pre-loaded object named "underlyingIssue". If underlyingIssue is null, then you can assume that you are in the process of creating a new one.
You should not need to load it from it key like you did in line 20.
There may be cases where you need to load up a sepearate issue to fetch some custom field stored in that issue.
I'm not clear which you intended to do here.
But regardless of whether you meant the current issue or another issue, on line 22 I see you are attempting to change an issue object with "setCustomFieldValue". With your current code this won't do anything since it's just modifying an in-memory version of that issue. You would need additional code to persist and index that change.
This is generally a bad idea from a behaviour script. Behaviour run live while a user is interacting with the screen, possibly mutiple times within a single edit session. If you are constantly changing and saving an issue object, you'll get into trouble, especially when you start having many users.
When fetching an option value from a single select custom field, it's never a good idea to just convert to string using the "toString()" method (line 23). Instead, make sure you tell your editor what type of object you expect to be returned from the custom field and use the correct method from that class.
Maybe you can explain your business objectives and I help guide you.
In the meantime, here is a version of your script that adhere to java conventions a bit more:
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.IssueFieldConstants
import com.atlassian.jira.issue.customfields.option.Option
import com.onresolve.jira.groovy.user.FieldBehaviours
import groovy.transform.BaseScript
@BaseScript FieldBehaviours fieldBehaviours
def workItemTypeFormField = getFieldById('work item type') //don't know this field id, but generally, they contain no spaces
def descFormField = getFieldById(IssueFieldConstants.DESCRIPTION)
def summaryFormField = getFieldById(IssueFieldConstants.SUMMARY)
def workItemTypeValue = workItemTypeFormField.value
descFormField.setFormValue(workItemTypeValue)
def customFieldManager = ComponentAccessor.customFieldManager
def textCf = customFieldManager.getCustomFieldObject('customfield_18881')
def pickerCf = customFieldManager.getCustomFieldObject('customfield_18883')
def issueKey = 'ABC-123'
def newIssue = ComponentAccessor.issueManager.getIssueObject(issueKey)
if(newIssue){
def pickerValue = newIssue.getCustomFieldValue(pickerCf) as Option
summaryFormField.setFormValue(pickerValue.value)
} else {
summaryFormField.setFormValue("Issue $issueKey not found")
}
Peter, sorry about the non standard naming conventions and formatting.
At this point I am in the learning phase of Jira and Java. It will take me a while to learn the terminology of this environment. So I hope you will bear with me.
I will try and do better in the future.
As far as business need, we have a user that would like to populate a field with different text instructions depending on what issue type is picked from the issue type dropdown which is named "Work Item Type". Pics below...........
Yes the underlyingIssue is what I was after. I will use it and modify my code.
Thanks for your help.
cj
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Ah... looks like "Work Item Type" is the "Jira work management" version of "Issue Type".
I've never seen a jira environment with only Jira Work management. I've only seen Jira Software and Jira Services Management.
My guess would be that in the code, it's still called "issuetype".
You can use the IssueFieldConstants class that I included in my suggestion and try the auto-complete to see if you find something like "WORK_ITEM_TYPE".
If not, then try to use IssueFieldConstants.ISSUE_TYPE.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
I did use the IssueFieldConstants (Thanks for that!) and found ISSUE_TYPE.
I will check and make sure that is what I am after.
Thanks,
cj
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Online forums and learning are now in one easy-to-use experience.
By continuing, you accept the updated Community Terms of Use and acknowledge the Privacy Policy. Your public name, photo, and achievements may be publicly visible and available in search engines.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.