You're on your way to the next level! Join the Kudos program to earn points and save your progress.
Level 1: Seed
25 / 150 points
Next: Root
1 badge earned
Challenges come and go, but your rewards stay with you. Do more to earn more!
What goes around comes around! Share the love by gifting kudos to your peers.
Keep earning points to reach the top of the leaderboard. It resets every quarter so you always have a chance!
Join now to unlock these features and more
The Atlassian Community can help you and your team get more value out of Atlassian products and practices.
Hello.
Scripting for jira is my first major programming experience, so if this discussion is too amateurish - please bear with me.
The situation is the following - whenever I write a script with several functions in it and with a need to access let's say customFieldManager in some of them, I have to define this customFieldManager in every function:
def customFieldManager = ComponentAccessor.customFieldManager
It's not that big of a problem, but I feel like there's a better way.
So far I've found three (second while writing this):
1. dummy Constants class:
import static Constants.*
class Constants {
static final MYCONSTANT = "foobar"
}
does what it is - creates a dummy class where you can put your global scoped variables
import groovy.transform.Field
@Field List awe = [1, 2, 3]
def awesum() { awe.sum() }
assert awesum() == 6
does pretty much the same as method one, just more elegantly I think
3. Own helper class:
much like method one, writing a dummy class, but making it in a separate file with the help of Scriptrunner's Script Roots functionality:
package util.managers
import com.atlassian.jira.component.ComponentAccessor
class managers {
static final customFieldManager = ComponentAccessor.customFieldManager
//all the other components I use frequently
}
so I can access customFieldManager in any of my scripts by just importing this class:
import static util.managers.*
customFieldManager.getCustomFieldObject(12345)
So, the question is, am I inventing a bicycle here, and do you have any tricks or hint to making your script better?
Thanks.
The difference is very slight:
If you want a variable to become a field of the class without going into the
Binding
, you can use the @Field annotation.
Variable without type declaration becomes available in script binding (where, for example, "issue" variable live in SR post-functions, validators, etc.)
As for me, i prefer writing helpers as plugins in Java. It is easy to use them on different instances and it is protected from accidental changing by anybody who has access to file storage. But if you use script plugin for ScriptRunner no problem exists of course.