Versions Compared

Key

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

A post

-

function that runs a sequence of JMWE post

-

functions on the current issue (or issues related to the current issue).

This

Using this post function is the

easiest

safest way of

making sure

guaranteeing that a series of post-functions run in a predictable order during a transition - it is easier and more reliable than using Delayed execution on each post function (as was previously recommended).

For example,

if you need,

consider that during a transition

,

you need to first create a new issue (using the Create Issue(s) post-function) and then send a notification email mentioning the new issue (using the Email Issue post-function). In this scenario, you need to make sure that the first post

-

function has finished running before starting the second

one

, which is something that Jira Cloud doesn't guarantee if you don't use a Sequence of post functions post function.

To add the 'Sequence of Post-functions' post

-

function to a transition: 

  1. Click Edit for the workflow that has the transition

,
  1. you wish to add the post-function on.

  2. In the Workflow Designer, select the transition.

Click on 
  1. Click Post

Functions 
  1. Functions in the properties panel.

Click on Add post
  1. Click Add post function.

  2. Select Sequence of

post
  1. Post-

functions from
  1. functions from the list of post

-
  1. functions.

Click on 
  1. Click Add

 
  1.  to navigate to

add
  1. the Create issue(s) post-function

on the transition.Image Removed
  • Click on "Add post function"

  • Add the required post-functions

    Click on Add to
    1. screen where you can add configuration details to the post-function. See below for configuration details.

    2. Click Add to add the post-function to the transition.

    See here for a use case of this post-function.

    Common to all post-functions:

    Filter by label (Content by label)
    showLabelsfalse
    max5
    spacesKB
    sorttitle
    showSpacefalse
    typepage
    cqllabel = "common-issue" and type = "page" and space = "JMWEC"
    labelskb-troubleshooting-article
    Panel
    titleRelated links
    Info

    After adding the post function, move it to the appropriate position according to Placing post functions in a transition.

    You are viewing the documentation for Jira Cloud.

    On This Page

    Table of Contents
    minLevel1
    maxLevel2
    outlinefalse
    typelist
    printablefalse
    Image Added

    Note

    JMWE shows an error message on the issue view if any error occurs during the execution of the post-function. This message is only displayed if the current user is a Jira administrator. 

    When you add this post-function to a transition and trigger it, each post-function defined in the sequence is run, one after the other on the target issues. 

    Issue(s) to operate on

    Select the issues on which the sequence of post-functions should be run. They can be:

    Current issue:

    Issue(s) to operate on

    Select the issues on which the sequence of post-functions should be run.

    Target issue(s)

    • Current issue - Select this option to run the sequence of post-functions on the current issue. This is the default option.

    • Issue/Subtasks

      • Sub-tasks of the current issue - Select this option to run the sequence of post-functions on the sub-tasks of the current issue

      • Parent issue of the current sub-task - Select this option to run the sequence of post-functions on the parent of the current issue

    • Epic/Stories

      • Issues that belong to the current issue (Epic) - Select this option to run the sequence of post-functions on the issues that belong to the current Epic

      • Epic of the current issue - Select this option to run the sequence of post-functions on the Epic of the current issue

    • Issue Hierarchy

      • Child issues of the current issue in the Portfolio hierarchy - Select this option to run the sequence of post-functions on the child issues of the current issue in the Portfolio hierarchy

      • Parent issue of the current issue in the Portfolio hierarchy - Select this option to run the sequence of post-functions on the parent issue of the current issue in the Portfolio hierarchy

    • Issue Links

      • Issues linked to the current issue through any link type - Select this option to run the sequence of post-functions on all issues linked to the current issue

      • Issues linked to the current issue through the following link type - Select this option to run the sequence of post-functions on the linked issues of a specific link type. Select the specific link type under “Issue link”

    • Calculated

      • Current issue - Select this option to run the sequence of post-functions on the current issue. This is the default option.

      • Issue/Subtasks

        • Sub-tasks of the current issue

      :
        • - Select this option to run the sequence of post-functions on the sub-tasks of the current issue

        • Parent issue of the current sub-task

      :
        • - Select this option to run the sequence of post-functions on the parent of the current issue

    • Epic/Stories

      • Issues that belong to the current issue (Epic)

      :
      • - Select this option to run the sequence of post-functions on the issues that belong to the current Epic

      • Epic of the current issue

      :
      • - Select this option to run the sequence of post-functions on the Epic of the current issue

    • Issue Hierarchy

      • Child issues of the current issue in the Portfolio hierarchy

      :
      • - Select this option to run the sequence of post-functions on the child issues of the current issue in the Portfolio hierarchy

      • Parent issue of the current issue in the Portfolio hierarchy

      :
      • - Select this option to run the sequence of post-functions on the parent issue of the current issue in the Portfolio hierarchy

    • Issue Links

      • Issues linked to the current issue through any link type

      :
      • - Select this option to run the sequence of post-functions on all issues linked to the current issue

      • Issues linked to the current issue through the following link type

      :
      • - Select this option to run the sequence of post-functions on the linked issues of a specific link type. Select the specific link type under “Issue link”

    • Calculated

      • Issues returned by the following Nunjucks template

      :
      •  - Select this option to run the sequence of post-functions on issues returned by the result of a Nunjucks template. Input a Nunjucks template which is a comma-separated list of valid issue keys. For example:
        "TEST-1"
        "TEST-1","TEST-2"
        {{ targetIssue.fields.parent.key }}
        {{ targetIssue.fields.subtasks | join(",", "key") }}

      • Issues returned by a JQL search:  Select this option to run the sequence of post-functions on issues returned by a JQL search. Input a JQL search expression. For example:
        project = TEST returns issues of the project with the key TEST
        project = {{ targetIssue.fields.project.key }} and assignee = {{currentUser._accountId}} returns issues of a project that belong to the project with key TEST and the assignee is the current user

        Code Block
        {% if targetIssue.fields.assignee %}
            assignee = {{targetIssue.fields.assignee._accountId}}
        {% else %}
            issuekey=INVALID-1
        {% endif %}

    Note

    that

    :the {% if %} block is necessary to avoid an invalid JQL query when the issue is unassigned. In that case, the template will return a valid JQL query that returns no issue (issuekey=INVALID-1).

    Post-functions

    postFunction-SequenceAddPostFunction.pngImage Added

    Create the ordered list of post functions to be run against the selected issue. The following controls are available (Figure 2, right):

    • Click Add post function to add a post function to the list.

    • To reorder post functions, use the handle ( (blue star) ) to drag and drop a post function to its new position in the order.

    • Click Edit to edit an existing post function.

    • Click Remove to completely remove a post function from the sequence.
      (warning) Note: this cannot be undone!

    Error handling

    By default, even if one of the post functions fails with an error, the remaining post functions in the sequence will still run. To stop the execution of subsequent post functions after an error occurs, select the option Skip subsequent post-functions if a post-function encounters an error.

    Conditional execution

    Include Page
    [Includes] Post-function - Conditional Execution
    [Includes] Post-function - Conditional Execution

    Delayed execution

    Include Page
    [Includes] Delayed Execution
    [Includes] Delayed Execution

    Passing variables within a sequence

    Using By using the {% setContextVar %} Nunjucks tag you can pass data from one post - function to a to a subsequent post - function.

    context: Holds all the context variables added in the current post-function. For example, if you create a context variable myVar in the first post-function of the sequence:

    Code Block
    languagegroovy
    {% setContextVar myVar = "a value" %}

    This variable will then be available to subsequent post-functions as:

    Code Block
    languagegroovy
    {{ context.myVar }}
    (warning) Note that
    Note

    Note: this variable will not be available in the Nunjucks tester. 

    Variables specific to the Create Issue post-function

    newIssueKey: Stores the issue key of the last issue created by a Create Issue(s) post-function in the sequence. You can access it as:

    Code Block
    languagegroovy
    {{ context.newIssueKey }} 

    newIssueKeys: Stores an array of the keys of all the issues created by any Create Issue(s) post-function in the sequence. You can access the created issues from

    Code Block
    languagegroovy
    {{ context.newIssueKeys }}

    For example: to add a comment on the current issue with the keys of the issue created

    Code Block
    languagegroovy
    Issues created are:
    {{ context.newIssueKeys | join(",") }}

    You can access the information of a specific issue using the issue filter. For example: To get the assignee of the issue created by the Create issue post-function:

    Code Block
    languagejs
    {{ context.newIssueKey | issue("assignee") | field("fields.assignee.displayName") }}

    Error handling

    If one of the post-functions fails with an error, the remaining post-functions in the sequence are run anyway. To stop the execution of subsequent post-functions after an error occurs, select the option “Skip subsequent post-functions if a post-function encounters an error”.

    Conditional execution

    To execute this post-function based on the result of a Nunjucks template see Conditional execution.

    Delayed execution

    Include PageDelayed executionDelayed execution

    Use case

    A typical use of this workflow post-function is to run a list of post-functions in sequence considering the asynchronous nature of post-functions. Consider a use case where you want to clone an issue and its subtasks to another project, then:

    1. Add the "Sequence of post-functions" post-function to the transition

    2. Select the “Target issues” as “Current issue”

    3. In the sequence add the "Create issue" post-function.

      1. Select the destination project in "Project"

      2. Select the "Issue type" as "Calculated" and input: 

        Code Block
        {{ issue.fields.issuetype.name }}
      3. Select the "Link to new issue" as "clones"

      4. Configure the fields

      5. Click on Save

    4. Add another "Create issue" post-function to clone the sub-tasks

      1. Select the destination project in "Project"

      2. Select the "Issue type" as "Subtask"

      3. Under the "Parent issue" input the following template:

        Code Block
        languagejs
        {{ transition.context.newIssueKey }}
      4. Select "Multiple issue creation" option and input the following template:

        Code Block
        languagejs
        {{ issue | subtasks | length }}
      5. Save the post-function.

    5. Click on "Save"

    6. Publish the workflow.

    Refer here for more use cases.