How to edit priority based on a cascading select?

Swarna Radha
Contributor
April 3, 2018

Hi,

I have a scenario

test1= t1,t2,t3

values= V1, V2, V3

when i edit  a custom field "Impact and Urgency" (cascading select) (Example: t1, V2), priority should be calculated automatically become High after clicking update and i am using script runner

I am bit confused which function to use- listeners (issue updated), behaviour, post functions or condition

Kindly advice

Thanks

Swarna

2 answers

0 votes
Swarna Radha
Contributor
April 3, 2018

Hi Nic,

The script below shows no error but when i update the custom field, the priority remains the same. I cannot figure what is not working

Code:

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.config.PriorityManager
import com.atlassian.jira.issue.priority.Priority
import com.atlassian.jira.issue.customfields.option.Option
import com.atlassian.jira.issue.fields.CustomField
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.IssueManager
import com.atlassian.jira.issue.customfields.view.CustomFieldParams
import com.atlassian.jira.issue.customfields.option.Option
import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.issue.customfields.option.Options
import com.atlassian.jira.issue.fields.config.FieldConfig

 

MutableIssue mutableIssue = (MutableIssue) issue;
def priorityManager = ComponentAccessor.getComponent(PriorityManager)
def optionsManager = ComponentAccessor.getOptionsManager()

CustomFieldManager customFieldManager = ComponentAccessor.getCustomFieldManager()
CustomField cf = customFieldManager.getCustomFieldObjectByName("Impact and Urgency")
FieldConfig config = cf.getRelevantConfig(issue)
def options = optionsManager.getOptions(config)
def parentOption = options.find {it.value == "test"}
def childOption = parentOption?.childOptions?.find{it.value == "value 1"}

if (parentOption && childOption)
{
mutableIssue.setPriorityId("1") }


else{
mutableIssue.setPriorityId("2")
}

Thanks

Swarna

Nic Brough -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.
April 4, 2018

I think you need to tell Jira to update the issue.  Try this at the end

issueManager.updateIssue(user, mutableissue, EventDispatchOption.DO_NOT_DISPATCH, false)

Swarna Radha
Contributor
April 5, 2018

Hi Nic,
I am getting error when i add the line issueManager.updateIssue(user, mutableissue, EventDispatchOption.DO_NOT_DISPATCH, false).

I have already defined issue manager and issue but i don't have codes for user

 

Code:

import com.atlassian.jira.issue.customfields.view.CustomFieldParams
import com.atlassian.jira.issue.customfields.option.Option
import com.atlassian.jira.issue.customfields.view.CustomFieldParams
import com.atlassian.jira.issue.customfields.impl.CascadingSelectCFType
import org.apache.log4j.Category
import com.atlassian.jira.event.type.EventDispatchOption
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.config.PriorityManager
import com.atlassian.jira.issue.priority.Priority
import com.atlassian.jira.issue.customfields.option.Option
import com.atlassian.jira.issue.fields.CustomField
import com.atlassian.jira.issue.customfields.option.LazyLoadedOption
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.IssueManager
import com.atlassian.jira.issue.customfields.view.CustomFieldParams
import com.atlassian.jira.issue.customfields.option.Option
import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.issue.customfields.option.Options
import com.atlassian.jira.issue.fields.config.FieldConfig
import com.atlassian.jira.issue.fields.CustomField
import com.atlassian.jira.issue.customfields.view.CustomFieldParams
import com.atlassian.jira.ComponentManager

log.setLevel(org.apache.log4j.Level.DEBUG)

def issueManager = ComponentAccessor.getIssueManager()

MutableIssue issue = event.issue as MutableIssue
def priorityManager = ComponentAccessor.getComponent(PriorityManager)
def optionsManager = ComponentAccessor.getOptionsManager()
CustomFieldManager customFieldManager = ComponentAccessor.getCustomFieldManager()
//CustomField cf = customFieldManager.getCustomFieldObjectByName("Impact and Urgency")
//CustomField cf = ComponentAccessor.getCustomFieldManager().getCustomFieldObjectByName("Impact and Urgency" )
def field = customFieldManager.getCustomFieldObjectByName("Impact and Urgency")
Object cfVal = issue.getCustomFieldValue(field)

HashMap<String, Option> hashMapEntries = (HashMap<String, Option>) cfVal
if (hashMapEntries != null) {
Option parent = hashMapEntries.get(CascadingSelectCFType.PARENT_KEY)
Option child = hashMapEntries.get(CascadingSelectCFType.CHILD_KEY)
def first = parent.toString()
def second = child.toString()
log.debug("Cascading values selected: $first - $second")

if (first== "test Ltd/test Group" && second=="Core Services")
{

log.debug("RentrE")
issue.setPriorityId("P1 - Very High")
log.debug("funi " )
//


}

//def wer= mutableIssue.getPriority()

//return log.debug("$wer")


}

issueManager.updateIssue(user, issue, EventDispatchOption.DO_NOT_DISPATCH, false)

Thanks

Capture.PNG

Swarna Radha
Contributor
April 6, 2018

Hi Nic,

I have managed to solve the issue. The coding is working...

Thanks :)

Swarna

Varun Nelluri May 9, 2020

@Swarna Radha , Could pease post working code here and where did you implemented the code like.. Behaviour or Post function? 

Thanks

0 votes
Nic Brough -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.
April 3, 2018

It depends on what you want from it.

A condition stops a user using a transition.  I can't really see that being of much help here unless you're expecting them to take a guess at the right value and manually set it correctly before then hitting the transition buttons

A behaviour would be able to calculate a value for the field and set it, but let the user overwrite it

A post-function could calculate the value and set it whenever the user creates or transitions an issue

A listener can do the same as a post-function, but can also pick up when the issue is edited.

Another possibility could be a scripted field that means the user would have no way to change the value, but would always be calculated on any issue change

Swarna Radha
Contributor
April 3, 2018

Hi Nic,

I have used a listener- Issue Updated. Do i need to add the listener in the workflow?

Please find the code below:

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.config.PriorityManager
import com.atlassian.jira.issue.priority.Priority
import com.atlassian.jira.issue.customfields.option.Option
import com.atlassian.jira.issue.fields.CustomField
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.IssueManager
import com.atlassian.jira.issue.customfields.view.CustomFieldParams
import com.atlassian.jira.issue.customfields.option.Option
import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.issue.customfields.option.Options
import com.atlassian.jira.issue.fields.config.FieldConfig

 

MutableIssue mutableIssue = (MutableIssue) issue;
def priorityManager = ComponentAccessor.getComponent(PriorityManager)
def optionsManager = ComponentAccessor.getOptionsManager()

CustomFieldManager customFieldManager = ComponentAccessor.getCustomFieldManager()
CustomField cf = customFieldManager.getCustomFieldObjectByName("Impact and Urgency")
FieldConfig config = cf.getRelevantConfig(issue)
//def config = cf.getRelevantConfig(getIssueContext())// getting error on this line
def options = optionsManager.getOptions(config)// getting error on this line
def parentOption = options.find {it.value == "t1"}
// getting error on this line
def childOption = parentOption?.childOptions?.find{it.value == "V2}
// getting error on this line

if (parentOption){
if (childOption){
mutableIssue.setPriorityId("1") }
}

else{
mutableIssue.setPriorityId("2")
}

The code is not working 

Thanks Swarna

Swarna Radha
Contributor
April 3, 2018

Hi Nic,

I have used a listener- Issue Updated but my script is not working. Do i need to add the listener to workflow transition??

Please see below my codes:

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.config.PriorityManager
import com.atlassian.jira.issue.priority.Priority
import com.atlassian.jira.issue.customfields.option.Option
import com.atlassian.jira.issue.fields.CustomField
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.IssueManager
import com.atlassian.jira.issue.customfields.view.CustomFieldParams
import com.atlassian.jira.issue.customfields.option.Option
import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.issue.customfields.option.Options
import com.atlassian.jira.issue.fields.config.FieldConfig

 

MutableIssue mutableIssue = (MutableIssue) issue;
def priorityManager = ComponentAccessor.getComponent(PriorityManager)
def optionsManager = ComponentAccessor.getOptionsManager()

CustomFieldManager customFieldManager = ComponentAccessor.getCustomFieldManager()
CustomField cf = customFieldManager.getCustomFieldObjectByName("Impact and Urgency")
FieldConfig config = cf.getRelevantConfig(issue)
//def config = cf.getRelevantConfig(getIssueContext())// getting error on this line
def options = optionsManager.getOptions(config)// getting error on this line
def parentOption = options.find {it.value == "Test1"}
// getting error on this line
def childOption = parentOption?.childOptions?.find{it.value == "V2"}
// getting error on this line

if (parentOption){
if (childOption){
mutableIssue.setPriorityId("1") }
}

else{
mutableIssue.setPriorityId("2")
}

 

Thanks 

Swarna

Nic Brough -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.
April 3, 2018

I can't quite make out how your code might be working - it looks like you've got duplicate lines and I'm not sure what is commented out and what isn't working.  The error messages would be helpful too.

Suggest an answer

Log in or Sign up to answer
TAGS
AUG Leaders

Atlassian Community Events