1. Fidel Castro Armario
  2. JIRA Workflow Toolbox

Wiki

Clone wiki

JIRA Workflow Toolbox / News

[2017-07-24] Soon To Be Released JIRA Workflow Toolbox 2.2.40

New features

  • Added 2 new read-only virtual fields:
    • Sprint Start Date
    • Sprint End Date
  • New functions added to the parser:
FUNCTIONRETURNED VALUE
nextTime(number time_instant, string schedule_name, timeZone time_zone) : numberIf time_instant doesn't belong to schedule with name schedule_name, then returns closer time in the future that belongs to the schedule, otherwise returns time_instant.
Example: nextTime(2017/12/01 01:00, "my_schedule", LOCAL) returns 2017/12/01 08:00
Example: nextTime(2017/12/01 15:00, "my_schedule", LOCAL) returns 2017/12/04 08:00.
Example: nextTime(2017/12/01 08:00, "my_schedule", LOCAL) returns 2017/12/01 08:00.
Example: nextTime(2017/11/30 15:00, "my_schedule", LOCAL) returns 2017/11/30 16:00.
nextTime(number time_instant, string schedule_name, string additional_terms, timeZone time_zone) : numberSimilar to previous function, but with extra parameter additional_terms, which is a string containing extra SDG clauses that will be attached to schedule with name schedule_name. This function can be used to include personal holidays to an existing schedule.
Example without additional terms:nextTime(2017/12/01 15:00, "my_schedule", LOCAL) returns 2017/12/04 08:00.
Example with additional terms:nextTime(2017/12/01 15:00, "my_schedule", "2017/12/04 {;}", LOCAL) returns 2017/12/05 8:00.




[2017-07-05] Released JIRA Workflow Toolbox 2.2.39

New features

1) Support for doing time calculations on Custom Schedules

Now, you will be able to do any time calculations on the very particular work-schedule(s) of your company or organization.

You can define one or more custom schedules at Administration > Add-ons > JIRA WORKFLOW TOOLBOX > Schedule using Schedule Definition Grammar, which is a very powerful language capable of defining schedules as complex as you might imagine.

Then you have the following functions available to do time calculations on your custom schedules, using any feature of the plugin (conditions, validations, post-functions and calculated fields):

FUNCTIONRETURNED VALUE
inSchedule(number time_instant, string schedule_name, string additional_terms, timeZone time_zone) : booleanSimilar to previous function, but with extra parameter additional_terms, which is a string containing extra SDG clauses that will be attached to schedule with name schedule_name. This function can be used to include personal holidays to an existing schedule.
Example without additional terms:inSchedule(2017/12/04 9:00, "my_schedule", LOCAL) returns true.
Example with additional terms:inSchedule(2017/12/04 9:00, "my_schedule", LOCAL) returns false.
timeDifference(number higher_instant, number lower_instant, string schedule_name, timeZone time_zone) : numberReturns the number of milliseconds elapsed from lower_instant to higher_instant within schedule with name schedule_name for time_zone timezone.
Example:timeDifference(2017/12/04 10:01, 2017/12/01 01:00, "my_schedule", LOCAL) returns 8 * {HOUR} + 31 * {MINUTE}.
Example:timeDifference(2017/12/04 17:00, 2017/12/04 14:00, "my_schedule", LOCAL) returns 2 * {HOUR} + 30 * {MINUTE}.
timeDifference(number higher_instant, number lower_instant, string schedule_name, string additional_terms, timeZone time_zone) : numberSimilar to previous function, but with extra parameter additional_terms, which is a string containing extra SDG clauses that will be attached to schedule with name schedule_name. This function can be used to include personal holidays to an existing schedule.
Example without additional terms:timeDifference(2017/12/05 18:00, 2017/12/01 9:00, "my_schedule", LOCAL) returns 25 * {HOUR}.
Example with additional terms:timeDifference(2017/12/05 18:00, 2017/12/01 9:00, "my_schedule", "2017/12/04 {;}", LOCAL) returns 15 * {HOUR}.
addTime(number base_instant, number offset, string schedule_name, timeZone time_zone) : numberReturns the time instant resulting of adding offset milliseconds to base_instant within schedule with name schedule_name for time_zone timezone.
Example: addTime(2017/12/01 01:00, 8 * {HOUR} + 31 * {MINUTE}, "my_schedule", LOCAL) returns 2017/12/04 10:01.
Example:addTime(2017/12/04 14:00, 2 * {HOUR} + 30 * {MINUTE}, "my_schedule", LOCAL) returns 2017/12/04 17:00.
addTime(number base_instant, number offset, string schedule_name, string additional_terms, timeZone time_zone) : numberSimilar to previous function, but with extra parameter additional_terms, which is a string containing extra SDG clauses that will be attached to schedule with name schedule_name. This function can be used to include personal holidays to an existing schedule.
Example without additional terms:addTime(2017/12/01 9:00, 25 * {HOUR}, "my_schedule", LOCAL) returns 2017/12/05 18:00.
Example with additional terms:addTime(2017/12/01 9:00, 15 * {HOUR}, "my_schedule", "2017/12/04 {;}", LOCAL) returns 2017/12/05 18:00.

In the examples above we have used schedule "my_schedule", whose definition in SDG is:

./others/schedules/simple-schedule-example.png

Note that 2017/12/01 is Friday, and 2017/12/04 is Monday.

A typical usage example is: Automatically Log Work based on Start Progress and Stop Progress transitions

2) Other new functions added to the parser:

FUNCTIONRETURNED VALUE
issueIDFromKey(string issue_key) : stringReturns the internal ID of issue with key issue_key. This function also admits a comma separated list of issue keys, and returns a comma separated list of internal IDs.
Example: issueIDFromKey("CRM-1") returns "10001".
issueKeyFromID(string issue_ID) : stringReturns the issue key of issue with internal ID issue_ID. This function also admits a comma separated list of issue IDs, and returns a comma separated list of issue keys.
Example: issueIDFromKey("10001") returns "CRM-1".
timeZone(string timeZone_name) : timeZoneReturns the timeZone whose name is represented by string timeZone_name. This function is useful to obtain a timeZone from a string, like the value of a project property.
Example: timeZone("DST") returns DST timeZone.

Bug Fixes

  • Issue #636 - Function latestReleasedVersion() failed when there are version with no release date.


[2017-06-15] Released JIRA Workflow Toolbox 2.2.38

New features

New parser functions:

FUNCTIONRETURNED VALUE
releaseDates(string versions) : number listReturns a number list with the release dates for versions in string versions for current issues project. Parameter versions is a comma separated list of version names.
Example: releaseDates(%{00074}) returns the list of release dates for fixed versions. Note that %{00074} is field code for Fixed versions.
releaseDates(string versions, string projects) : number listReturns a number list with the release dates for versions in string versions for projects in parameter projects. Parameter versions is a comma separated list of version names. Parameter projects is a comma separated list of project keys or project names.
Example: releaseDates(%{00077}, "CRM") returns the list of release dates for affected versions for project with key "CRM". Note that %{00077} is field code for Affected versions.

Bug Fixes

  • Issue #636 - Error when trying to set Epic Link using an Epic Name with white spaces.
  • Issue #650 - Function getMatchingValue(expression, key_list, value_list) fail when value_list contain equal or less elements than key_list and the value returned by expression doesn't match any key in key_list.


[2017-05-27] Released JIRA Workflow Toolbox 2.2.37

Improvements

Bug Fixes

[2017-04-21] Released JIRA Workflow Toolbox 2.2.36

New Features

  • New Functions added to the parser:
FUNCTIONRETURNED VALUE
componentLeader(string component_name) : stringReturns the user name of the leader of the component with name component_name in current issue's project. This function also admits a comma separated list of components, and returns a comma separated list of user names. Output will contain repeated user names if a same user is leader of more than one component.
Example: componentLeader(%{00094}) returns a comma separated list with the user names of the leaders of current issue's components.
componentLeader(string component_name, string project_key) : stringReturns the user name of the leader of the component with name component_name in project with key project_key. This function also admits a comma separated list of components, and returns a comma separated list of user names. Output will contain repeated user names if a same user is leader of more than one component.
Example: componentLeader("Web Portal", "CRM")) returns the user name of the leader of the component with name Web Portal in project with key CRM.

Improvements

  • Issue #557 - Function issueKeysToIssueList() also admits issue IDs in addition to issue keys.

Bug Fixes

  • Function availableItems() and allAvailableItems() applied on field Components leaders returned the list of all the users in the JIRA instance, instead of the list of leaders of the components in the project.
  • Problem on Create issues and subtasks post-function when setting fields whose names contain a comma character.
  • Issue #573 - Problems with some parser functions when received a null value as input.
  • Issue #583 - Problem when deleting an issue type from JIRA and it was being used in a condition, validation or post-function.
  • Issue #537 - Problem with function hasChanged() when field checked is used by another feature of the plugin in the same transition.


[2017-03-23] Released JIRA Workflow Toolbox 2.2.35

Improvements

  • Added 2 new assignment modes to Assign to Project Role:
    • previous user in project role who has had the issue assigned.
    • previous user in project role who has had the issue assigned, or lacking that to default user for project role.

The 2 already existing modes "last user in project role..." don't reassign the issue when current assignee is in selected project role, while these 2 new modes do it.

Bug Fixes

  • Issue #543 - Post function email with attachment not working at "Create Issue" transition
  • Issue #546 - Epic Link can't be directly copied to Epic Link
    Until now Epic Link only could be set using Epic Name as source value. Now it can also be set using another Epic Link value, or a string containing the issue key of an Epic issue.


[2017-03-15] Released JIRA Workflow Toolbox 2.2.34

New Features

  • Added new functions to the parser:
FUNCTIONRETURNED VALUE
formatWorkDuration(number duration) : stringSimilar to function formatDuration() but using the workday and workweek defined at time tracking configuration, instead of 24 hours per day and 7 days per week.
Example: formatWorkDuration(5 * 8 * {HOUR} + 2 * 8 * {HOUR} + 3 * {HOUR}) returns "1 week, 2 days, 3 hours", with 8 hours per workday and 5 days per workweek.
shortFormatWorkDuration(number duration) : stringSimilar to function shortFormatDuration() but using the workday and workweek defined at time tracking configuration, instead of 24 hours per day and 7 days per week.
Example: formatWorkDuration(5 * 8 * {HOUR} + 2 * 8 * {HOUR} + 3 * {HOUR}) returns "1w 2d 3h", with 8 hours per workday and 5 days per workweek.

Improvements

  • More examples in the parser's documentation.

Bug Fixes

  • Issue #537 - Problems with functions related to field edition in transition screen
  • Issue #534 - This issue was not fully fixed in version 2.2.33

[2017-03-08] Released JIRA Workflow Toolbox 2.2.33

New Features

  • New parser functions:
FUNCTIONRETURNED VALUE
leastBusyUserInRole(string projectRoleName, string projectKey, string jqlQuery) : stringEquivalent to the previous function but with extra argument jqlQuery, used for restricting the issues to be considered to pick the least busy user.
Example: leastBusyUserInRole("Developers", %{00018}, "project = " + %{00018}) returns the user playing role Developers in current project, with the least number of unresolved issues in current project assigned. Note that %{00018} is field code for Project key.
nextUserInGroup(string groupName, string queueName) : stringreturns the name of the next active user in group with name groupName, for a round-robin queue with name queueName. The string queueName is an arbitrary name. The queue is automatically created the first time a queue is used in a function call. Each time the function is called on the same pair of arguments (group, queue), a different user in the group is returned. The queue can be used in different transitions of the same or different workflows within the same JIRA instance.
Example: nextUserInGroup("jira-developers", "code-review-queue") returns the username of the next user in group jira-developers for round-robin queue code-review-queue. Each time the function is called with the same pair of arguments, a different username is returned.



Improvements

  • New parameter JQL Query in post-function Assign to Project Role for restricting issues to be considered when assigning to the least busy user in a project role:

    ./img/various/assign-project-role-least-busy.png


  • Performance improvement in functionality for selecting the least busy user in a project role, either using post-function Assign to Project Role or function leastBusyUserInRole().

Bug Fixes

  • Issue #534 - Virtual field Target status doesn't work on "Create Issue" transitions
  • Issue #536 - Problems with lastAssigneeInRole() function and the parser's documentation


[2017-02-26] Released JIRA Workflow Toolbox 2.2.32

New Features

  • Added parsing function wikiToHTML(), that can be used for composing emails in HTML format using fields with rich text format, like issue Description. Usage example: Issue #486
FUNCTIONRETURNED VALUE
wikiToHTML(string s) : stringRenders rich text wiki content into HTML.
Example: wikiToHTML("+Hello *world*!+") return "<p><ins>Hello <b>world</b>!</ins></p>".

Bug Fixes

  • Minor UI bugs.


[2017-02-14] Released JIRA Workflow Toolbox 2.2.31

Improvements

Bug Fixes

[2017-02-03] Released JIRA Workflow Toolbox 2.2.30

New Features

  • 10 new parser functions:
FUNCTIONRETURNED VALUE
toString(number list l, number decimals, string separator) : stringReturns a string with a list of decimal representations of the numeric values in l, with the number of characters in the decimal part specified by parameter decimals and separated by string separator.
Example: toString([1.123, 2.452, 3.64612], 2, " : ") returns the following string: "1.12 : 2.45 : 3.65".
toString(string list l, string separator) : stringReturns a string a list of string values in l separated by string separator.
Example: toString(["blue", "red", "green"], "; ") returns "blue; red; green"
toString(issue list l, string separator) : stringReturns a string with a list of issue keys separated by string separator.
Example: toString(subtasks(), " ") returns "CRM-5 CRM-6", being CRM-5 and CRM-6 the keys of current issue's subtasks.
formatDuration(number duration) : stringReturns a string with the pretty representation of a time duration, i.e. a subtraction of 2 date-time values, using the language of current user's profile.
Example: formatDuration(2017-01-31 11:30 - 2017-01-30 00:00) returns "1 day, 11 hours, 30 minutes".
shortFormatDuration(number duration) : stringReturns a string with the most compact representation possible of a time duration, i.e. a subtraction of 2 date-time values, using the language of current user's profile.
Example: shortFormatDuration(2017-01-31 11:30 - 2017-01-30 00:00) returns "1d 11h 30m".
escapeHTML(string s) : stringEscapes the characters in a string s using HTML entities.
Example: escapeHTML("<Français>" returns "&lt;Fran&ccedil;ais&gt;".
unescapeHTML(string s) : stringUnescapes string s containing entity escapes to a string containing the actual Unicode characters corresponding to the escapes.
Example: unescapeHTML("&quot;bread&quot; &amp; &quot;butter&quot;") returns "\"bread\" & \"butter\"".
allCommentCreators() : string listReturns a string list with the user names of comment creators in current issue, in ascension order by commenter's actuation time. A same user appears in the output as many times as comments has created. For anonimous comments an empty string ("") is returned.
allCommentCreators(string issue_keys) : string listReturns a string list with the user names of comment creators in issues with keys in issue_keys, in order of appearance in issue_keys, and in ascension order by commenter's actuation time. A same user appears in the output as many times as comments has created. For anonimous comments an empty string ("") is returned.
allCommentCreators(string list l) : string listReturns a string list with the user names of comment creators of issues in l, in order of appearance in l, and in ascension order by commenter's actuation time. A same user appears in the output as many times as comments has created. For anonimous comments an empty string ("") is returned.

Bug Fixes

[2017-01-27] Released JIRA Workflow Toolbox 2.2.29

New Features

Field nameTypeReturned Value
Sprint ID
Text stringThe internal ID for the sprint of current issue. This value can be used for setting field Sprint in other issues.


  • 4 new parser functions:
FUNCTIONRETURNED VALUE
similarity(string s1, string s2) : numberReturns a numeric value between 0 and 100 representing the percentage of similarity between two strings based on the Jaro Winkler similarity algorithm. 100 represents full equivalence, and 0 represents zero similarity between both string arguments.
Examples:
similarity("JIRA Workflow Toolbox", "jira workflow toolbox") returns 100

similarity("JIRA Workflow Toolbox", "Jira WorflowTolbox") returns 97

similarity("My Gym. Childrens Fitness", "My Gym Children's Fitness Center") returns 92

similarity("D N H Enterprises Inc", "D & H Enterprises, Inc.") returns 91

similarity("ABC Corporation", "ABC Corp'") returns 92

similarity("Hello World!", "Bye bye World!") returns 69

similarity("I caught a lizard", "This is my giraffe") returns 51
userFullName(string list user_names) : string listReturns a string list with the full names of the users in argument user_names. Argument user_names is a string list with user names, not to be confused with users full names.
Example: userFullName(toStringList(%{00133})) returns a list with the users full names of current issue's watchers, where %{00133 is field code for Watchers.
userEmail(string list user_names) : string listReturns a string list with the emails of the users in argument user_names. Argument user_names is a string list with a user names, not to be confused with users full names.
Example: userEmail(toStringList(%{00133})) returns a list with the emails of current issue's watchers, where %{00133 is field code for Watchers.
stringToDate(string s, string date_time_pattern, string language, string country) : numberReturns a numeric value with the date-time represented by string s. Expected format of value at parameter "s" is defined by date_time_pattern string parameter for a specific language (language code ISO 639-2) and country (country code ISO 3166 alpha-2). The numeric value returned corresponds to the milliseconds elapsed since January 1, 1970, 00:00:00 GMT.
Example: stringToDate("Dec 7, 2016 2:10:25 AM PST", "MMM d, yyyy h:mm:ss a z", "eng", "US") returns a date-time numeric value that can be used for setting a Date Time picker custom field.

Improvements

  • Added a mark "(by JWT)" to all the features and configurations provided by JIRA Workflow Toolbox, so that you can easily identify when features of the plugin are being used.

Bug Fixes

[2016-12-15] Released JIRA Workflow Toolbox 2.2.28

New Features

  • New read-only virtual fields:
Field nameTypeReturned ValueNotes
Customer Request Type NameText stringThe name of the Customer Request Type.Field Customer Request Type returns the key, thus this read-only field is introduced in order provide a means to get the name of the Customer Request Type.
Tempo Account KeyText stringThe key of Tempo Timesheets' Account field.Field Account returns the numerical ID, thus this read-only field is introduced in order provide a means to get the Account's Key.
Tempo Account NameText stringThe name of Tempo Timesheets' Account field.Field Account returns the numerical ID, thus this read-only field is introduced in order provide a means to get the Account's Name.

Improvements

  • Issue #460 - Send an email post-function now doesn't throw error when outgoing emails are disabled or not configured, but simply does nothing.
  • Added operators !=, !~ and doesn't match in JQL function for Project Properties.
  • Now field JIRA Software's Spring field can be set by writing the numerical ID of a Spring.

Bug Fixes

  • Issue #452 - Field "Customer Request Type" couldn't be set. Now, it can be set by writing on it the key (not to be confused with the name) of the request type.
  • Since version 2.2.26 SHOW links didn't work in the parser help available in post-function Set a field as a function of other fields.


[2016-12-02] Released JIRA Workflow Toolbox 2.2.27

Improvements

  • Support for Dynamic Forms's custom fields.
  • Improved support for unknown third party custom fields.
  • Some minor UI improvements.

Bug Fixes

[2016-11-25] Released JIRA Workflow Toolbox 2.2.26

New Features

Added 2 new read-only virtual fields:

Field nameTypeValue returned when cast to stringExamples
Current transitionText stringWhen used in a validation or a post-function: the name of the transition being executed. In other cases: a comma separated list with the names of the transitions departing from current status.In a validation: Start Progress

In a condition: Start Progress, Resolve Issue, Close Issue
Target statusText stringWhen used in a validation or a post-function: the name of the target status of the transition being executed. In other cases: a comma separated list with the names of the target status of the transitions departing from current status.In a validation: In Progress

In a condition: In Progress, Resolved, Closed

Improvements

Bug Fixes

  • Issue #445 - Field Account of Tempo Timesheets could not be set. This bug was introduced in version 2.2.18.
  • Virtual field "Last comment" always returned an empty string when used by a condition feature.


[2016-11-15] Released JIRA Workflow Toolbox 2.2.25

New Features

Added 2 function to the parser, mainly intended to be used with new post-function "Create issues and subtasks".

FUNCTIONRETURNED VALUE
getMatchingValue(string key, string list key_list, number list value_list) : numberReturns numeric value in value_list that is in the same position as numeric key is in key_list, or in case key doesn't exist in key_list and value_list has more elements than key_list, the element of value_list in position count(key_list) + 1.
Example: getMatchingValue(5, [1, 3, 5, 7, 9], [1, 1+1, 3*1, 4, 4+1]) returns 3.
getMatchingValue(string key, string list key_list, string list value_list) : stringReturns string value in value_list that is in the same position as numeric key is in key_list, or in case key doesn't exist in key_list and value_list has more elements than key_list, the element of value_list in position count(key_list) + 1.
Example: getMatchingValue(8, [2, 4, 6, 8, 10], ["Washington", "London", "Paris", "Madrid", "Berlin"]) returns "Madrid".

Improvements

Bug Fixes

[2016-11-13] Released JIRA Workflow Toolbox 2.2.24

New Features

  • New "Create issues and subtasks" post-function:

    Allows you to automatically create one or multiple new issues and subtasks when executing a transition in your workflows. You can also set the fields of the new issues based on the values of fields in other issues, and link the new issues to the other issues in your JIRA instance.

Improvements

  • Added help link to documentation of each feature of the plugin.

Bug Fixes

  • Issue #439 - Condition A field is/isn't initialized failed when field was edited in transition screen making the condition become unsatisfied
  • Fixed XSS security bug in some features of the plugin.


[2016-11-02] Released JIRA Workflow Toolbox 2.2.23

Improvements

  • Added information of the expected expression type in syntax check result dialog.

Bug Fixes

  • Post-function "Send an email" doesn't send emails when there are attached files. This bug was introduced in version 2.2.22.

[2016-10-22] Released JIRA Workflow Toolbox 2.2.22

New Features

  • New virtual field "New comment (sends email notifications)", which is similar to "New comment" with the difference that it triggers an event for sending email notifications.

Improvements

  • HIGHLIGHT IMPROVEMENT: Added a "Check Syntax" button in all the features of the plugin. It allows to check the syntax before saving the configuration, accelerating the debug process of your workflow configurations. The following elements can be checked:
  • Issue #426 - JIRA Software's Epic Link field now can be set by writing the name of an epic into this field.
  • Issue #419 - New "Project Email Address" option for selecting the sender of an email in "Send an email" post-function.
  • "Send an email" post-function now admits names of groups and names of project roles in parameter "Users in field" of To and Cc recipients.


[2016-09-26] Released JIRA Workflow Toolbox 2.2.21

Bug Fixes

  • Syntax highlighting stopped working in version 2.2.20 for advanced parsing mode and math/time expressions.


[2016-09-23] Released JIRA Workflow Toolbox 2.2.20

New Features

  • Added new parser functions:
FUNCTIONRETURNED VALUE
rolesUserPlays(string userName) : string listReturns the list of role names of those project roles the user with name userName plays in current project. Parameter userName can also be a comma separated list of user names, group names and project roles names, returning the list of project roles for those users represented by input argument.
rolesUserPlays(string userName, string projectKey) : string listReturns the list of role names of those project roles the user with name userName plays in project with key projectKey. Parameter userName can also be a comma separated list of user names, group names and project roles names, returning the list of project roles for those users represented by input argument.
groupsUserBelongsTo(string userName) : string listReturns the list of group names of those groups the user with name userName belongs to. Parameter userName can also be a comma separated list of user names, group names and project roles names, returning the list of project roles for those users represented by input argument.


  • Added new virtual fields:
Field nameTypeValue returned when cast to stringExamples
Recent attachmentsAttachmentsComma separated list of file names of all files attached to current issue in the last minute (60 seconds).file1.txt, readme.pdf, screenshot.png

NOTE: This is an alternative to Transition's comments, which doesn't work for files attached in a transition triggered from JSD Portal.
Recent attachments with detailsText stringComma separated list of file names with its mime types and sizes in Kbytes, for every file attached to current issue in the last minute (60 seconds).file1.txt (text/plain, 5.14 KB), readme.pdf (application/pdf, 179.8 KB), screenshot.png (image/png, 5.449 KB)

NOTE: This is an alternative to Transition's comments with details, which doesn't work for files attached in a transition triggered from JSD Portal.

Bug Fixes

  • Issue #413 - Function linkedIssues() didn't consider "has Epic" issue links created in transition screens or in create screens.
  • Issue #411 - The plugin didn't work correctly with Internet Explorer. This bug was introduced in version 2.2.11 and is fixed in this version.


[2016-09-08] Released JIRA Workflow Toolbox 2.2.19

Improvements

  • Added 3 optional additional actions to "Send an email" post-function:
    • Add To recipients as watchers of current issue
    • Add Cc recipients as watchers of current issue
    • Save email information into Ephemeral String fields (ES1...ES5), to be used in subsequent post-functions

Bug Fixes

  • HOT FIX: Since version 2.2.16 features based on JQL queries might not work correctly when the number or issues returned by the JQL query is very high.
  • "Send an email" post-function fails when there isn't any recipient for the email. Now, the post-function simply will not send any email.


[2016-08-30] Released JIRA Workflow Toolbox 2.2.18

Improvements

  • Added a new optional parameter for inhibiting validators when an issue is being created by cloning. This parameter is specially useful when validating issue links in "Create Issue" transition, since when an issue is being cloned firstly the clone issue is created, and then issue links are cloned. Any validation on issue links will fail at issue cloning if we don't inhibit them.

Bug Fixes

  • Issue #324 - Transition executions triggered by post-function stop working under certain circumstances: definitively fixed.
  • Parser function isAClone() didn't work with JIRA 7.1 or higher.
  • Validations on issue links on "Create Issue" transition didn't work on JIRA 6.2.x.


[2016-08-23] Released JIRA Workflow Toolbox 2.2.17

Bug Fixes

  • Bug introduced in version 2.2.16 affecting issue reindexation when issues are updated by a JIRA Workflow Toolbox post-function in JIRA 7.1.x


[2016-08-23] Released JIRA Workflow Toolbox 2.2.16

Improvements

  • Function hasChanged(field_code) now supports the following system fields:
    • Summary
    • Description
    • Due date
    • Priority
    • Environment
    • Fixed Versions
    • Affected Versions
    • Components
    • Labels
    • Security Level
    • Resolution
    • Reporter
    • Assignee

      Until now this function worked only with custom fields.

      Function hasChanged(field_code) is used when we set a validation that is incompatible with a condition in a same transition, typically when validating a value entered in the transition screen. When JIRA evaluates the validations in a transition, it also reevaluates the conditions, and if they are not satisfied an Action X is invalid error message is shown and the transition is not executed.

      Example: Let's suppose we have a boolean condition like {00012} = null (i.e., Due date = null) in a transition, so that it's only shown when Due date is empty. This transition also has a transition screen containing field Due date, and a boolean validation {00012} != null, in order to make Due date required in the transition.
      The configuration described above will not work, since both condition and validation are mutually incompatible. We can fix it replacing the boolean condition with {00012} = null OR hasChanged(%{00012}).

      Some real examples: Issue #363 and Issue #260.

Bug Fixes

  • Issue #324 - Transition executions triggered by post-functions stop working requiring plugin reinstall
  • Issue #334 - Post-function failed to progress an issue
  • Issue #388 - JIRA server might hang up when executing features based on JQL queries returning a very big number of issues
  • Send an email post-function doesn't work when using project roles for selecting To and Cc recipients
  • Minor UI problems.
  • A bug fix in the parser allows a vey compact syntax for summing numeric fields when some of them may be uninitialized. These are the 3 ways available for summing 3 numeric fields:
ExpressionReturned ValueNotes
{10000} + {10001} + {10003}Formula for summing 3 numeric custom fields when we are certain that all 3 the fields are initialized. In case any of these fields is not initialized, an error is raised and any of the following 2 expression examples should be used.{10000}, {10001} and {10003} are three numeric custom field.
({10000} = null ? 0 : {10000}) + ({10001} = null ? 0 : {10001}) + ({10003} = null ? 0 : {10003})Formula for summing 3 numeric custom fields when some of them may be uninitialized. When any of this fields is not initialized a zero value is assumed.

{10000}, {10001} and {10003} are three numeric custom field.
sum([{10000}, {10001}, {10003}])A more compact syntax for summing 3 numeric custom fields when some of them may be uninitialized.
Version 2.2.16 or higher is required.
{10000}, {10001} and {10003} are three numeric custom field.




[2016-08-05] Released JIRA Workflow Toolbox 2.2.15

Improvements

  • Issue #269 - Capability for clearing Sprint field using a post-function
  • Issue #360 - Post-function "Send an email" now shows the sender's full name in email's header
  • Added the following warning message to "Send an email" post-function:
    Message: Insert before event firing post-function

Bug Fixes

[2016-07-17] Released JIRA Workflow Toolbox 2.2.14

Improvements

  • Issue #358 - Parser functions unreleasedVersions(), releasedVersions() and archivedVersions() now return versions using the following ordering: by release date in ascending order, and by sequence (i.e., as shown in UI) in ascending order.

Bug Fixes

[2016-06-29] Released JIRA Workflow Toolbox 2.2.13

Bug Fixes

  • Issue 331: Tempo Account fields break after Tempo Timesheets 8.0. This issue was partially fixed in version 2.2.12 (read operation). Now the issue is fully fixed, supporting also write operations.
  • HTML preview fails in Send an email when adding a new post-function. This failure was introduced in version 2.2.12.


[2016-06-20] Released JIRA Workflow Toolbox 2.2.12

New Features

  • Added new parser functions:
FUNCTIONRETURNED VALUE
toInteger(string s, string radix) : numberreturns the numeric value represented by the string s as a signed integer in the radix specified by argument radix.
Example: toInteger("ff", 16) returns 255.
findModify(string s, string regexp, string replacement_expression) : string listReturns a string like s, but where all substrings matching regexp have been replaced with the result of evaluating replacement_expression against each these substrings. Argument text_expression is an expression that returns a string, where ^% represents each of the matching substrings, and ^ represents the order of appearance beginning with 1.
Example: findModify("The cure for boredom is curiosity.", "[aeiou]", modulus(^, 2) = 1 ? toUpperCase(^%) : ^%) returns "ThE curE for bOredOm is cUriOsity.".
getAscii(number code) : stringreturns a string containing the symbol corresponding to a extended ASCII code (0 <= code <= 255).
Example: getAscii(65) returns "A".
isBulkTriggeredTransition() : booleanReturns true only if current transition execution is being triggered by JIRA's bulk operation feature. This function is useful for bypassing validations or post-functions when a transition is being executed by a bulk update operation.
allAvailableItems(%{nnnnn}) : string listReturns a string list with all available options in select or multiselect field with field code %{nnnnn}. Disabled options are included.
Example: availableItems(%{00103}) returns a string list with all security levels available for the project and current user.
allAvailableItems(%{nnnnn}, string option) : string listReturns a string list with the available child options in cascading or multilevel cascading field with ID %{nnnnn}, and for option parent option. In the case of multilevel cascading fields, a comma separated list of options should be entered. Disabled options are included.
  • New virtual field "JIRA base URL" that returns the base URL for current JIRA instance.

Improvements

  • Support for reading custom fields created by "Checklist for JIRA" add-on. These fields cannot yet be updated using JIRA Workflow Toolbox.
  • Issue #330 - Since version 2.2.12, functions availableItems(field_code) and numberOfAvailableItems(field_code) only consider enabled options. Until now this functions returned also disabled options.
  • Dynamic failure messages on validations: now validation's failure message can include field codes that will be replaced with their values in runtime.
  • Ephemeral string fields are now available in Author parameter on "Add a comment" post-function.
  • Several UI improvements.

Bug Fixes

  • Issue #333: SECURITY XSS on 'View transition's configuration' page.
  • Issue 331: Tempo Account fields break after Tempo Timesheets 8.0. This issue has been partially fixed, since Tempo Account fields now can be read with Tempo Timesheets 8.x, but cannot yet be updated.
  • Issue #339: Writing on virtual field "New watchers" can fail in certain circumstances.
  • Issue #338 - Updated Event not being thrown when updating issues different from current one.
  • Function availableItems(%{nnnnn}, option) was failing.
  • Fixed minor javascript bug on validations' failure message.


[2016-05-06] Released JIRA Workflow Toolbox 2.2.11

Improvements

  • Preview feature for when composing email in HTML format in "Send an email" post-function.
  • New option "Notify by email" added to "Add a comment" post-function.
  • Added field code injectors to "Format field value" post-function.
  • Minor UI improvements.

Bug Fixes

  • Group, Multi-Group Picker and Multi-User Picker custom fileds in To and Cc parameters in "Send an email" post-function were not working.
  • Field codes in parameters Leading delimiter, Value format and Trailing delimiter parameters weren't being replaced with their corresponding field values.
  • Fixed certain layout problems in configuration screens.
  • Issue 262 - Integrity problem between statuses and workflow steps due to interaction with a script listener


[2016-04-27] Released JIRA Workflow Toolbox 2.2.10

New Features

  • Added new parser functions:
FUNCTIONRETURNED VALUE
getMatchingValue(string key, string list key_list, string list value_list) : stringReturns value in value_list that is in the same position as key is in key_list, or in case key doesn't exist in key_list and value_list has more elements than key_list, the element of value_list in position count(key_list) + 1.
Example: getMatchingValue("Spain", ["USA", "UK", "France", "Spain", "Germany"], ["Washington", "London", "Paris", "Madrid", "Berlin"]) returns "Madrid".
getMatchingValue(string key, string list key_list, number list value_list) : numberReturns value in value_list that is in the same position as key is in key_list, or in case key doesn't exist in key_list and value_list has more elements than key_list, the element of value_list in position count(key_list) + 1.
Example: getMatchingValue("Three", ["One", "Two", "Three", "Four", "Five"], [1, 1+1, 3*1, 4, 4+1]) returns 3.
availableItems(%{nnnnn}, string option) : string listReturns a string list with the available child options in cascading or multilevel cascading field with ID %{nnnnn}, and for option parent option. In the case of multilevel cascading fields, a comma separated list of options should be entered.

Improvements

  • The parser has been refactorized and its performance has notably improved. This is the piece of software used to interpret boolean expressions, math formulas and parsed text in advanced parsing mode.
  • Improvements in documentation of the parser in the plugin.

Bug Fixes

  • Issue #302 - CRITICAL FIX FOR JIRA 7.x USERS - GenericTransactionException: Commit failed, rollback previously requested by nested transaction.
  • Issue #292 and Issue #288 - Certain syntactic expressions make the parser hang up
  • Issue 299 and Issue #298 - Problems with Multi-Level Cascading fields
  • New Select List controls introduced in version 2.2.5 didn't work correctly in Firefox: controls were always enabled, even when they had to be disabled.
  • Minimization of the usage of API calls affected by JRA-60308
  • Issue 282 - Inhibition of JQL syntax checking in configuration screens
  • Post-function Copy a parsed text to a field doesn't set Cascading Select fields on parent issue directly from subtask's custom field


[2016-03-23] Released JIRA Workflow Toolbox 2.2.9

New Features

  • Post-function: Send an email: a new feature added to the plugin for sending custom emails.

Improvements

  • Added new parameter in most post-functions of the plugin: conditional execution, which allows to execute the post-function only when a certain boolean expression is satisfied.
  • Field "Satisfaction" from JSD now returns a numeric value.
  • Minor improvements in UI.

Bug Fixes

  • Issue #245 - Function allCommenters() was returning each commenter only once, instead of one per comment created or updated.
  • Issue #253 - Bug on parser's error management
  • Issue #274 - Failure when copying attachments
  • Field "Satisfaction Date" wasn't treated as a Date field.
  • Field "Request Participants" was failing when adding a the first participant using '+' prefix.


[2016-02-25] Released JIRA Workflow Toolbox 2.2.8

New Features

  • New functions in the parser:
FUNCTIONRETURNED VALUE
usersInRole(string projectRoleName) : string list\Returns the list of user names (not be confused with full user name) of those active users playing project role with name projectRoleName in current issue's project. Parameter projectRoleName can be a comma separated list of project role names, returning the users that play any of the project roles.
usersInRole(string projectRoleName, string projectKey) : string list\Equivalent to the previous function but with extra argument projectKey for selecting the project argument projectRoleName refers to.
usersInGroup(string groupName) : string list\Returns the list of user names of those active users in group with name groupName. Parameter groupName can be a comma separated list of group names, returning the users that belong to any of the groups.
defaultUserForRole(string projectRoleName) : string\Returns the user name of the default user playing project role with name projectRoleName in current issue's project, or null if no default user is defined for the project role.
defaultUserForRole(string projectRoleName, string projectKey) : string\Equivalent to the previous function but with extra argument projectKey for selecting the project argument projectRoleName refers to.
lastAssigneeInRole(string projectRoleName) : string/\/Returns the user name of the last user who had current issue assigned, and currently plays project role with name projectRoleName in current issue's project, or null if current issue was never assigned to a user currently in the project role.
lastAssigneeInRole(string projectRoleName, string issueKey) : string\Returns the user name of the last user who had issue with key issueKey assigned, and currently plays project role with name projectRoleName in current issue's project, or null if current issue was never assigned to a user currently in the project role.
leastBusyUserInRole(string projectRoleName) : string\Returns the name of the active user playing project role with name projectRoleName in current issue's project, and has the lower number of issues with resolution empty assigned; or null if there isn't any user in the project role. Parameter projectRoleName can be a comma separated list of project role names, returning the least busy users among the project roles.
leastBusyUserInRole(string projectRoleName, string projectKey) : string\Equivalent to the previous function but with extra argument projectKey for selecting the project argument projectRoleName refers to.
textOnNumberList(number list numbers, string text_expression) : string list\Returns a list of strings resulting of evaluating text_expression against each of the numeric values in argument numbers. Argument text_expression is an expression that returns a string, where ^ represents each numeric value in argument numbers.
Example: textOnNumberList([1, 2, 3, 4, 5], substring("smile", 0, ^)) returns string list ["s", "sm", "smi", "smil", "smile"].
mathOnNumberList(number list numbers, number math_time_expression) : number list\Returns a list of numbers resulting of evaluating math_time_expression against each of the numeric values in argument numbers. Argument math_time_expression is a math/time expression, where ^ represents each numeric value in argument numbers.
Example: mathOnNumberList([1, 2, 3, 4, 5], ^ * 2) returns number list [2, 4, 6, 8, 10].
textOnStringList(string list strings, string text_expression) : string list\Returns a list of strings resulting of evaluating text_expression against each of the strings in argument strings. Argument text_expression is an expression that returns a string, where ^% represents each string in argument strings.
Example: textOnStringList(["albert", "riCHard", "MARY"], capitalizeWordsFully(^%)) returns ["Albert", "Richard", "Mary"].
mathOnStringList(string list strings, number math_time_expression) : number list\Returns a list of numbers resulting of evaluating math_time_expression against each of the issues in argument issues. Argument math_time_expression is a math/time expression, where ^% represents each string in argument strings.
Example: mathOnStringList(["a", "ab", "abc", "abcd", "abcde"], length(^%)) returns [1, 2, 3, 4, 5].

Improvements

  • Function previousValue() now can return null with numeric fields for indicating that a field was previously unset.
  • Functions toNumber() and stringToDate() now return null when can't parse the string argument. In previous versions an error was thrown.
  • Functions first() and last() now returns null when used on empty string or number lists. In previous versions an error was thrown.
  • Function nthElement(list, index) now returns null when index argument is greater than the number of elements in list argument.
  • Improvement in parse error reporting in Boolean validator with math, date-time or text-string terms.

Bug Fixes

  • Issue #239 - Reflexive generic transition not working
  • Issue #240 - Bug in addDaysSkippingWeekends() and related functions.
  • Issue #238, Issue #248 - CRITICAL FIX - Transitionning of parent issue, linked issues, subtasks and JQL selected issues could stop working in JIRA 7.x
  • "Set a field as a function of other fields" post-function by default type 1 setting rules only evaluated first line in fields with more than one line, like issue "Description".
  • Issue #243


[2016-02-01] Released JIRA Workflow Toolbox 2.2.7

New Features

  • Added 2 new functions to the parser:
FUNCTIONRETURNED VALUE
usersWhoTransitioned(string origin_status, string destination_status) : string listreturns a string list with the names of the users who transitioned current issue from origin_status to destination_status, order ascending by time. An empty string as argument is interpreted as any status.
Example: last(usersWhoTransitioned("Open", "In Progress")) returns the name of the user who executed transition "Start Progress" more recently.
Detailed example
usersWhoTransitioned(string origin_status, string destination_status, string issue_key) : string listreturns a string list with the names of the users who transitioned current issue from origin_status to destination_status, order ascending by time. An empty string as argument is interpreted as any status.
Example: count(usersWhoTransitioned("Open", "In Progress", %{00041})) returns the number of times transition "Start Progress" has been executed in parent issue.
timesOfTransition(string origin_status, string destination_status) : string listReturns a number list with the times when current issue was transitioned from origin_status to destination_status, order ascending by time. An empty string as argument is interpreted as any status.
Example: last(timesOfTransition("", "Resolved")) returns the most recent time when the issue was resolved.
timesOfTransition(string origin_status, string destination_status, string issue_key) : string listReturns a number list with the times when issue with key issue_key was transitioned from origin_status to destination_status, order ascending by time. An empty string as argument is interpreted as any status.
Example: first(usersWhoTransitioned("Closed", "", %{00041})) returns the first time when parent issue was reopened.
addTimeSkippingWeekends(number t, number timeToBeAdded, time_zone) : numberAdds timeToBeAdded to t with the difference that weekends don't count in the sum, e.g., if t represents a date-time which coincides with a Saturday, adding timeToBeAdded = 2 * {HOUR} will return a date-time for next Monday at 02:00. Use negative values at timeToBeAdded for subtracting time from t.
addTimeSkippingWeekends(number t, number timeToBeAdded, time_zone, number beginning_of_weekend, number end_of_weekend) : numberSame as previous function, but with a custom defined weekend. Arguments beginning_of_weekend and end_of_weekend take values {MONDAY}, {TUESDAY} ... {SUNDAY}. Example of usage for adding 12 hours to Current date and time using Israeli weekend: addTimeSkippingWeekends({00057}, 12 * {HOUR}, LOCAL, {FRIDAY}, {SATURDAY}), being {00057} field code for Current date and time.
addDaysSkippingWeekends(number t, number n, time_zone, number beginning_of_weekend, number end_of_weekend) : numberSame as previous function, but with a custom defined weekend. Arguments beginning_of_weekend and end_of_weekend take values {MONDAY}, {TUESDAY} ... {SUNDAY}. Example of usage for adding 10 workdays to Due date using Israeli weekend: addDaysSkippingWeekends({00012}, 10, LOCAL, {FRIDAY}, {SATURDAY}), being {00012} field code for Due date.
subtractDatesSkippingWeekends(number minuend_date, number subtrahend_date, time_zone, number beginning_of_weekend, number end_of_weekend) : numberSame as previous function, but with a custom defined weekend. Arguments beginning_of_weekend and end_of_weekend take values {MONDAY}, {TUESDAY} ... {SUNDAY}. Example of usage calculating the worktime from Creation to Resolution using Israeli weekend: subtractDatesSkippingWeekends({00112}, {00009}, LOCAL, {FRIDAY}, {SATURDAY}), being {00112} field code for Resolution date and time, and {00009} field code for Creation date and time.
acos(number x) : numberReturns the arc cosine of x; the returned angle is in the range 0.0 through pi.
asin(number x) : numberReturns the arc sine of x; the returned angle is in the range 0.0 through pi.
atan(number x) : numberReturns the arc tangent of x; the returned angle is in the range 0.0 through pi.
cbrt(number x) : numberReturns the cube root of x.
cos(number x) : numberReturns the trigonometric cosine of angle x expressed in radians.
cosh(number x) : numberReturns the hyperbolic cosine of x.
log(number x) : numberReturns the natural logarithm (base e) of x.
log10(number x) : numberReturns the base 10 logarithm of x.
modulus(number dividend, number divisor) : numberReturns dividend - (divisor * floor(dividend / divisor)).
sin(number x) : numberReturns the trigonometric sine of angle x expressed in radians.
sinh(number x) : numberReturns the hyperbolic sine of x.
tan(number x) : numberReturns the trigonometric tangent of angle x expressed in radians.
tanh(number x) : numberReturns the hyperbolic tangent of x.
toDegrees(number x) : numberConverts an angle x measured in radians to an approximately equivalent angle measured in degrees.
toRadians(number x) : numberConverts an angle x measured in degrees to an approximately equivalent angle measured in radians.
filledInTransitionScreen(%{nnnnn}) : booleanReturns true only if selected field has an actual value in current transition's screen.
Example: filledInTransitionScreen**(%{00003}) returns true only if the field Assignee was present in the transition screen and contained a value at the moment of submitting the form.

Improvements

  • Minor UI improvements.

Bug Fixes

  • Virtual field New labels failed when it was written with a string containing blank space separated labels. It tried to create a single label containing spaces, which is forbidden in JIRA.
  • Virtual field Date and time of resolution was not returning a value under certain circumstances.
  • Issue #231 - Error in description of function indexOf()


[2016-15-01] Released JIRA Workflow Toolbox 2.2.6

Bug Fixes

  • Fixed UI bugs introduced by version 2.2.5.


[2016-13-01] Released JIRA Workflow Toolbox 2.2.5

Improvements

  • UI improvement: Added search box to dropdown lists. This is particularly useful in field selector dropdown lists.
  • UI improvement: User's selectors now have auto-search feature.

Bug Fixes

[2016-13-01] INFORMATION NOTE ON VERSION 2.2.4

Version 2.2.4 was mistakenly released with a bug that affected features with parameter "Run As". The problem was detected immediately after the release, and for that reason the version rendered unavailable. The bug was fixed readily in version 2.2.5.


[2015-12-22] Released JIRA Workflow Toolbox 2.2.3

Bug Fixes

[2015-12-14] Released JIRA Workflow Toolbox 2.2.2

New Features

  • Added 2 new functions to the parser:
FUNCTIONRETURNED VALUE
textOnIssueList(issue list issues, string text_expression) : string listReturns a list of strings resulting of evaluating text_expression against each of the issues in argument issues. Argument text_expression is an expression that returns a string, where references to field values of issues in argument issues are done with prefix ^ before field code, e.g., ^%{00000} is field code for Summary in each of the issues in argument issues.
Example: textOnIssueList(subtasks(), ^%{00003} = ^%{00006} ? ^%{00015} : null) returns the list of subtasks with same user as reporter and as assignee.
mathOnIssueList(issue list issues, number math_time_expression) : number listReturns a list of numbers resulting of evaluating math_time_expression against each of the issues in argument issues. Argument math_time_expression is a math/time expression, where references to field values of issues in argument issues are done with prefix ^ before field code, e.g., ^{00012} is field code for Due date in each of the issues in argument issues.
Example: mathOnIssueList(linkedIssues("is blocked by"), (^{00012} != null ? ^{00012} - ^{00009} : 0) / {HOUR}) returns a list of numbers with the number of days from issue creation to due date for all issues linked using "is blocked by" issue link type.

Improvements

  • Improved usage of null by the parser. Now text-string and math-time expressions can return null. It can be used for unsetting fields, or as a value that will not be added to a string or number list.
  • Numerous UI improvements: added field code injectors to all the features, text areas were replaced with advanced editor, revised texts in UI, translations in validations messages are shown by default when they exist, etc.
  • "Copy cascading select field" post-function now supports MultiLevel Cascading Select and JIRA Database Values Plugin custom fields.
  • Support for reading custom fields provided by Kepler Custom Fields Pro plugin.
  • All the javascript code has been refactorized for maintainability.

Bug Fixes

  • "Copy cascading select field" post-function couldn't set "Select List" or "Radio Button" custom fields.
  • Virtual field "Attachments" threw exception when used in a validator in "Create Issue" transition.
  • Function "previousValue()" returned the value before previous one when the field was edited in transition screen.
  • Issue #205 - Bug on "numberOfRemoteIssueLinks()" function.
  • "Parse field for extracting data" didn't support delimiter definitions and format definitions longer that 255 characters.
  • "Create issue link" post-function doesn't show an image correctly with JIRA 7.x.


[2015-10-28] Released JIRA Workflow Toolbox 2.2.1

New Features

  • Added new parser functions:
FUNCTIONRETURNED VALUE
siblingSubtasks() : issue listReturns the list of sibling subtasks of current issue, i.e., all subtasks with the same parent as current issue, except current issue. In case current issue is not a subtask, an empty issue list will be returned. Note that siblingSubtasks() is equivalent to subtasks(%{00041}) EXCEPT issueKeysToIssueList(%{00015}), where %{00041} is Parent's issue key and %{00015} is Issue key.
siblingSubtasks(issue list issues) : issue listReturns the list of sibling subtasks of issues in argument issues, provided they are subtasks. Duplicated issues in argument issues are discarded.
siblingSubtasks(string issue_keys) : issue listReturns the list of sibling subtasks of issues whose keys are in issue_keys, provided they are subtasks. Argument issue_keys is a comma separated list of issue keys. Duplicated issue keys in argument issue_keys are discarded.

Improvements

  • A text box has been included in "Add a comment" post-function, this way the body of the comment can be directly input in the post-function, instead of using a previous post-function for writing it into an ephemeral string field.
  • Issue #176: Added cursor position information in expression's editor, in order to find parsing errors more easily.
  • Added two new configuration parameters to "Parse field for extracting data" post-function:
    • Include the leading delimiter in the output
    • Include the trailing delimiter in the output

Bug Fixes

  • Issue #178: Parent issue not being reindexed after being updated after having written a "Parent's..." virtual field.
  • "Set a field as a function of other fields" didn't manage correctly some errors when extremely bad formed setting rules were entered.
  • Issue #176: Expresion's editor was inserting a third double quote (") character after having entered string "".
  • "Validation on linked issues" and parser's functions related to issue links (linkedIssues(), transitionLinkedIssues() and transitivelyLinkedIssues()) were not detecting "Epic-Story" special issue link created or updated in transition screen or during issue creation.
  • Javascript bug on "Add a comment" post-function in relation to selection of visibility restriction.


[2015-10-28] Released JIRA Workflow Toolbox 2.1.37

This version is released for fixing a quite important bug for users that are still using JIRA with versions 5.0 to 6.2.2.

Bug Fixes

  • Issue #178: Parent issue not being reindexed after being updated after having written a "Parent's..." virtual field.


[2015-10-07] Released JIRA Workflow Toolbox 2.2

New Features

  • Added new parser functions:
FUNCTIONRETURNED VALUE
projectProperty(string property_name, string project_key) : stringReturns a string with the value of project property with name property_name in project with key project_key. Shows an error message if project property doesn't exist.
Example: projectProperty("maxNumberOfReopenings", "CRM") returns "3", provided there is a string {maxNumberOfReopenings=3} in the description of project with key "CRM".
projectPropertyExists(string property_name) : booleanReturns true only if there is a project property with name property_name in current issue's project, i.e., if project's description contains a string like {property_name=value}.
Example: projectPropertyExists("maxNumberOfReopenings") returns true only if there is a string like {maxNumberOfReopenings=x} in the description of current issue's project.
projectPropertyExists(string property_name, string project_key) : booleanReturns true only if there is a project property with name property_name in project with key project_key.
Example: projectPropertyExists("maxNumberOfReopenings", "CRM") returns true only if there is a string like {maxNumberOfReopenings=x} in the description of project with key "CRM".

Improvements

  • Compatibility with JIRA 7. The plugin now is compatible with versions of JIRA from 6.2.3 to JIRA 7.0.
  • Issue #175: Post-function "Add a comment" now supports Jira Service Desk comment visibility modes: internal and public.
  • Virtual fields "New comment" and "Last comment" now provides an optional parameter for setting comment visibility. To do it add ": {visibility=visibility_value}" at the end of the text written in these virtual fields. visibility_value is the name of a group, name of a project role, or values "internal" or "public" (without double quotes) for Jira Service Desk comments.
  • Virtual field "Last comment's visibility restriction" now supports Jira Service Desk (JSD) comments. Values admitted for setting JSD comments are public or jsd_public and internal or jsd_internal.
  • Support for Jira Suite Utilities's "Location Select List" custom fields.

Bug Fixes

  • Parameter "Evaluate all the setting rules" in post-function "Set a field as a function of other fields" should be enabled/disabled automatically depending on the type of target field.
  • Virtual field "Last comment's visibility restriction" wasn't working properly with some versions of JIRA.


[2015-09-10] Released JIRA Workflow Toolbox 2.1.36

IMPORTANT: 2.1.36 is intended to be the last version supporting JIRA 5.x

Bug fixes

[2015-09-08] Released JIRA Workflow Toolbox 2.1.35

Improvements

  • Performance improvements in virtual fields "Issue status (delayed writing)" and "Execute transition (delayed execution)".

Bug fixes

  • HOT FIX: Issues #162, #169, #170: Virtual fields "Issue status (delayed writing)" and "Execute transition (delayed execution)". This problem was introduced in version 2.1.33 and also is present in version 2.1.34.

It's HIGHLY RECOMMENDED TO UPDATE from versions 2.1.33 and 2.1.34 to version 2.1.35.


[2015-08-14] Released JIRA Workflow Toolbox 2.1.34

New Features

  • Added new function to the add-on's parser:
FUNCTIONRETURNED VALUE
userProperty(string propertyName, string userName) : stringReturns the value of the user property with name propertyName which belongs to user with user name userName. If the user doesn't have the property, null will be returned.
userProperty(string propertyName, string list userNames) : string listReturns the list of values of the user property with name propertyName in all the users whose names are contained in userNames. The output will contain as many strings as users have the property set.
capitalizeWords(string s) : stringCapitalizes all the whitespace separated words in string s.
capitalizeWordsFully(string s) : stringConverts all the whitespace separated words in string s into capitalized words, that is each word is made up of a titlecase character and then a series of lowercase characters.
allComments(string issue_keys) : string listReturns a string list with all the comments in issues with keys in issue_keys, in order of appearance in issue_keys, and by creation date in ascension order. Argument issue_keys is a comma separated list of issue keys. Example: allComments(%{00041}) returns parent issue's comments, where %{00041} is field code for parent issue's keys.
allCommenters(string issue_keys) : string listReturns a string list with the user names of comment authors and updaters of issues with keys in issue_keys. Argument issue_keys is a comma separated list of issue keys. Example: allComments(%{00041}) returns a string list with the user names of comment authors of parent issue, where %{00041} is field code for parent issue's keys.

Improvements

Bug fixes

[2015-07-23] Released JIRA Workflow Toolbox 2.1.33

New Features

  • New "Parse field for extracting data" post-function: allows extracting pieces of information from the content of a field using delimiter marks, or specifying a certain format for the value to be extracted.
  • New virtual fields: "Last commenter" and "Parent's last commenter" for retrieving the user who entered the last comment in current issue or parent issue.
  • Added new function to the plugin's parser:
FUNCTIONRETURNED VALUE
issuesFromJQL(string jql_query) : issue listReturns the list of issues resulting of the execution of a JQL query represented by string argument jql_query. Visibility permissions applied are those of current user. We advice to use this function for performance reasons when the number of issues to be retrieved or filtered is very high (all issues in a project or various projects). Typically you will want to use this function for replacing any current expression using getIssuesFromProjects() function.
issuesFromJQL(string jql_query, string user_name) : issue listReturns the list of issues resulting of the execution of a JQL query represented by string argument jql_query. Visibility permissions applied are those of user in argument user_name. We advice to use this function for performance reasons when the number of issues to be retrieved or filtered is very high (all issues in a project or various projects). Typically you will want to use this function for replacing any current expression using getIssuesFromProjects() function.
filterByStatusCategory(issue list issues, string status_categories) : issue listFilters issue list in argument issues, leaving only those ones in statuses with categories in status_categories. Argument status_categories is a comma separated list of status category names. Example: filterByStatusCategory(linkedIssues("is blocked by"), "New, In Progress") returns the list of blocking issues in statuses with categories New or In Progress.
filterByProjectCategory(issue list issues, string project_categories) : issue listFilters issue list in argument issues, leaving only those ones in projects with category in project_categories. Argument project_categories is a comma separated list of project category names. Example: filterByProjectCategory(linkedIssues(), "Development, Production") returns the list of linked issues belonging to projects in categories keys Development or Production.
allComments() : string listReturns a string list with all the comments in current issue in ascension order by creation date.
allComments(issue list l) : string listReturns a string list with all the comments in issues in l, ordered by aparition order in l and by creation date in ascension order. Example: allComments(issueKeysToIssueList(%{00041})) returns parent issue's comments, where %{00041} is field code for parent issue's keys.
allCommenters() : string listReturns a string list with the user names of comment authors and updaters in current issue.
allCommenters(issue list l) : string listReturns a string list with the user names of comment authors and updaters of issues in l. Example: allCommenters(issueKeysToIssueList(%{00041})) returns a list with all the commenters and comment updaters for parent issue, where %{00041} is field code for parent issue's keys.
dateTimeToString(number t, string date_time_pattern, language) : stringReturns a string representing the date-time value at t with a certain custom format defined by date_time_pattern string parameter, using a certain language when using words for months, days of the week, etc. This function is useful in post-function "Copy a parsed text to a field" to represent as a string the result of a time expression.
Example: dateTimeToString(2011-03-25 11:30, "yyyy.MM.dd 'at' HH:mm:ss", USER_LANG) returns string "2011.03.25 at 11:30:00".
stringToDate(string s, string date_time_pattern) : numberreturns a numeric value with the date-time represented by string s. Expected format of value at parameter "s" is defined by date_time_pattern string parameter. The numeric value returned corresponds to the milliseconds elapsed since January 1, 1970, 00:00:00 GMT.
Example: stringToDate("2011.03.25 at 11:30:00", "yyyy.MM.dd 'at' HH:mm:ss") returns a date-time numeric value that can be used for setting a Date Time picker custom field.

Improvements

Bug fixes

  • Issue #139: Inactive user is able to post comments
  • Issue #150: Error in "Transition's attachments" virtual field introduced in version 2.1.31.
  • Transition execution on foreign issues by means of writing into fields "Issues status", "Issue status (delayed writing)", "Execute transition" and "Execute transition (delayed execution)" sometimes are done out of order and fail when a high number of transitions are committed to the same issue in a very short period of time (as bursts).
  • Fixed minor bugs in the following parser functions: replaceFirst(), replaceAll(), matches(), findAndReplace(), getCertainVersion(), findByRegexp().
  • Issue #145 and #152: Parameter "Run as", introduced in version 2.1.32, was causing very long configuration screen load times for features where it was introduced. This problem only appeared in instances of JIRA with a very high number of users.
  • Parameter "Run as" didn't work in "Clone issue links".


[2015-06-17] Released JIRA Workflow Toolbox 2.1.32

New Features

  • Functions for version management have been added to the parser:
FUNCTIONRETURNED VALUE
unreleasedVersions() : string listReturns a string list with unreleased version names of current issue's project. Returned versions may be archived.
unreleasedVersions(string projects) : string listReturns a string list with unreleased version names of projects in argument projects. Returned versions may be archived. Arguments projects is a comma separated list of project keys or project names.
releasedVersions() : string listReturns a string list with released version names of current issue's project. Returned versions may be archived.
releasedVersions(string projects) : string listReturns a string list with released version names of projects in argument projects. Returned versions may be archived. Arguments projects is a comma separated list of project keys or project names.
archivedVersions() : string listReturns a string list with released version names of current issue's project. Returned versions may be archived.
archivedVersions(string projects) : string listReturns a string list with released version names of projects in argument projects. Returned versions may either released or unreleased. Arguments projects is a comma separated list of project keys or project names.
latestReleasedVersion() : string listReturns string with the name of the latest released version in current issue's project.
latestReleasedVersion(string projects) : string listReturns string with the name of the latest released version among projects in argument projects. Returned versions may either released or unreleased. Arguments projects is a comma separated list of project keys or project names.
earliestUnreleasedVersion() : string listReturns string with the name of the earliest unreleased version in current issue's project.
earliestUnreleasedVersion(string projects) : string listReturns string with the name of the earliest unreleased version among projects in argument projects. Returned versions may either released or unreleased. Arguments projects is a comma separated list of project keys or project names.
count(number n, number list l) : numberReturns the number of times n appears in l.
Example: count(1, [1, 1, 2, 2, 1, 0]) returns 3.
count(string s, string list l) : numberReturns the number of times s appears in l.
Example: count("blue", ["blue", "blue", "red", "red", "blue", "green"]) returns 3.


Some usage examples

  • Functions for extracting text fragments and finding and replacing literal substrings have been added to the parser:
FUNCTIONRETURNED VALUE
findPattern(string s, string regexp) : string listReturns a string list with all substrings in argument s matching regular expression in string argument regexp.
findPatternIgnoreCase(string s, string regexp) : string listReturns a string list with all substrings in argument s matching regular expression in string argument regexp. Evaluation of the regular expression is carried out in ignoring case mode.
findReplaceAll(string s, string find, string replacement) : string listReturns a string with content of argument s where every ocurrence of substring find has been replaced with string replacement.
findReplaceAllIgnoreCase(string s, string find, string replacement) : string listReturns a string with content of argument s where every ocurrence of substring find, ignoring the case, has been replaced with string replacement.
findReplaceFirst(string s, string find, string replacement) : string listReturns a string with content of argument s where first ocurrence of substring find has been replaced with string replacement.
findReplaceFirstIgnoreCase(string s, string find, string replacement) : string listReturns a string with content of argument s where first ocurrence of substring find, ignoring the case, has been replaced with string replacement.


  • Functions for getting user names from user's emails or full names has been added to the parser:
FUNCTIONRETURNED VALUE
fullNameToUser(string fullName) : stringReturns a string with the name of a user whose full name is equal to argument fullName. Returned value is a string with a user name.
usersWithEmail(string email) : string listReturns a string list with the user names of those users with emails equal to argument email. In case that only one user is expected, function first(string list) can be used to extract a string with its user name.

Improvements

  • Added a new configuration parameter called "Run as" for selecting the user which will run a feature of the plugin. This parameter has been added to the following features:
    • Condition based on JQL query
    • Validation based on JQL query
    • Copy a parsed text to a field
    • Mathematical and date-time expression calculator
    • Set a field as a function of other fields
    • Create issue link
    • Break issue link
    • Write field on linked issues or subtasks
    • Read fields from linked issues or subtasks
    • Write field on issues returned by JQL query
    • Read field from issues returned by JQL query
    • Clone issue links
  • Added new configuration parameter called "Don't overwrite target field if it's already set" to the following features:
    • Copy a parsed text to a field
    • Mathematical and date-time expression calculator
    • Set a field as a function of other fields
    • Write field on linked issues or subtasks
    • Write field on issues returned by JQL query
  • Optional prefixes has been added to "Set a field as a function of other fields" post-function. These optional prefixes are single characters that can preceed setting rules for changing someway its behavior:
    • a : makes value part in setting rules to be parsed in advanced parsing mode.
    • i : in type 1 setting rules, makes regular expression to be evaluated in ignore case mode.
    • l : in type 1 setting rules, makes regular expression to be treated as a literal string.
  • Conditional operator ? : now also supports usage with boolean arguments.
  • UI improvement thanks to the replacement of basic textarea editor with new advanced editor. Improved features are:
    • Log Work post-function.
    • Create issue link
    • Break issue link
    • Condition based on JQL query
    • Validator based on JQL query

Bug fixes

  • Javascript error introduced in version 2.1.31 on "Set a field as a function of other fields" post-function, that makes automatic enabling/disabling of checkbox "Full evaluation" depending on selected "Target field stopped working.
  • Minor javascript bug in "Condition based on JQL query" and "Validation based on JQL query".
  • Parse function toStringList() doesn't behave correctly with multi-valued fields containing options with comma characters.
  • Setting multi-valued fields were options have comma characters were not possible. Now comma can be escaped with '\' character.
  • Uncaught exception in "Condition/Validation on linked issues", "Condition/Validation on subtasks", "Condition/Validation on a list of issue keys", "Read/Write field on linked issues or subtasks" was configured with a bad formed expressions and when uninitialized fields are encountered in parameter "Filtering by field values".


[2015-05-08] Released JIRA Workflow Toolbox 2.1.31

New Features

  • New post-function "Clone issue links": it imports issue links from cloned issue. When added to "Create Issue" transition, this post-function ensures that issue links will always be cloned, even if the user forgets to check "Clone Links" checkbox.

  • New very powerfull filtering functions have been added to the parser:
FUNCTIONRETURNED VALUE
filterByPredicate(issue list l, boolean expression predicate) : issue listReturns a list with issues in l that validate predicate. Argument predicate is a boolean expression, where references to field values in l are done using prefix ^ for field codes.
Examples of field references: ^%{00000} is field code for Summary, and ^{00068} is field code for Original estimate of issues in argument l.
Examples of usage:
filterByPredicate(subtasks(), ^%{00094} in %{00094}) returns the list of subtasks with selected Components in current issue's selected components.
filterByPredicate(linkedIssues("blocks"), %{00028} = null AND ^{00017} < {00017}) returns the list of unresolved blocked issues with priority higher than current issue's priority.
filterByPredicate(number list l, boolean expression predicate) : number listReturns a list with numbers in l that validate predicate. Argument predicate is a boolean expression, where ^ is used for referencing numeric values in argument l.
Examples:
filterByPredicate([1, 2, 3, 4], ^ > 2) returns values greater than 2, i.e., [3, 4]
filterByPredicate([1, 2, 3, 4], remainder(^, 2) = 0) returns even values, i.e., [2, 4]
filterByPredicate(string list l, boolean expression predicate) : string listReturns a list with strings in l that validate predicate. Argument predicate is a boolean expression, where ^% is used for referencing string values in argument l.
Examples:
filterByPredicate(["book", "rose", "sword"], length(^%) > 4) returns ["sword"].
filterByPredicate(["book", "rose", "sword"], ^% in %{00000} OR ^% in %{00001}) returns a list with those strings in first argument that also appear in issue Summary or Description.

Improvements

  • Added support for filtering by field values to the following features:
    • Condition on linked issues
    • Condition on subtasks
    • Condition on a list of issue keys
    • Validation on linked issues
    • Validation on subtasks
    • Validation on a list of issue keys
    • Write field on linked issues or subtasks
    • Read fields from linked issues or subtasks

  • Configuration screens revised for improved understandability in the following features:
    • Condition on linked issues
    • Condition on subtasks
    • Condition on a list of issue keys
    • Validation on linked issues
    • Validation on subtasks
    • Validation on a list of issue keys

  • Added support for groups to "Add or remove watchers" post-function.
  • Support "Sprint" the JIRA Agile's custom field.

Bug fixes

  • Virtual field "Transition's attachments" and "Transition's attachments with details" were failing in certain circumstances since JIRA 6.4.
  • Parser function "filterByNumericFieldValue()" failed when there are some issue to be filtered with non-initialized fields.
  • Parser function "transitivelyLinkedIssues()" didn't include in its output issues directly linked to current issue, as it was supposed.
  • Minor UI failures.


[2015-03-29] Released JIRA Workflow Toolbox 2.1.30

New Features

  • New post-function "Inhibit ephemeral fields auto-clearance": By default, ephemeral fields are automatically deleted at the end of the transition. This post-functions makes ephemeral field auto-clearance be skipped for current transition, this way leaving current ephemeral field's values at disposal of the next transition.

Bug fixes

  • Issue #110: Integrity problems caused by triggering a series of delayed transition executions
  • Issue #102: prefixes '+' and '-' didn't work when used on parent issue's fields.
  • Improved management of JQL queries: expressions like IN (%{nnnnn}) showed an error when field %{nnnnn} was not initialized. Now this situation is correctly managed and no error is produced.
  • Issue #108 - Delayed transition execution didn't work on parent issue when used in "Create Issue" transition
  • New expression editor introduced in version 2.1.29 contains a minor javascript error with Google Chrome.
  • Copy a parsed text to a field's automatic parsing mode converter didn't manage correctly field codes longer than 5 digits.
  • Ephemeral fields were auto-cleared before end of transition under certain circumstances.


[2015-03-18] Released JIRA Workflow Toolbox 2.1.29

New Features

  • New parser functions:
    • hasChanged(%{nnnnn}) : boolean , returns true only if field has changed in current transition.
    • hasChanged({nnnnn}) : boolean , returns true only if numeric or date-time field field has changed in current transition.
    • hasChanged({nnnnn.i}) : boolean , returns true only if cascading select field has changed for level i (with root level = 0) in current transition.
    • sublist(string list l, number indexFrom, number indexTo) : string list , returns a string list with elements in l from indexFrom index to indexTo index. Having indexFrom >= 1 and indexFrom <= count(l) and indexTo >= 1 and indexTo <= count(l) and indexFrom <= indexTo.
    • sublist(number list l, number indexFrom, number indexTo) : number list , returns a number list with elements in l from indexFrom index to indexTo index. Having indexFrom >= 1 and indexFrom <= count(l) and indexTo >= 1 and indexTo <= count(l) and indexFrom <= indexTo.
    • sublist(issue list l, number indexFrom, number indexTo) : issue list , returns an issue list with elements in l from indexFrom index to indexTo index. Having indexFrom >= 1 and indexFrom <= count(l) and indexTo >= 1 and indexTo <= count(l) and indexFrom <= indexTo.
    • indexOf(string element, string list l) : number , returns the index of string element in string list l. Zero is returned when element is not found in l.
    • indexOf(number element, string list l) : number , returns the index of numeric value element in string list l. Zero is returned when element is not found in l.
    • indexOf(issue element, issue list l) : number , returns the index of issue element in issue list l. Zero is returned when element is not found in l.

Improvements

  • "A custom field is/isn't initialized" validator has been renamed to "A custom field is/isn't initialized or has/hasn't been modified", and now provides the capability for validating whether a custom field has been updated in transition screen.


[2015-02-25] Released JIRA Workflow Toolbox 2.1.28

HOTFIX:

Version 2.1.27 introduced a bug affecting creation of new configurations or edition of existing configurations for "Read fields from linked issues or subtasks" and "Write field on linked issues or subtasks" post-functions. The problem didn't affect to normal behaviour of currently configured post-functions.

Bug description: parameter "Target field" couldn't be set, always taking the value of "Source field", i.e., both parameters showed the same value. Post-functions configured by versions of the plugin previous to 2.1.27 kept the correct value for parameter "Target field", and worked flawlessly. The problem only appeared when trying to edit the configuration of the post-function.

Version 2.1.28 fixes this bug, not adding new features or modification respect to version 2.1.27.


[2015-02-21] Released JIRA Workflow Toolbox 2.1.27

New Features

  • New parser functions:
    • nthElement(number list l, number n) : number , returns element at position n in number list l, where n >= 1 and n <= count(l).
    • nthElement(string list l, number n) : string , returns element at position n in string list l, where n >= 1 and n <= count(l).
    • nthElement(issue list l, number n) : issue list , returns an issue list with the element at position n in issue list l, where n >= 1 and n <= count(l).
    • sort(number list l, order) : number list , returns a number list with elements in l sorted in specified order. Available orders are ASC (for ascending order) and DESC (for descending order).
    • sort(string list l, order) : string list, returns a string list with elements in l lexicographically ordered. Available orders are ASC (for ascending order) and DESC (for descending order).
    • sort(issue list l, field field, order) : issue list , returns an issue list with elements in l* ordered according to values of field. Argument field has format {nnnnn} for numeric and date-time fields, %{nnnnn} for string fields, or %{nnnnn.i} for cascading select fields. Available orders are ASC (for ascending order) and DESC (for descending order).
    • isAClone() : boolean , returns true only if current issue is a clone of another issue. An issue is a clone of another issue if it's being created by JIRA "Clone" operation, or has issue links of type "clones". This function if useful for bypassing validations in transition Create Issue when the issue is being created by a clonation operation.
    • isJwtTriggeredTransition() : boolean , returns true only if current transition execution is being triggered by a JIRA Workflow Toolbox post-function. This function is useful for bypassing validations when transition is being non-interactively executed.
  • New virtual field "Workflow scheme". Is a text-string field that contains the name of the workflow scheme of the project current issue belongs to.

Improvements

  • Post-function "Create issue link" has been substantially improved, in order to make it possible to create issue links between any pair of issues in the JIRA instance.
  • Added support for Group, Multi-Group and Multi-User fields in conditions "Only users in a field" and "Except users in a field".
  • Configuration option "Evaluate all the setting rules" has been made available for field "Labels" in "Set field as a function of other fields" post-function.

Bug fixes

  • Issue #93 - "Only user in custom field" condition didn't work correctly when user was renamed.
  • Uncaught "Null Pointer" exception when stringToDate() parser function received as argument a bad formed date string.
  • Field code injectors in "Break issue link" post-function didn't contain number and date fields.
  • Uncaught exception when reading virtual fields "Reporter's full name" and "Reporter's email" when issue was anonymously reported.
  • Minor UI bug and text revision in "Break issue link" post-function configuration screen.


[2015-02-06] Released JIRA Workflow Toolbox 2.1.26

New Features

  • Support for custom field "Epic Status", provided by JIRA Agile. It can be updated by all post-functions provided by JIRA Workflow Toolbox.
  • Support for custom field "Request Participants", provided by the most recent version of Service Desk. It can be updated by all post-functions provided by JIRA Workflow Toolbox. A very interesting usage example.
  • New parser functions:
    • stringToDate(string s, *timezone* t) , which returns a numeric value with the date-time represented by a string. It's very useful for working with dates stored in text fields and in project properties. A very interesting usage example.
    • userFullName(string username) , which returns a string with the full name of the user whose name is stored in user. A usage example.
    • userEmail(string username), which returns a string with the email of the user whose name is stored in user.
    • first(list l) : element , which receives a list of string, number or issue and returns the first element of the list.
    • last(list l) : element , which receives a list of string, number or issue and returns the last element of the list.

Improvements

  • Post-function "Break issue link" has been greatly improved: now issue links where current issue doesn't take part can also be broken. JQL queries and/or comma separated lists of issue keys can be used for setting issues at both ends of the issue links.
  • Issue #100 - Post-function "Add a new option to a Cascading Select" has been added support not only for inserting child options, but also root options. Added support not only for custom fields, but for virtual fields (among them Ephemeral fields). Included a parameter for defining the behavior when new option already exists (4 different behaviors). Included a parameter for alphabetically sorting field options if desired.
  • Post-function "Add a new option to a select list" has been renamed to "Add a new option to a Select List, Radio Button, Multi-Select List or Checkbox". Added support for adding fields to Multi-Select Lists and Checkboxes custom field. Added support not only for custom fields, but for virtual fields (among them Ephemeral fields). Included a parameter for defining the behavior when new option already exists (4 different behaviors). Included a parameter for alphabetically sorting field options if desired.
  • Condition "Cascading select comparer" now supports not only Cascading Select, but also Multi-Level Cascading (only 2 levels, but you always can use "Boolean condition with math, date-time or text-string terms" if need to compare deeper levels), and JIRA Database Values custom fields.
  • Condition "Only user in custom field" has been renamed to "Only user in a field", since it has been added support to work not only with custom fields, but with virtual fields (among them Ephemeral fields).
  • Condition "Except user in custom field" has been renamed to "Except user in a field", since it has been added support to work not only with custom fields, but with virtual fields (among them Ephemeral fields).

Bug fixes

  • Post-functions "Read fields from linked issues or subtasks" and "Write field on linked issues or subtasks" didn't work with issues linked in current transition.
  • Parser function toNumber(string s) was not working correctly.
  • Exception thrown when reading virtual field "Last comment's visibility restriction" under certain circumstances.


[2015-01-07] Released JIRA Workflow Toolbox 2.1.25

New Features

  • New virtual fields "Transition attachments" and "Transition attachments with details": can be used to validate files attached in transition screens (file name, mime type and file size.)

Improvements

  • Added mime type information to virtual field "Attachments with details"
  • Virtual fields "Attachments", "Attachments with details" and "Number of attachments" now also show attachments added in transition screen.

Bug fixes

  • Issue #95: Support for Unicode in string literals
  • Issue #96: Using %{nnnnn.i} doesn't show values entered in current transition screen.
  • Bug in "Validation based on regular expression" affecting to field "Last comment" and "Last comment with details".
  • Virtual field "Number of transition attachments" not working in post-functions.
  • Virtual field "Last comment visibility restriction" not showing visibility restrictions of comment entered in current transition screen.


[2014-12-22] Released JIRA Workflow Toolbox 2.1.24

Improvements

  • Support for including validator's custom message translations for all languages installed in JIRA. (Issue #37)
  • UI improvement: All checkboxes and radio button tags have become clickable. (Issue #64)
  • Minor improvements in new option "Evaluate all the setting rules" added to post-function "Set field as a function of other fields": now it can be used also with "Ephemeral numbers" and "Ephemeral strings" as target field.

Bug fixes

  • Labels custom fields rendering was failing. (Issue #94)
  • Writing into a cascading select custom field wasn't working when options used were restricted by issue type.
  • Minor bug in IU related to project options in "Condition on linked issues" and "Validation on linked issues".


[2014-12-11] Released JIRA Workflow Toolbox 2.1.23

New Features

  • New condition "Transition is triggered by JIRA Workflow Toolbox post-function". This condition is intended to hide transitions that are thought to be triggered exclusively by post-functions, i.e. by writing into fields "Issue status", "Issue status (delayed writing)", "Transition issue" and "Transition issue (delayed transitions)".
  • New conditional operator ? : (similar to the one in C and JAVA). This operator maybe very useful for composing conditional texts.
  • New functions to access the historic values of fields:
FUNCTIONRETURNED VALUE
previousValue(%{nnnnn}) : stringReturns a string with the previous value of a field for current issue. It will return null if field was previously uninitialized.
previousValue({nnnnn}) : numberReturns a number with the previous value of a numeric or date field for current issue. It will return null if field was previously uninitialized.
previousValue(%{nnnnn.i}) : stringReturns a string with the previous value of a cascading or multi-cascading select field for current issue at level i (with root level = 0). It will return null if field was previously uninitialized.
fieldHistory(%{nnnnn}) : string listReturns a list of strings with all the values that a field ever had in the past for current issue. Uninitialized field statuses are represented by empty strings.
fieldHistory({nnnnn}) : number listReturns a list of numbers with all the values that a numeric or date field ever had in the past for current issue. Uninitialized field statuses are not represented.
fieldHistory(%{nnnnn.i}) : string listReturns a list of strings with all the values that a cascading or multi-cascading select field ever had in the past for level i (with root level = 0) in current issue. Uninitialized field statuses are represented by empty strings.

Supported fields are: Summary, Description, Assignee, Reporter, Due date, Issue status, Priority, Resolution, Environment, Fixed versions, Affected versions, Labels, Components, Security level and all the custom fields.

Improvements

  • Issue #91 - Raised log level for certain messages, in order to reduce verbosity of the plugin in the server's log file.
  • UI improvement: Parser help and lists of field codes only shown or hidden by means of buttons.
  • UI improvement: Added field code injectors in features "Create issue link", "Log work", "Read field from issues returned by JQL query", and "Write field on issues returned by JQL query".
  • Added option "Evaluate all the setting rules, not stoping at first match." to post-function Set field as a function of other fields". This options is available only for multi-valued" target fields, and is intended to be used with prefixes + and - to add and remove values by means of a set of rules.
  • Renamed virtual field "Last comment's visibility" to "Last comment's visibility restrictions", as a more suitable name for this field.
  • Field "Last comment's visibility restrictions" now supports Service Desk's Internal visibility restriction.
  • Now writing on "Cascading Select" and "Multi-Cascading Select" is case unsensitive.
  • Improvements in functions "availableItems({nnnnn}) : string list" and "numberOfAvailableItems({nnnnn}) : number" for supporting the following field types: "Status", "Resolution", "Priority", "User Picker", "Multi-User Picker", "Group Picker" and "Multi-Group Picker".

Bug fixes

  • Issue #69 - Support for custom fields with IDs longer than 5 digits.
  • Issue #80 - Minor bug with Multi-Cascading Select fields
  • Bug on function fieldValue() - Function fieldValue() was retrieving values entered in current's issue transition screen as values of every issue read by the function.
  • Bug related with virtual field "Issue Status"
  • Bug when writing into virtual field "Issue Status" the name issue's current status, and the only transitions available for current user are global transitions.
  • Uninitialized field codes were throwing exceptions when used in advanced parsed texts. Now they simply return and empty string.
  • Post-function "Create issue link" failing in transition "Create Issue", when using a JQL query for issue selection and issue is created by Email.
  • Fixed bug when trying to clean a cascading select field by writing an empty string into it.
  • Parser didn't recognize empty list literal [ ].
  • Now, field codes inserted in JQL queries are not auto-double-quoted, since it was cause of errors in some cases.


[2014-10-06] Released JIRA Workflow Toolbox 2.1.22

New Features

  • New function toStringList(multivalued_field) returns the list of selected values as a string list type.
  • New comparison operators any in and none in. These operators work with multi-valued fields, number list, string list and issue list types.
  • New functions max(number list) and min(number list) return the maximun and minimum values in a number list respectively.
  • New infix operators UNION, INTERSECT, APPEND and EXCEPT are now available. These operators work exactly as currently existing homonymous functions, and work also on number list, string list and issue list types. Using these operators instead of function alternative, makes expressions shorter and more readable.
  • New virtual field "Date and time of latest status change".
  • String List and Number List can now be written as literals. Examples: ["red", "blue", "white"] and [1, 2, 3]. It makes possible expressions like: %{00012} in ["Blocker", "Critical"], where %{00012} is field code for field Priority.
  • New function toString(number, number_of_decimals). This function returns number in string format rounding the fractional part to show a limited number of decimal digits.
  • New functions transitivelyLinkedIssues(issue_link_types), transitivelyLinkedIssues(issue_link_types, issue_keys) and transitivelyLinkedIssues(issue_link_types, issue_list): returns directly linked issues and also transitively linked issues.
  • New function availableItems(selectable field) returns a string list with the possible values for the field. This function works on the following types of fields: versions, components, tags, select, multi-select, attachments, multi-user, multi-group, security level and issues.
  • Support for custom fields "Transition Count Field" introduced in last version of JIRA Misc Custom Fields.

Improvements

  • Function toString() now works with boolean type.
  • Operators ~ , !~ , in and not in now work with (number, number list) and (string, string list) type arguments.
  • All features using a JQL query among its configuration parameter now automatically add double quotes to all field codes injected in the JQL query, (i.e., transform %{nnnnn} into "%{nnnnn}"). This avoids errors at execution time when values stored in those fields contain spaces.

Fixed bugs

  • Function toString() wasn't working with number list, string list and issue list types.
  • Fixed minor bug in parser, related to the mechanism for avoiding evaluation of non-necessary terms, once final result has been determined by partial evaluation of the expression.
  • Field "Previous status" now returns previous status different from current one, i.e., transitions to same status are filtered.
  • #73 and #74: Major bug introduced in version 2.1.21 in "User in field Reporter isn't in project role".


[2014-09-15] Released JIRA Workflow Toolbox 2.1.21

New Features

  • Parser enriched with 21 new functions: (More details at Parser Syntax Specification.)
    • transitionLinkedIssues(string issue_link_types) : issue list
    • filterByFieldValue(issue list issues, numeric field field, comparison operator operator, number n) : issue list
    • filterByFieldValue(issue list issues, string field field, comparison operator operator, string s) : issue list
    • append(string list l, string list m) : string list
    • append(number list l, number list m) : number list
    • union(string list l, string list m) : string list
    • union(number list l, number list m) : number list
    • except(string list l, string list m) : string list
    • except(number list l, number list m) : number list
    • intersect(string list l, string list m) : string list
    • intersect(number list l, number list m) : number list
    • distinct(string list l) : string list
    • distinct(number list l) : number list
    • filterByCardinality(issue list l, comparison operator operator, number n) : issue list
    • filterByCardinality(string list l, comparison operator operator, number n) : string list
    • filterByCardinality(number list l, comparison operator operator, number n) : number list
    • toStringList(string s, string separators) : string list
    • toNumberList(string s, string separators) : string list
    • getIssuesFromProjects(string projects) : issue list
    • issueKeysToIssueList(string issues) : issue list
    • isInRole(string user_name, string role_name) : boolean
  • Parser enriched with 4 new comparison operators to be used with strings, multi-valuated fields and lists:
OPERATORMEANINGEXAMPLES
~contains"Hello world!" ~ "world", checks whether a string contains a substring
%{00125} ~ %{00020}, checks whether "Component leaders" contains "Current user"
linkedIssues() ~ subtasks(), checks whether all subtasks are also linked to current issue
!~doesn't contain"world" !~ "Hello world!"
%{00074} !~ %{00077}, checks whether "Fixed versions" doesn't contain "Affected versions"
fieldValue(%{00006}, linkedIssues()) !~ fieldValue(%{00006}, subtasks()), checks whether linked issues reporters don't include all subtasks reporters
inis contained in"world" in "Hello world!", to check whether a substring is contained in a string
%{00020} in %{00125}, checks whether "Current user" is contained in "Component leaders"
subtasks() in linkedIssues(), checks whether all subtasks are also linked to current issue
not inisn't contained in"Hello world!" not in "world"
%{00077} not in %{00074}, checks whether "Affected versions" are not contained in "Fixed versions"
fieldValue(%{00006}, subtasks()) not in fieldValue(%{00006}, linkedIssues()), checks whether all subtasks reporters are not included in linked issues reporters

These 4 new comparison operators respect cardinality, and work on the following data types:

  • String
  • Multi-valued fields: Multi Select, Checkboxes, Components, Versions, Multi User Picker, Multi Group Picker, Issue Pickers, Attachments and Labels.
  • Issue list: Returned by functions like subtasks(), linkedIssues(), transitionLinkedIssues(), filterByFieldValue(), filterByStatus(), filterByIssueType(), filterByResolution(), filterByProject(), append(), union(), except(), intersect() and distinct().
  • String list: Returned by functions like fieldValue(), append(), union(), except(), intersect() and distinct().
  • Number list: Returned by functions like fieldValue(), append(), union(), except(), intersect() and distinct().

Improvements

  • Comparison operators = and != now can also be used on multi-valued fields, issue lists, number lists and string lists. These operators respect cardinality and order.
  • Function filterByResolution(issue list issues, string resolutions) now returns unresolved issues when argument resolutions receives an empty string ("").
  • Improvements on condition and validator "Users in field are/are not in project role":
    • Both features now support "Group Picker" and "Multi-Group Picker" custom fields. When these type of fields are used, all users in the groups are evaluated.
    • 4 new conditions added to validator.
    • 7 new conditions added to condition, giving it the same functionality as the validator.
  • Minor UI improvements.
  • Support for reading and writing the following custom field types provided for third-party add-ons:
    • Project Roles or Groups User Picker, Project Roles or Groups Multi User Picker, Single Selected Users Picker and Multi Selected Users Picker custom fields provided by Custom User Pickers add-on.
    • Transition Caller Field and Parent Status Field custom field provided by JIRA Misc Custom Fields add-on.
    • User Picker - per Group custom field provided by User Group Picker add-on.
    • SIL User Picker custom field provided by User Group Picker PRO add-on.
    • All custom field types provided by Kepler Custom Fields add-on.

Fixed bugs

  • All 3 functions linkedIssues() didn't return issues linked in transition screen.
  • Function numberOfSelectedItems(%{00080}) always returned 1, instead of the number of labels in the issue, as expected.
  • Number to String auto-casting issues in the parser.
  • Function count() wasn't working correctly with arguments of type "String list" and "Number list".
  • Validator Validation on linked issues was counting twice each issue link introduced in transition.
  • When parent issue was reading an ephemeral field previously written by one of its subtasks, the field appeared as uninitialized.
  • Fixed bad UI design for issue link type selection in post-function Break issue link: it wasn't possible to select of issue link types in only one direction (inward or outward).


[2014-08-15] Released JIRA Workflow Toolbox 2.1.20

New Features

  • Added 16 new powerful functions to the Expression's Parser for referencing linked issues, subtasks and their field values. More details at Parser Syntax Specification.
  • 10 new virtual fields: (more details at Virtual Fields)
    • Execute transition
    • Execute transition (delayed execution)
    • Issue status category
    • Previous issue status
    • Previous issue status category
    • Creator
    • Creator's full name
    • Creator's email
    • Add to time spent (minutes)
    • Work logged in transition (minutes)
  • Custom field type "Issue Picker" is now supported. You can set them with a comma separated list of issue keys, and you can use prefixes '+' and '-' to add or remove issues to curren value of the field.

Improvements

  • Writing on fields "Issue status", "Issue status (delayed writing)", "Resolution" is now case insensitive. If you have values for these fields only differing in the case (like "Open" and "OPEN"), assignments will keep respecting the case.
  • Values returned by virtual fields "Issue status", "Priority", "Resolution", and "Issue type" now returns the translated name in JIRA's default language. Until now the value returned was the user's default language translated name, making the value dependent on each user. This resulted problematic when doing comparisons.
  • Project Pickers can be assigned a value using project keys and project names.
  • Writing string "null" or "unassigned" into virtual fields "Assignee", "Reporter", "Priority", "Resolution", "Due Date" and "Security Level" will unset these fields.
  • Important refactorization of Expression's Parser and javascript code to improve maintainability.

Fixed bugs

  • Auto-transition of an issue by writing into its own virtual field "Issue status (delayed writing)" wasn't working in JIRA 6.
  • Automatic parsing mode converter in post-function "Copy parsed text to a field" was not working correctly when cascading select fields where used.
  • Virtual field "Time spent (minutes)" setting wasn't working.
  • Workflows with global transitions became temporarily non-editable in certain circumstances.
  • Writing on a Select Field, Check Box, Multi-Select, etc. without options configured was throwing an exception.
  • Problems showing "Copy a parsed text to a field" post-function configuration in advanced parsing mode.


[2014-07-10] JIRA Workflow Toolbox now is supported by Project Configurator add-on

JIRA Workflow Toolbox has become supported by excellent plugin Project Configurator since version 1.3.2. Developed by Awnaba, this add-on allows you to automatize deployment of JIRA configurations among different environments (dev, test, prod, etc), making it possible to develop new configurations in a safe environment, and transfer them to test and production environments with little effort.

In the new version of Project Configurator, all custom fields referenced by features of JIRA Workflow Toolbox included in your workflows, are automatically detected, and included in XML configuration files, that will be later used to transfer configurations among environments.

Updated