Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.


Excerpt

This tutorial will guide you through writing Groovy scripts that access a field of an issue, compare it with another value and perform an action based on the outcome. 

On this page:

Table of Contents
maxLevel1

2.1 Perform an action for a specific value of a field

This section of the tutorial guides you through writing a conditional statement that compares the value of a field against a String. Imagine a functional use case where you want to allow the progress on an issue only when the issue is assigned to the logged in userFor this you will need to write a Groovy condition in the Scripted (Groovy) condition to compare the usernames of the Assignee and the logged in user. 

Note

Note that you need not create a new condition for this. The imported backup has everything in place.

Writing the script

Step 1 - Navigate to the condition

  1. Go to the Administration icon Image Removed and click on it.
  2. Go to Issues - > Workflows
  3. Locate the workflow GIJ: Process Management Workflow
  4. Edit it
  5. Click on transition Start Progress
  6. Go to the Conditions tab
  7. Edit the Scripted (Groovy) condition which is the first condition in the list.

Step 2 - Write the script in the condition

Write the following script in Groovy script.

Code Block
languagegroovy
firstline1
linenumberstrue
issue.get("assignee").name == currentUser.name

(1)  get() method to access the assignee. Direct field access operator (.nameto retrieve the field instead of calling the getter (getName()). 

...

Step 3 - Test your script

  1. Click on Test Groovy Script.
  2. Input the issue key GIJ-5
  3. Click on Test
  4. The following result will be displayed.
  5. Image Removed

Step 4 - Save the configuration

  1. Click on Update
  2. Publish the workflow (you don't need to save a backup copy).

Step 5 - Test it on an issue

  1. View the issue GIJ-5 in a new tab.
  2. Check that the transition Start Progress is not available for a trigger on the issue GIJ-5.
  3. Click on Assign to me, to assign it to the logged in user.
  4. Check that the transition Start Progress is now available for a trigger on the issue GIJ-5. 

Use cases

The output of the code is a Boolean. You can use this script in any other relevant context, such as allowing only the reporter of the issue to close the issue.

References

2.2 Perform same action for two different values of the same field

This section of the tutorial guides you through writing a condition to check for two different values of a field and peform the same action for both based on the result. Imagine you want to assign the issue to the Project lead if the priority of an issue is Critical or HighestFor this you will need to write a Groovy condition in the Conditional execution section of the Set field value post-function. The condition should return true if the priority of the issue is either Critical or Highest. Based on the outcome assign the issue to the Project lead.

Writing the script

Step 1 - Navigate to the post-function

  1. Go to the Administration icon Image Removed and click on it.
  2. Go to Issues - > Workflows
  3. Locate the workflow GIJ: Process Management Workflow
  4. Edit it
  5. Click on transition Create
  6. Go to the Post-functions tab
  7. Edit the Set field value post-function which is the () post-function in the list.

Step 2 - Write the script in the editor

Write the following script in the editor of Conditional execution.

Code Block
languagegroovy
linenumberstrue
if(issue.getAsString("priority") == "Critical" || issue.getAsString("priority") == "Highest"){
  return true
}
else{
  return false
}

(1) getAsString() method to return the String representation of the value. || operator to compare two Strings. 

(2) if-else method to return true if the condition passes and false if it fails

...

Step 3 - Test your script

  1. Click on Test Groovy Script.
  2. Input the issue key GIJ-3
  3. Click on Test
  4. The following result will be displayed. 
  5. Image Removed

Step 4 - Simplify your script

You can simplify the script removing the if-else and returning the result of the comparison which is a Groovy truthy or falsy

...

Replace the script with the following code:

Code Block
languagegroovy
linenumberstrue
issue.getAsString("priority") == "Critical" || issue.getAsString("priority") == "Highest"

(1) Groovy truth - Returns true if the corresponding Boolean value is true.

Step 5 - Retest your script

  1. Click on Test again.
  2. The following result will be displayed. 
  3. Image Removed

Use cases

...


Excerpt

This tutorial will guide you through writing Groovy scripts that access a field of an issue, compare it with another value and perform an action based on the outcome. 


On this page:

Table of Contents
maxLevel1

2.1 Perform an action for a specific value of a field

This section of the tutorial guides you through writing a conditional statement that compares the value of a field against a String. Imagine a functional use case where you want to allow the progress on an issue only when the issue is assigned to the logged in userFor this you will need to write a Groovy condition in the Scripted (Groovy) condition to compare the usernames of the Assignee and the logged in user. 

Note

Note that you need not create a new condition for this. The imported backup has everything in place.

Writing the script

Step 1 - Navigate to the condition

  1. Go to the Administration icon Image Added and click on it.
  2. Go to Issues - > Workflows
  3. Locate the workflow GIJ: Process Management Workflow
  4. Edit it
  5. Click on transition Start Progress
  6. Go to the Conditions tab
  7. Edit the Scripted (Groovy) condition which is the first condition in the list.

Step 2 - Write the script in the condition

  1. Write the following script in Groovy script.

    Code Block
    languagegroovy
    firstline1
    linenumberstrue
    issue.get("assignee").name == currentUser.name

    (1)  get() method to access the assignee. Direct field access operator (.nameto retrieve the field instead of calling the getter (getName()). 


  2. Your configuration should look like this:

Step 3 - Test your script

  1. Click on Test Groovy Script.
  2. Input the issue key GIJ-5
  3. Click on Test
  4. The following result will be displayed.
  5. Image Added

Step 4 - Save the configuration

  1. Click on Update
  2. Publish the workflow (you don't need to save a backup copy).

Step 5 - Test it on an issue

  1. View the issue GIJ-5 in a new tab.
  2. Check that the transition Start Progress is not available for a trigger on the issue GIJ-5.
  3. Click on Assign to me, to assign it to the logged in user.
  4. Check that the transition Start Progress is now available for a trigger on the issue GIJ-5. 

Use cases

The output of the code is a Boolean. You can use this script in any other relevant context, such as allowing only the reporter of the issue to close the issue.

References

2.2 Perform same action for two different values of the same field

This section of the tutorial guides you through writing a condition to check for two different values of a field and peform the same action for both based on the result. Imagine you want to assign the issue to the Project lead if the priority of an issue is Critical or HighestFor this you will need to write a Groovy condition in the Conditional execution section of the Set field value post-function. The condition should return true if the priority of the issue is either Critical or Highest. Based on the outcome assign the issue to the Project lead.

Writing the script

Step 1 - Navigate to the post-function

  1. Go to the Administration icon Image Added and click on it.
  2. Go to Issues - > Workflows
  3. Locate the workflow GIJ: Process Management Workflow
  4. Edit it
  5. Click on transition Create
  6. Go to the Post-functions tab
  7. Edit the Set field value post-function which is the () post-function in the list.

Step 2 - Write the script in the editor

  1. Write the following script in the editor of Conditional execution.

    Code Block
    languagegroovy
    linenumberstrue
    if(issue.getAsString("priority") == "Critical" || issue.getAsString("priority") == "Highest"){
      return true
    }
    else{
      return false
    }

    (1) getAsString() method to return the String representation of the value. || operator to compare two Strings. 

    (2) if-else method to return true if the condition passes and false if it fails


  2. Your script will look like this:

Step 3 - Test your script

  1. Click on Test Groovy Script.
  2. Input the issue key GIJ-3
  3. Click on Test
  4. The following result will be displayed. 
  5. Image Added

Step 4 - Simplify your script

You can simplify the script removing the if-else and returning the result of the comparison which is a Groovy truthy or falsy

  1. Go to the editor
  2. Replace the script with the following code:

    Code Block
    languagegroovy
    linenumberstrue
    issue.getAsString("priority") == "Critical" || issue.getAsString("priority") == "Highest"

    (1) Groovy truth - Returns true if the corresponding Boolean value is true.


Step 5 - Retest your script

  1. Click on Test again.
  2. The following result will be displayed. 
  3. Image Added

Use cases

You can use this script in any relevant context, such as, All new Critical and Highest priority issues should directly go to the Waiting for approval status when the issue is created instead of Open status.

References

2.3 Perform different actions for different values of the same field

This section of the tutorial guides you through writing multiple conditions to perform different actions based on different values of a single-select or a Radio buttons field. Imagine you want to set the priority of the issue based on the impact of the issue mentioned by the issue creator. For this you will need to write a switch control structure in the Value of Set field value post-function to pass priority based on the selected Impact.

Writing the script

Step 1 - Navigate to the post-function

  1. Go back to the previous tab.
  2. Edit the workflow in Diagram mode.
  3. Click on the Create transition
  4. Click on Post-functions
  5. Edit the second post-function in the list.

Step 2 - Write the script in the post-function


  1. Write the following script in Value.

    Code Block
    languagegroovy
    linenumberstrue
    def impact = issue.getAsString("impact")
    switch (impact) {
     case "Company wide" : "Highest"; break
     case "More than one project" : "High" ; break
     case "Single project" || "Individual" : "Medium" ; break
     default : "Medium"; break
    }

    (2) switch control structure to handle different conditions

    (3) break statement - to exit the switch statement

    (4) Fall through cases sharing the same code for multiple matches.



Step 3 - Test your script

  1. Click on Test Groovy Script.
  2. Input the issue key GIJ-5
  3. Click on Test
  4. The following result will be displayed.
  5. Image Added

Use cases

The output of the code is a String representing the priority of an issue. You can use this script in any relevant context, such as, All new Critical and Highest priority issues should directly go to the Waiting for approval status when the issue is created instead of Open statussetting the priority of the issue to based on the Component/s.

References

2.

...

4 Perform an action testing for a specific value of a multi-valued field

This section of the tutorial guides you through writing multiple conditions to perform different actions based on different values of a single-select or a Radio buttons fielda condition to check for a specific value of a multi-valued field and perform an action based on the outcome. Imagine you want to set the priority send an Email notification to the Project lead of the issue based on the impact of the issue mentioned by the issue creator. For when the customer selects Not satisfied in the feedback form while closing the issue. For this you will need to write a switch control structure condition in the Value of Set field value Conditional execution of the Email issue post-function to pass priority based on the selected Impactsend an Email only when the option Not satisifed is selected in the Feedback custom field.

Writing the script

Step 1 - Navigate to the post-function

  1. Go back to the previous tab.
  2. Edit the workflow in Diagram mode.
  3. Click on the Create Close transition
  4. Click on Post-functions
  5. Edit the second Email issue () post-function in the list.

Step 2 - Write the script in the post-function

  1. Write the following script in Valuethe Conditional execution.

    Code Block
    languagegroovy
    linenumberstrue
    def impact = issue.getAsStringget("impactFeedback")
    switch (impact) .any {
     case "Company wide" : "Highest"; break
     case "More than one project" : "High" ; break
     case "Single project" || "Individual" : "Medium" ; break
     default : "Medium"; break
    }

    (2) switch control structure to handle different conditions

    (3) break statement - to exit the switch statement

    (4) Fall through cases sharing the same code for multiple matches.
     it.getValue() == "Not satisfied"}

    (1) any - returns true if any element has the specified value

    (2) A closure using an implicit parameter (it)



Step 3 - Test your script

  1. Click on Test Groovy Script.
  2. Input the issue key GIJ-5
  3. Click on Test
  4. The following result will be displayed.

Use cases

The output of the code is a String representing the priority of an issue. You You can use this script in any relevant context, such as,  setting the priority of Escalate the issue to based on the Component/sonly when the issue has been flagged.

References


2.

...

6 Perform action based on the size of a multi-valued field

This section of the tutorial guides you through writing a condition to check for a specific value the size of a multi-valued field and list and perform an action based on the outcome. Imagine you want to send an Email notification to the Project lead of the issue when the customer selects Not satisfied in the feedback form while closing the issue. Flimit a user to select a minimum of one and maximum of three books for rent from a Library Inventory management. For this you will need to write a condition in the Conditional execution of the Email issue post-function to send an Email only when the option Not satisifed is selected in the Feedback custom fieldin the Scripted (Groovy) Validator to count the number of options selected in the Books field on the Rent Books form while renting the books.

Writing the script

Step 1 - Navigate to the post-function

  1. Go back to the previous tab.
  2. Edit the workflow in Diagram mode.
  3. Click on the Close  Rent transition
  4. Click on Post-functions
  5. Edit the Email issue () post-function in the list.

Step 2 - Write the script in the post-function

  1. Write the following script in the Conditional execution.

    Code Block
    languagegroovy
    linenumberstrue
    issue.get("FeedbackBooks").anysize() {> 1  it.getValue&& issue.get("Books").size() == "Not satisfied"}<=3

    (1) any - returns true if any element has the specified value

    (2) A closure using an implicit parameter (it)



Step 3 - Test your script

  1. Click on Test Groovy Script.
  2. Input the issue key GIJ-5
  3. Click on Test
  4. The following result will be displayed.

Use cases

You can use this script in any relevant context, such as, Escalate the issue only when the issue has been flagged.

References

2.6 Perform an action for

...

each value of a multi-valued field

This section of the tutorial guides you through writing a condition to check for multiple values of a multi-valued field and perform an action based on the outcome. Imagine you want to limit a user to select a minimum of one and maximum of three books for rent from a Library Inventory management. For this you will need to write a condition in the Scripted (Groovy) Validator to count the number of options selected in the Books field on the Rent Books form while renting the books.

Writing the script

Step 1 - Navigate to the post-function

  1. Go back to the previous tab.
  2. Edit the workflow in Diagram mode.
  3. Click on the Rent transition
  4. Click on Post-functions
  5. Edit the Email issue () post-function in the list.

Step 2 - Write the script in the post-function

  1. Write the following script in the Conditional execution.

    Code Block
    languagegroovy
    linenumberstrue
    issue.get("Books").size() > 1 && issue.get("Books").size() <=3

    (1) any - returns true if any element has the specified value

    (2) A closure using an implicit parameter (it)



Step 3 - Test your script

  1. Click on Test Groovy Script.
  2. Input the issue key GIJ-5
  3. Click on Test
  4. The following result will be displayed.

Use cases

You can use this script in any relevant context, such as, Escalate the issue only when the issue has been flagged.

References

2.6 Perform an action for

...

a subset of values of a multi-valued field

This section of the tutorial guides you through writing a condition to check for multiple values of a multi-valued field and perform an action based on the outcome. Imagine you want to limit a user to select a minimum of one and maximum of three books for rent from a Library Inventory management. For this you will need to write a condition in the Scripted (Groovy) Validator to count the number of options selected in the Books field on the Rent Books form while renting the books.

Writing the script

Step 1 - Navigate to the post-function

  1. Go back to the previous tab.
  2. Edit the workflow in Diagram mode.
  3. Click on the Rent transition
  4. Click on Post-functions
  5. Edit the Email issue () post-function in the list.

Step 2 - Write the script in the post-function

  1. Write the following script in the Conditional execution.

    Code Block
    languagegroovy
    linenumberstrue
    issue.get("Books").size() > 1 && issue.get("Books").size() <=3

    (1) any - returns true if any element has the specified value

    (2) A closure using an implicit parameter (it)



Step 3 - Test your script

  1. Click on Test Groovy Script.
  2. Input the issue key GIJ-5
  3. Click on Test
  4. The following result will be displayed.

Use cases

You can use this script in any relevant context, such as, Escalate the issue only when the issue has been flagged.

References