createWorkflow method
Creates a workflow. You can define transition rules using the shapes detailed in the following sections. If no transitional rules are specified the default system transition rules are used. Note: This only applies to company-managed scoped workflows. Use bulk create workflows to create both team and company-managed scoped workflows.
Conditions
Conditions enable workflow rules that govern whether a transition can execute.
Always false condition
A condition that always fails.
{
"type": "AlwaysFalseCondition"
}
Block transition until approval
A condition that blocks issue transition if there is a pending approval.
{
"type": "BlockInProgressApprovalCondition"
}
Compare number custom field condition
A condition that allows transition if a comparison between a number custom field and a value is true.
{
"type": "CompareNumberCFCondition",
"configuration": {
"comparator": "=",
"fieldId": "customfield_10029",
"fieldValue": 2
}
}
-
comparatorOne of the supported comparator:=,>, and<. -
fieldIdThe custom numeric field ID. Allowed field types:com.atlassian.jira.plugin.system.customfieldtypes:floatcom.pyxis.greenhopper.jira:jsw-story-points
-
fieldValueThe value for comparison.
Hide from user condition
A condition that hides a transition from users. The transition can only be triggered from a workflow function or REST API operation.
{
"type": "RemoteOnlyCondition"
}
Only assignee condition
A condition that allows only the assignee to execute a transition.
{
"type": "AllowOnlyAssignee"
}
Only Bamboo notifications workflow condition
A condition that makes the transition available only to Bamboo build notifications.
{
"type": "OnlyBambooNotificationsCondition"
}
Only reporter condition
A condition that allows only the reporter to execute a transition.
{
"type": "AllowOnlyReporter"
}
Permission condition
A condition that allows only users with a permission to execute a transition.
{
"type": "PermissionCondition",
"configuration": {
"permissionKey": "BROWSE_PROJECTS"
}
}
permissionKeyThe permission required to perform the transition. Allowed values: built-in or app defined permissions.
Previous status condition
A condition that allows a transition based on whether an issue has or has not transitioned through a status.
{
"type": "PreviousStatusCondition",
"configuration": {
"ignoreLoopTransitions": true,
"includeCurrentStatus": true,
"mostRecentStatusOnly": true,
"reverseCondition": true,
"previousStatus": {
"id": "5"
}
}
}
By default this condition allows the transition if the status, as defined
by its ID in the previousStatus object, matches any previous issue
status, unless:
ignoreLoopTransitionsistrue, then loop transitions (from and to the same status) are ignored.includeCurrentStatusistrue, then the current issue status is also checked.mostRecentStatusOnlyistrue, then only the issue's preceding status (the one immediately before the current status) is checked.reverseConditionistrue, then the status must not be present.
Separation of duties condition
A condition that prevents a user to perform the transition, if the user has already performed a transition on the issue.
{
"type": "SeparationOfDutiesCondition",
"configuration": {
"fromStatus": {
"id": "5"
},
"toStatus": {
"id": "6"
}
}
}
fromStatusOPTIONAL. An object containing the ID of the source status of the transition that is blocked. If omitted any transition totoStatusis blocked.toStatusAn object containing the ID of the target status of the transition that is blocked.
Subtask blocking condition
A condition that blocks transition on a parent issue if any of its subtasks are in any of one or more statuses.
{
"type": "SubTaskBlockingCondition",
"configuration": {
"statuses": [
{
"id": "1"
},
{
"id": "3"
}
]
}
}
statusesA list of objects containing status IDs.
User is in any group condition
A condition that allows users belonging to any group from a list of groups to execute a transition.
{
"type": "UserInAnyGroupCondition",
"configuration": {
"groups": [
"administrators",
"atlassian-addons-admin"
]
}
}
groupsA list of group names.
User is in any project role condition
A condition that allows only users with at least one project roles from a list of project roles to execute a transition.
{
"type": "InAnyProjectRoleCondition",
"configuration": {
"projectRoles": [
{
"id": "10002"
},
{
"id": "10003"
},
{
"id": "10012"
},
{
"id": "10013"
}
]
}
}
projectRolesA list of objects containing project role IDs.
User is in custom field condition
A condition that allows only users listed in a given custom field to execute the transition.
{
"type": "UserIsInCustomFieldCondition",
"configuration": {
"allowUserInField": false,
"fieldId": "customfield_10010"
}
}
allowUserInFieldIftrueonly a user who is listed infieldIdcan perform the transition, otherwise, only a user who is not listed infieldIdcan perform the transition.fieldIdThe ID of the field containing the list of users.
User is in group condition
A condition that allows users belonging to a group to execute a transition.
{
"type": "UserInGroupCondition",
"configuration": {
"group": "administrators"
}
}
groupThe name of the group.
User is in group custom field condition
A condition that allows users belonging to a group specified in a custom field to execute a transition.
{
"type": "InGroupCFCondition",
"configuration": {
"fieldId": "customfield_10012"
}
}
-
fieldIdThe ID of the field. Allowed field types:com.atlassian.jira.plugin.system.customfieldtypes:multigrouppickercom.atlassian.jira.plugin.system.customfieldtypes:grouppickercom.atlassian.jira.plugin.system.customfieldtypes:selectcom.atlassian.jira.plugin.system.customfieldtypes:multiselectcom.atlassian.jira.plugin.system.customfieldtypes:radiobuttons
com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxescom.pyxis.greenhopper.jira:gh-epic-status
User is in project role condition
A condition that allows users with a project role to execute a transition.
{
"type": "InProjectRoleCondition",
"configuration": {
"projectRole": {
"id": "10002"
}
}
}
projectRoleAn object containing the ID of a project role.
Value field condition
A conditions that allows a transition to execute if the value of a field is equal to a constant value or simply set.
{
"type": "ValueFieldCondition",
"configuration": {
"fieldId": "assignee",
"fieldValue":
"qm:6e1ecee6-8e64-4db6-8c85-916bb3275f51:54b56885-2bd2-4381-8239-78263442520f", "comparisonType": "NUMBER", "comparator": "=" } }
fieldIdThe ID of a field used in the comparison.fieldValueThe expected value of the field.comparisonTypeThe type of the comparison. Allowed values:STRING,NUMBER,DATE,DATE_WITHOUT_TIME, orOPTIONID.comparatorOne of the supported comparator:>,>=,=,<=,<,!=.
Notes:
- If you choose the comparison type
STRING, only=and!=are valid options. - You may leave
fieldValueempty when comparison type is!=to indicate that a value is required in the field. - For date fields without time format values as
yyyy-MM-dd, and for those with time asyyyy-MM-dd HH:mm. For example, for July 16 2021 use2021-07-16, for 8:05 AM use2021-07-16 08:05, and for 4 PM:2021-07-16 16:00.
Validators
Validators check that any input made to the transition is valid before the transition is performed.
Date field validator
A validator that compares two dates.
{
"type": "DateFieldValidator",
"configuration": {
"comparator": ">",
"date1": "updated",
"date2": "created",
"expression": "1d",
"includeTime": true
}
}
-
comparatorOne of the supported comparator:>,>=,=,<=,<, or!=. -
date1The date field to validate. Allowed field types:com.atlassian.jira.plugin.system.customfieldtypes:datepickercom.atlassian.jira.plugin.system.customfieldtypes:datetimecom.atlassian.jpo:jpo-custom-field-baseline-endcom.atlassian.jpo:jpo-custom-field-baseline-startduedatecreatedupdatedresolutiondate
-
date2The second date field. Required, ifexpressionis not passed. Allowed field types:com.atlassian.jira.plugin.system.customfieldtypes:datepickercom.atlassian.jira.plugin.system.customfieldtypes:datetimecom.atlassian.jpo:jpo-custom-field-baseline-endcom.atlassian.jpo:jpo-custom-field-baseline-startduedatecreatedupdatedresolutiondate
-
expressionAn expression specifying an offset. Required, ifdate2is not passed. Offsets are built with a number, with-as prefix for the past, and one of these time units:dfor day,wfor week,mfor month, oryfor year. For example, -2d means two days into the past and 1w means one week into the future. Thenowkeyword enables a comparison with the current date. -
includeTimeIftrue, then the time part of the data is included for the comparison. If the field doesn't have a time part, 00:00:00 is used.
Windows date validator
A validator that checks that a date falls on or after a reference date and before or on the reference date plus a number of days.
{
"type": "WindowsDateValidator",
"configuration": {
"date1": "customfield_10009",
"date2": "created",
"windowsDays": 5
}
}
-
date1The date field to validate. Allowed field types:com.atlassian.jira.plugin.system.customfieldtypes:datepickercom.atlassian.jira.plugin.system.customfieldtypes:datetimecom.atlassian.jpo:jpo-custom-field-baseline-endcom.atlassian.jpo:jpo-custom-field-baseline-startduedatecreatedupdatedresolutiondate
-
date2The reference date. Allowed field types:com.atlassian.jira.plugin.system.customfieldtypes:datepickercom.atlassian.jira.plugin.system.customfieldtypes:datetimecom.atlassian.jpo:jpo-custom-field-baseline-endcom.atlassian.jpo:jpo-custom-field-baseline-startduedatecreatedupdatedresolutiondate
-
windowsDaysA positive integer indicating a number of days.
Field required validator
A validator that checks fields are not empty. By default, if a field is not included in the current context it's ignored and not validated.
{
"type": "FieldRequiredValidator",
"configuration": {
"ignoreContext": true,
"errorMessage": "Hey",
"fieldIds": [
"versions",
"customfield_10037",
"customfield_10003"
]
}
}
ignoreContextIftrue, then the context is ignored and all the fields are validated.errorMessageOPTIONAL. The error message displayed when one or more fields are empty. A default error message is shown if an error message is not provided.fieldIdsThe list of fields to validate.
Field changed validator
A validator that checks that a field value is changed. However, this validation can be ignored for users from a list of groups.
{
"type": "FieldChangedValidator",
"configuration": {
"fieldId": "comment",
"errorMessage": "Hey",
"exemptedGroups": [
"administrators",
"atlassian-addons-admin"
]
}
}
fieldIdThe ID of a field.errorMessageOPTIONAL. The error message displayed if the field is not changed. A default error message is shown if the error message is not provided.exemptedGroupsOPTIONAL. The list of groups.
Field has single value validator
A validator that checks that a multi-select field has only one value. Optionally, the validation can ignore values copied from subtasks.
{
"type": "FieldHasSingleValueValidator",
"configuration": {
"fieldId": "attachment,
"excludeSubtasks": true
}
}
fieldIdThe ID of a field.excludeSubtasksIftrue, then values copied from subtasks are ignored.
Parent status validator
A validator that checks the status of the parent issue of a subtask. Ìf the issue is not a subtask, no validation is performed.
{
"type": "ParentStatusValidator",
"configuration": {
"parentStatuses": [
{
"id":"1"
},
{
"id":"2"
}
]
}
}
parentStatusThe list of required parent issue statuses.
Permission validator
A validator that checks the user has a permission.
{
"type": "PermissionValidator",
"configuration": {
"permissionKey": "ADMINISTER_PROJECTS"
}
}
permissionKeyThe permission required to perform the transition. Allowed values: built-in or app defined permissions.
Previous status validator
A validator that checks if the issue has held a status.
{
"type": "PreviousStatusValidator",
"configuration": {
"mostRecentStatusOnly": false,
"previousStatus": {
"id": "15"
}
}
}
mostRecentStatusOnlyIftrue, then only the issue's preceding status (the one immediately before the current status) is checked.previousStatusAn object containing the ID of an issue status.
Regular expression validator
A validator that checks the content of a field against a regular expression.
{
"type": "RegexpFieldValidator",
"configuration": {
"regExp": "[0-9]",
"fieldId": "customfield_10029"
}
}
-
regExpA regular expression. -
fieldIdThe ID of a field. Allowed field types:com.atlassian.jira.plugin.system.customfieldtypes:selectcom.atlassian.jira.plugin.system.customfieldtypes:multiselectcom.atlassian.jira.plugin.system.customfieldtypes:radiobuttons
com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxescom.atlassian.jira.plugin.system.customfieldtypes:textareacom.atlassian.jira.plugin.system.customfieldtypes:textfieldcom.atlassian.jira.plugin.system.customfieldtypes:urlcom.atlassian.jira.plugin.system.customfieldtypes:floatcom.pyxis.greenhopper.jira:jsw-story-pointscom.pyxis.greenhopper.jira:gh-epic-statusdescriptionsummary
User permission validator
A validator that checks if a user has a permission. Obsolete. You may encounter this validator when getting transition rules and can pass it when updating or creating rules, for example, when you want to duplicate the rules from a workflow on a new workflow.
{
"type": "UserPermissionValidator",
"configuration": {
"permissionKey": "BROWSE_PROJECTS",
"nullAllowed": false,
"username": "TestUser"
}
}
permissionKeyThe permission to be validated. Allowed values: built-in or app defined permissions.nullAllowedIftrue, allows the transition whenusernameis empty.usernameThe username to validate against thepermissionKey.
Post functions
Post functions carry out any additional processing required after a Jira workflow transition is executed.
Fire issue event function
A post function that fires an event that is processed by the listeners.
{
"type": "FireIssueEventFunction",
"configuration": {
"event": {
"id":"1"
}
}
}
Note: If provided, this post function overrides the default
FireIssueEventFunction. Can be included once in a transition.
eventAn object containing the ID of the issue event.
Update issue status
A post function that sets issue status to the linked status of the destination workflow status.
{
"type": "UpdateIssueStatusFunction"
}
Note: This post function is a default function in global and directed transitions. It can only be added to the initial transition and can only be added once.
Create comment
A post function that adds a comment entered during the transition to an issue.
{
"type": "CreateCommentFunction"
}
Note: This post function is a default function in global and directed transitions. It can only be added to the initial transition and can only be added once.
Store issue
A post function that stores updates to an issue.
{
"type": "IssueStoreFunction"
}
Note: This post function can only be added to the initial transition and can only be added once.
Assign to current user function
A post function that assigns the issue to the current user if the current
user has the ASSIGNABLE_USER permission.
{
"type": "AssignToCurrentUserFunction"
}
Note: This post function can be included once in a transition.
Assign to lead function
A post function that assigns the issue to the project or component lead developer.
{
"type": "AssignToLeadFunction"
}
Note: This post function can be included once in a transition.
Assign to reporter function
A post function that assigns the issue to the reporter.
{
"type": "AssignToReporterFunction"
}
Note: This post function can be included once in a transition.
Clear field value function
A post function that clears the value from a field.
{
"type": "ClearFieldValuePostFunction",
"configuration": {
"fieldId": "assignee"
}
}
fieldIdThe ID of the field.
Copy value from other field function
A post function that copies the value of one field to another, either within an issue or from parent to subtask.
{
"type": "CopyValueFromOtherFieldPostFunction",
"configuration": {
"sourceFieldId": "assignee",
"destinationFieldId": "creator",
"copyType": "same"
}
}
sourceFieldIdThe ID of the source field.destinationFieldIdThe ID of the destination field.copyTypeUsesameto copy the value from a field inside the issue, orparentto copy the value from the parent issue.
Create Crucible review workflow function
A post function that creates a Crucible review for all unreviewed code for the issue.
{
"type": "CreateCrucibleReviewWorkflowFunction"
}
Note: This post function can be included once in a transition.
Set issue security level based on user's project role function
A post function that sets the issue's security level if the current user has a project role.
{
"type": "SetIssueSecurityFromRoleFunction",
"configuration": {
"projectRole": {
"id":"10002"
},
"issueSecurityLevel": {
"id":"10000"
}
}
}
projectRoleAn object containing the ID of the project role.issueSecurityLevelOPTIONAL. The object containing the ID of the security level. If not passed, then the security level is set tonone.
Trigger a webhook function
A post function that triggers a webhook.
{
"type": "TriggerWebhookFunction",
"configuration": {
"webhook": {
"id": "1"
}
}
}
webhookAn object containing the ID of the webhook listener to trigger.
Update issue custom field function
A post function that updates the content of an issue custom field.
{
"type": "UpdateIssueCustomFieldPostFunction",
"configuration": {
"mode": "append",
"fieldId": "customfield_10003",
"fieldValue": "yikes"
}
}
modeUsereplaceto override the field content withfieldValueorappendto addfieldValueto the end of the field content.fieldIdThe ID of the field.fieldValueThe update content.
Update issue field function
A post function that updates a simple issue field.
{
"type": "UpdateIssueFieldFunction",
"configuration": {
"fieldId": "assignee",
"fieldValue": "5f0c277e70b8a90025a00776"
}
}
-
fieldIdThe ID of the field. Allowed field types:assigneedescriptionenvironmentpriorityresolutionsummarytimeoriginalestimatetimeestimatetimespent
-
fieldValueThe update value. -
If the
fieldIdisassignee, thefieldValueshould be one of these values:- an account ID.
automatic.- a blank string, which sets the value to
unassigned.
Connect rules
Connect rules are conditions, validators, and post functions of a transition that are registered by Connect apps. To create a rule registered by the app, the app must be enabled and the rule's module must exist.
{
"type": "appKey__moduleKey",
"configuration": {
"value":"{"isValid":"true"}"
}
}
typeA Connect rule key in a form ofappKey__moduleKey.valueThe stringified JSON configuration of a Connect rule.
Forge rules
Forge transition rules are not yet supported.
Permissions required: Administer Jira global permission.
Implementation
@deprecated
Future<WorkflowIDs> createWorkflow(
{required CreateWorkflowDetails body}) async {
return WorkflowIDs.fromJson(await _client.send(
'post',
'rest/api/3/workflow',
body: body.toJson(),
));
}