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.
Good day,
I wonder if any of you have managed to hide a "custom" checklist with prepopulated values from the view/edit screens.
It seems that if your checklist is prepopulated it is always visible?
What I want if I select Sev 1 / 2 in Priority show my checklist otherwise hide it. It works for other custom fields but but checklist.
If that is not possible is it possible to "set values" for a "blank checklist" field when creating an issue - what I then can do is to say when I create a Sev 1/2 populate checklist with option 1 and 2
Code that works to hide other "select list" custom field:
import com.onresolve.jira.groovy.user.FormField
import com.atlassian.jira.issue.IssueConstantImpl
def priority = getFieldById(getFieldChanged())
def fieldValue = ((IssueConstantImpl) priority.getValue()).getId()
FormField rootcause = getFieldById ("customfield_10303")
if (fieldValue == "2") {
rootcause.setFormValue(-1)
rootcause.setHidden(false)
}
else if (fieldValue == "10101") {
rootcause.setFormValue(-1)
rootcause.setHidden(false)
}
else {
rootcause.setFormValue(-1)
rootcause.setHidden(true)
}
Thank you
Marius
Community moderators have prevented the ability to post new answers.
Hiding Fields based on priority (Behaviour Priority Field)
import com.onresolve.jira.groovy.user.FormField
import com.atlassian.jira.issue.IssueConstantImpl
// Code to make fields mandatory on resolution on sev1/2 tickets
if (getFieldScreen().name == "ISC - JIRA Service Desk Resolve Issue Screen"){
def priority = getFieldById(getFieldChanged())
def fieldValue = ((IssueConstantImpl) priority.getValue()).getId()
FormField rootcause = getFieldById ("customfield_10303")
FormField incont = getFieldById ("customfield_28402")
FormField scrb = getFieldById ("customfield_28401")
if (fieldValue == "2") { //Sev 1
rootcause.setFormValue(-1)
rootcause.setRequired(true)
rootcause.setHidden(false)
incont.setRequired(true)
incont.setHidden(false)
scrb.setRequired(true)
scrb.setHidden(false)
}
else if (fieldValue == "10101") { //Sev 2
rootcause.setFormValue(-1)
rootcause.setRequired(true)
rootcause.setHidden(false)
incont.setRequired(true)
incont.setHidden(false)
scrb.setRequired(true)
scrb.setHidden(false)
}
else {
rootcause.setFormValue(-1)
rootcause.setRequired(false)
rootcause.setHidden(true)
incont.setRequired(false)
incont.setHidden(true)
scrb.setRequired(false)
scrb.setHidden(true)
}
}
// Code to hide Fields from Edit Screens when not Sev1/2 tickets
else if (getFieldScreen().name == "ISC: JIRA Service Desk Edit Screen"){
def priority = getFieldById(getFieldChanged())
def fieldValue = ((IssueConstantImpl) priority.getValue()).getId()
def defaultvalue = null
FormField rootcause = getFieldById ("customfield_10303")
FormField incont = getFieldById ("customfield_28402")
FormField scrb = getFieldById ("customfield_28401")
FormField need = getFieldById ("customfield_28403")
if (fieldValue == "2") { //Sev1
rootcause.setFormValue(-1)
rootcause.setRequired(false)
rootcause.setHidden(false)
incont.setRequired(false)
incont.setHidden(false)
scrb.setRequired(false)
scrb.setHidden(false)
}
else if (fieldValue == "10101") { //Sev2
rootcause.setFormValue(-1)
rootcause.setRequired(false)
rootcause.setHidden(false)
incont.setRequired(false)
incont.setHidden(false)
scrb.setRequired(false)
scrb.setHidden(false)
}
else {
//rootcause.setFormValue(-1)
rootcause.setRequired(false)
rootcause.setHidden(true)
rootcause.setFormValue(defaultvalue)
incont.setRequired(false)
incont.setHidden(true)
incont.setFormValue(defaultvalue)
scrb.setRequired(false)
scrb.setHidden(true)
scrb.setFormValue(defaultvalue)
need.setHidden(true)
}
}
Deleting Checklist on Lower Priority Tickets (Listener)
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.ModifiedValue
import com.atlassian.jira.issue.util.DefaultIssueChangeHolder
def issueManager = ComponentAccessor.getIssueManager()
def issue = event.getIssue()
def customFieldManager = ComponentAccessor.getCustomFieldManager()
def cf = customFieldManager.getCustomFieldObjects(issue).findByName("Do we need")
assert cf : "Could not find custom field with name $cf"
def optionsManager = ComponentAccessor.getOptionsManager()
def currentUser = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()
def checkListCustomFieldValue = issue.getCustomFieldValue(cf)
def cfConfig = cf.getRelevantConfig(issue)
def checkListOptions = optionsManager.getOptions(cfConfig)
def cfType = cf.getCustomFieldType()
//def newCheckListValueItem1 = cfType.getSingularObjectFromString('{"name" : "PIR", "checked" : false, "mandatory" : true, "rank" : 1}')
//def newCheckListValueItem2 = cfType.getSingularObjectFromString('{"name" : "Long Term Resolution", "checked" : false, "mandatory" : true, "rank" : 2}')
List newCheckListValueList = new ArrayList();
if (issue.priority?.name == '3 - Medium') {
newCheckListValueList.clear()
cf.updateValue(null, issue, new ModifiedValue(issue.getCustomFieldValue(cf), newCheckListValueList), new DefaultIssueChangeHolder())
}
else if (issue.priority?.name == '4 - Low') {
newCheckListValueList.clear()
cf.updateValue(null, issue, new ModifiedValue(issue.getCustomFieldValue(cf), newCheckListValueList), new DefaultIssueChangeHolder())
}
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Adding Checklist on High Sev Tickets (Listener - Create and Update Events)
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.ModifiedValue
import com.atlassian.jira.issue.util.DefaultIssueChangeHolder
import com.atlassian.jira.event.type.EventType
def issueManager = ComponentAccessor.getIssueManager()
def issue = event.getIssue()
def customFieldManager = ComponentAccessor.getCustomFieldManager()
def cf = customFieldManager.getCustomFieldObjects(issue).findByName("Do we need")
assert cf : "Could not find custom field with name $cf"
def optionsManager = ComponentAccessor.getOptionsManager()
def currentUser = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()
def checkListCustomFieldValue = issue.getCustomFieldValue(cf)
def cfConfig = cf.getRelevantConfig(issue)
def checkListOptions = optionsManager.getOptions(cfConfig)
def cfType = cf.getCustomFieldType()
if (event.eventTypeId != EventType.ISSUE_CREATED_ID) {
def changeLog = event?.changeLog;
def priorityChange = changeLog.getRelated("ChildChangeItem").find { it['field'] == 'priority' };
if (priorityChange == null) {
return;
}
}
def newCheckListValueItem1 = cfType.getSingularObjectFromString('{"name" : "PIR","checked" : "false", "mandatory" : false, "rank" : 1}')
def newCheckListValueItem2 = cfType.getSingularObjectFromString('{"name" : "Long Term Resolution", "checked" : "false", "mandatory" : false, "rank" : 2}')
List newCheckListValueList = new ArrayList();
if (issue.priority?.name == '1 - Critical') {
newCheckListValueList.add(newCheckListValueItem1)
newCheckListValueList.add(newCheckListValueItem2)
cf.updateValue(null, issue, new ModifiedValue(issue.getCustomFieldValue(cf), newCheckListValueList), new DefaultIssueChangeHolder())
}
else if (issue.priority?.name == '2 - High') {
newCheckListValueList.add(newCheckListValueItem1)
newCheckListValueList.add(newCheckListValueItem2)
cf.updateValue(null, issue, new ModifiedValue(issue.getCustomFieldValue(cf), newCheckListValueList), new DefaultIssueChangeHolder())
}
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi Marius,
The values returned by the Checklist field is of a specific type (ChecklistItem) in JSON which means that pure strings will not work. To convert a JSON string to a CheklistItem, you need to get the customefieldType from the custom field and call getSingularObjectFromString. The string needs to be a JSON notation in the form:
{"name" : "A", "checked" : true, "mandatory" : false, "rank" : 1}
Here's the sample script which you can refer to update the checklist in Edit Screen and the Checklist field will be hidden when the Priority met the condition:
import com.atlassian.jira.component.ComponentAccessor import com.atlassian.jira.issue.Issue; import com.atlassian.jira.event.type.EventDispatchOption import com.atlassian.jira.issue.IssueConstantImpl import com.atlassian.jira.event.type.EventType import com.atlassian.jira.event.type.EventTypeManager if (getActionName() != "Create") { def issueManager = ComponentAccessor.getIssueManager() //Get issue ID from current Edit Screen def issue = issueManager.getIssueObject(underlyingIssue.id) def customFieldManager = ComponentAccessor.getCustomFieldManager() def cbField2 = getFieldByName("Checklist") def checkListField = customFieldManager.getCustomFieldObjectByName("Checklist") def optionsManager = ComponentAccessor.getOptionsManager() def currentUser = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser() def checkListCustomFieldValue = issue.getCustomFieldValue(checkListField) def checkListConfig = checkListField.getRelevantConfig(issue) def checkListOptions = optionsManager.getOptions(checkListConfig) //To convert a json string to a CheklistItem, def checkListCustomFieldType = checkListField.getCustomFieldType() def newCheckListValueItem1 = checkListCustomFieldType.getSingularObjectFromString('{"name" : "A", "checked" : true, "mandatory" : false, "rank" : 1}') def newCheckListValueItem2 = checkListCustomFieldType.getSingularObjectFromString('{"name" : "B", "checked" : true, "mandatory" : false, "rank" : 2}') def newCheckListValueItem3 = checkListCustomFieldType.getSingularObjectFromString('{"name" : "C", "checked" : false, "mandatory" : false, "rank" : 1}') def newCheckListValueItem4 = checkListCustomFieldType.getSingularObjectFromString('{"name" : "D", "checked" : false, "mandatory" : false, "rank" : 2}') def newCheckListValueItem5 = checkListCustomFieldType.getSingularObjectFromString('{"name" : "E", "checked" : false, "mandatory" : false, "rank" : 3}') //def newCheckListValueList = [] List newCheckListValueList = new ArrayList(); def priority = getFieldById(getFieldChanged()) def fieldValue = ((IssueConstantImpl) priority.getValue()).getId() if (fieldValue == "1") { cbField2.setHidden(false) newCheckListValueList.add(newCheckListValueItem1) newCheckListValueList.add(newCheckListValueItem2) issue.setCustomFieldValue(checkListField, newCheckListValueList) issueManager.updateIssue(currentUser, issue, EventDispatchOption.DO_NOT_DISPATCH , false) } else if (fieldValue == "2") { cbField2.setHidden(false) newCheckListValueList.add(newCheckListValueItem3) newCheckListValueList.add(newCheckListValueItem4) newCheckListValueList.add(newCheckListValueItem5) issue.setCustomFieldValue(checkListField, newCheckListValueList) issueManager.updateIssue(currentUser, issue, EventDispatchOption.DO_NOT_DISPATCH , false) } else { cbField2.setHidden(true) return } }
Please see this: Populating the Jira Checklist plugin via groovy scriptrunner for more information.
Hope this helps!
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
hi Jia,
Thank you for the reply and explanation, I should've closed this ticket - I've managed to resolve this by making use of a Behavior and Listeners using the code you provided.
note checklist field will always be visible if it contains prepopulated values - functionality doesnt exist to hide the field form the view screen
In my solution I create and clear the checklist field based on priority.
I'll post the solution and close the thread
Regards
Marius
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi Marius,
No problem! Happy to help!
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Community moderators have prevented the ability to post new answers.
Hiding Fields based on Priority (Behaviours)
import com.onresolve.jira.groovy.user.FormField
import com.atlassian.jira.issue.IssueConstantImpl
// Code to make fields mandatory on resolution on sev1/2 tickets
if (getFieldScreen().name == "ISC - JIRA Service Desk Resolve Issue Screen"){
def priority = getFieldById(getFieldChanged())
def fieldValue = ((IssueConstantImpl) priority.getValue()).getId()
FormField rootcause = getFieldById ("customfield_10303")
FormField incont = getFieldById ("customfield_28402")
FormField scrb = getFieldById ("customfield_28401")
if (fieldValue == "2") { //Sev 1 field id
rootcause.setFormValue(-1)
rootcause.setRequired(true)
rootcause.setHidden(false)
incont.setRequired(true)
incont.setHidden(false)
scrb.setRequired(true)
scrb.setHidden(false)
}
else if (fieldValue == "10101") { //Sev 2 field id
rootcause.setFormValue(-1)
rootcause.setRequired(true)
rootcause.setHidden(false)
incont.setRequired(true)
incont.setHidden(false)
scrb.setRequired(true)
scrb.setHidden(false)
}
else {
rootcause.setFormValue(-1)
rootcause.setRequired(false)
rootcause.setHidden(true)
incont.setRequired(false)
incont.setHidden(true)
scrb.setRequired(false)
scrb.setHidden(true)
}
}
// Code to hide Fields from Edit Screens when not Sev1/2 tickets
else if (getFieldScreen().name == "ISC: JIRA Service Desk Edit Screen"){
def priority = getFieldById(getFieldChanged())
def fieldValue = ((IssueConstantImpl) priority.getValue()).getId()
def defaultvalue = null
FormField rootcause = getFieldById ("customfield_10303")
FormField incont = getFieldById ("customfield_28402")
FormField scrb = getFieldById ("customfield_28401")
FormField need = getFieldById ("customfield_28403")
if (fieldValue == "2") { //Sev1
rootcause.setFormValue(-1)
rootcause.setRequired(false)
rootcause.setHidden(false)
incont.setRequired(false)
incont.setHidden(false)
scrb.setRequired(false)
scrb.setHidden(false)
}
else if (fieldValue == "10101") { //Sev2
rootcause.setFormValue(-1)
rootcause.setRequired(false)
rootcause.setHidden(false)
incont.setRequired(false)
incont.setHidden(false)
scrb.setRequired(false)
scrb.setHidden(false)
}
else {
//rootcause.setFormValue(-1)
rootcause.setRequired(false)
rootcause.setHidden(true)
rootcause.setFormValue(defaultvalue)
incont.setRequired(false)
incont.setHidden(true)
incont.setFormValue(defaultvalue)
scrb.setRequired(false)
scrb.setHidden(true)
scrb.setFormValue(defaultvalue)
need.setHidden(true)
}
}
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.