This page describes the required steps when migrating from a Jira Cloud instance to a Jira Server instance when you are using some of the default/JSU Workflow Condition/Validator/Post Functions in your workflows.
Migration from Jira Cloud to Jira Server is not directly possible. You have to be careful as there are many validators and conditions which are built into Jira Cloud, but not in Jira Server. For that, you will need JSU. JSU Cloud's additional post functions make it more powerful with its Related Issues, Perform as a different user, and many other post functions that you can use to automate your workflows without any coding.
Background
Years ago, Beecom donated some of JSU's modules to Jira Cloud. Atlassian integrated most of these JSU Workflow Condition/Validator/Post - Functions (based on JSU Server 1.4) into their native Jira Cloud environment which were still very basic modules. Since then, JSU Server has added many other functionalities to make it more powerful. When JSU on for Jira Cloud was released, it also had additional advanced form included the additional functionality of the Post-functions as of JSU Server. If you perform a migration migrate from Jira Cloud to Jira Server, those default/JSU Workflow Condition/Validator/Post - Functions do not exist in the default Jira Server Version version but can be simply replaced with the JSU app.
...
Workflow Name | JSU Cloud Module-Key | JSU Server Module-Key |
---|
Conditions |
|
|
User Is In Any Users (JSU) | com.atlassian.plugins.atlassian-connect-plugin:com.googlecode. jira-suite-utilities__userisinanyusers-condition | com.googlecode.jsu.workflow.condition.userisinanyusers-condition |
Post - Functions |
|
|
Clear Field Value (JSU) | com.atlassian.plugins.atlassian-connect-plugincom.googlecode.jira-suite-utilities__clearFieldValue-function | com.googlecode.jira-suite-utilitiesclearFieldValue-function |
Copy Value From Other Field (JSU) | com.atlassian.plugins.atlassian-connect-plugincom.googlecode.jira-suite-utilities__copyValueFromOtherField-function | com.googlecode.jira-suite-utilitiescopyValueFromOtherField-function |
Copy or Move Attachments (JSU) | com.atlassian.plugins.atlassian-connect-plugincom.googlecode.jira-suite-utilities__copymoveattachments-function | com.googlecode.jira-suite-utilitiescopymoveattachments-function |
Create a Linked Issue (JSU) | com.atlassian.plugins.atlassian-connect-plugincom.googlecode.jira-suite-utilities__createlinkedissue-function | com.googlecode.jira-suite-utilitiescreatelinkedissue-function |
Follow Up Transition (JSU) | com.atlassian.plugins.atlassian-connect-plugincom.googlecode.jira-suite-utilities__followuptransition-function | com.googlecode.jira-suite-utilitiesfollowuptransition-function |
Linked Transition (JSU) | com.atlassian.plugins.atlassian-connect-plugincom.googlecode.jira-suite-utilities__linkedtransition-function | com.googlecode.jira-suite-utilitieslinkedtransition-function |
Update any Issue Field (JSU) | com.atlassian.plugins.atlassian-connect-plugincom.googlecode.jira-suite-utilities__updateanyissuefield-function | com.googlecode.jira-suite-utilitiesupdateIssueCustomField-function |
Mapping between JSU Cloud
...
and JSU Server
The following description describes all the attributes which need to be mapped between the JSU Cloud and JSU Server Workflow functionality.
Post
...
Function Mapping: Clear Field Value (JSU)
Arg Name: JSU Cloud | Arg Name: JSU Server |
---|
Example Code Block |
---|
<function type="class">
<arg name="class.name">com.atlassian.plugin.connect.jira.workflow.RemoteWorkflowPostFunctionProvider</arg>
<arg name="full.module.key">com.atlassian.plugins.atlassian-connect-plugincom.googlecode.jira-suite-utilities__clearFieldValue-function</arg>
<arg name="remoteWorkflowPostFunctionConfiguration">
{"preconditions":[],
"preconditionAwareFunctionMode-textValue":"TRUE",
"field":"assignee",
"jsuCloudWorkflowParamsVersion-textValue":"2.8.0",
"scopeType":"SAME",
"source-scopeTarget":"ISSUE_IN_TRANSITION",
"destination-scopeTarget":"ISSUE_IN_TRANSITION",
"runAsUser-user":"qm:c14a3779-f1ba-496f-a5ef-dbb4ab1928f4:e5e9400a-0c77-440a-aa18-fbb585fbd6e8"}</arg>
<arg name="remoteWorkflowPostFunctionUUID">9dfcbdb2-7738-429c-9af4-e0a4b9490f9a</arg>
</function> |
| Example Code Block |
---|
<function type="class">
<arg name="scopeSource-linkEnd"></arg>
<arg name="maxAllowed-integerValue"></arg>
<arg name="runAsUser-user">admin</arg>
<arg name="field">assignee</arg>
<arg name="scopeType">SAME</arg>
<arg name="destination-scopeTarget">ISSUE_IN_TRANSITION</arg>
<arg name="full.module.key">com.googlecode.jira-suite-utilitiesclearFieldValue-function</arg>
<arg name="scopeDestination-linkEnd"></arg>
<arg name="preconditionAwareFunctionMode-textValue">ALWAYS</arg>
<arg name="jsuWorkflowParamsVersion-textValue">2.23.3-SNAPSHOT</arg>
<arg name="source-scopeTarget">ISSUE_IN_TRANSITION</arg>
<arg name="scopeDestination-jql"></arg>
<arg name="class.name">com.googlecode.jsu.workflow.function.ClearFieldValuePostFunction</arg>
<arg name="scopeSource-jql"></arg>
</function> |
|
Post
...
Function Mapping: Copy Value From Other Field (JSU)
Arg Name: JSU Cloud | Arg Name: JSU Server |
---|
Example Code Block |
---|
<function type="class">
<arg
name="class.name">com.atlassian.plugin.connect.jira.workflow.RemoteWorkflowPostFunctionProvider</arg>
<arg name="full.module.key">com.atlassian.plugins.atlassian-connect-
plugincom.googlecode.jira-suite-utilities__copyValueFromOtherField-function</arg>
<arg name="remoteWorkflowPostFunctionConfiguration">
{"preconditions": [],
"preconditionAwareFunctionMode-textValue":"TRUE",
"field.copyFieldSource1":"assignee",
"field.copyFieldDestination1":"customfield_10003",
"field.copyFieldMode1":"OVERWRITE",
"field.copyFieldSeparator1":"",
"field.createTargetValue1":false,
"jsuCloudWorkflowParamsVersion-textValue":"2.8.0",
"scopeType":"SAME",
"source-scopeTarget":"ISSUE_IN_TRANSITION",
"destination-scopeTarget":"ISSUE_IN_TRANSITION",
"runAsUser-user":""}
</arg>
<arg name="remoteWorkflowPostFunctionUUID">0e286a2f-b587-4432-8806-be35175e92a1</arg>
</function> |
| Example Code Block |
---|
<function type="class">
<arg name="field.copyFieldSource2"></arg>
<arg name="field.copyFieldSource1">assignee</arg>
<arg name="scopeSource-linkEnd"></arg>
<arg name="maxAllowed-integerValue"></arg>
<arg name="field.createTargetValue1"></arg>
<arg name="runAsUser-user"></arg>
<arg name="field.copyFieldMode1">OVERWRITE</arg>
<arg name="field.copyFieldDestination1">customfield_11100</arg>
<arg name="field.copyFieldSeparator1"></arg>
<arg name="scopeType">SAME</arg>
<arg name="destination-scopeTarget">ISSUE_IN_TRANSITION</arg>
<arg name="full.module.key">com.googlecode.jira-suite-utilitiescopyValueFromOtherField-function</arg>
<arg name="scopeDestination-linkEnd"></arg>
<arg name="jsuWorkflowParamsVersion-textValue">2.23.3-SNAPSHOT</arg>
<arg name="preconditionAwareFunctionMode-textValue">ALWAYS</arg>
<arg name="source-scopeTarget">ISSUE_IN_TRANSITION</arg>
<arg name="scopeDestination-jql"></arg>
<arg name="class.name">com.googlecode.jsu.workflow.function.CopyValueFromOtherFieldPostFunction</arg>
<arg name="scopeSource-jql"></arg>
</function> |
|
Post
...
Function Mapping: Create a Linked Issue (JSU)
Arg Name: JSU Cloud | Arg Name: JSU Server |
---|
Example Code Block |
---|
<function type="class">
<arg name="class.name">com.atlassian.plugin.connect.jira.workflow.RemoteWorkflowPostFunctionProvider</arg>
<arg
name="full.module.key">com.atlassian.plugins.atlassian-connect-
plugincom.googlecode.jira-suite-utilities__createlinkedissue-function</arg>
<arg name="remoteWorkflowPostFunctionConfiguration">
{"preconditions":[],
"preconditionAwareFunctionMode-textValue":"TRUE",
"currentProjectType":"SAME",
"currentProjectId":"-2",
"currentIssueTypeId":"10006",
"runAsUser-user":"",
"jsuCloudWorkflowParamsVersion-textValue":"2.8.0",
"subFunctions":[],
"scopeType":"NONE",
"source-scopeTarget":"ISSUE_IN_TRANSITION",
"destination-scopeTarget":"ISSUE_IN_TRANSITION",
"field.attachmentEnablingCustomFieldId":"ALWAYS",
"field.existingAttachmentEnablingCustomFieldId":"ALWAYS",
"transitionAttachmentsOperation":"copy"}
</arg>
<arg name="remoteWorkflowPostFunctionUUID">a27f8e4f-f1a0-4e01-9199-057d34df07ee</arg>
</function> |
| Example Code Block |
---|
<function type="class">
<arg name="field.existingAttachmentEnablingCustomFieldId"></arg>
<arg name="scopeSource-linkEnd"></arg>
<arg name="targetIssueTypeDefinedByCfSelection"></arg>
<arg name="issueTypeId">1</arg>
<arg name="scopeType">NONE</arg>
<arg name="jsuWorkflowParamsVersion-textValue">2.23.3-SNAPSHOT</arg>
<arg name="source-scopeTarget">ISSUE_IN_TRANSITION</arg>
<arg name="field.attachmentEnablingCustomFieldId"></arg>
<arg name="targetIssueType">SELECTED_ISSUE_TYPE</arg>
<arg name="scopeSource-jql"></arg>
<arg name="createIssueAsUser-user"></arg>
<arg name="field.copyTransitionComment">false</arg>
<arg name="targetProjectType">SAME</arg>
<arg name="maxAllowed-integerValue"></arg>
<arg name="transitionAttachmentsOperation">copy</arg>
<arg name="field.issueAssignTo">ASSIGN_TO_ASSIGNEE</arg>
<arg name="targetProjectSelectedCustomField"></arg>
<arg name="destination-scopeTarget">ISSUE_IN_TRANSITION</arg>
<arg name="full.module.key">com.googlecode.jira-suite-utilitiescreatelinkedissue-function</arg>
<arg name="scopeDestination-linkEnd"></arg>
<arg name="field.enablingCustomFieldId"></arg>
<arg name="preconditionAwareFunctionMode-textValue">ALWAYS</arg>
<arg name="scopeDestination-jql"></arg>
<arg name="subFunctions">[]</arg>
<arg name="class.name">ch.beecom.jira.jsu.workflow.function.createlinkedissue.CreateLinkedIssueFunction</arg>
<arg name="projectId">10500</arg>
</function> |
|
Post
...
Function Mapping: Linked Transition (JSU)
Arg Name: JSU Cloud | Arg Name: JSU Server |
---|
Example Code Block |
---|
<function type="class">
<arg name="class.name">com.atlassian.plugin.connect.jira.workflow.RemoteWorkflowPostFunctionProvider</arg>
<arg name="full.module.key">com.atlassian.plugins.atlassian-connect-plugincom.googlecode.jira-suite-utilities__linkedtransition-function</arg>
<arg name="remoteWorkflowPostFunctionConfiguration">
{"preconditions":[],
"preconditionAwareFunctionMode-textValue":"TRUE",
"runAsUser-user":"",
"status":"",
"statusName":"",
"workflowName-textValue":"classic default workflow",
"integerValue":"2",
"textValue":"-1",
"jsuCloudWorkflowParamsVersion-textValue":"2.8.0",
"scopeType":"ISSUE_LINKING",
"source-scopeTarget":"ISSUE_IN_TRANSITION",
"destination-scopeTarget":"LINK_END",
"scopeSource-linkEnd":"",
"scopeDestination-linkEnd":""}
</arg>
<arg name="remoteWorkflowPostFunctionUUID">45bd3003-b5e2-42b8-ada2-032d3b2b8f83</arg>
</function> |
| Example Code Block |
---|
<function type="class">
<arg name="field.copyFieldSource1"></arg>
<arg name="textValue">-1</arg>
<arg name="scopeSource-linkEnd"></arg>
<arg name="maxAllowed-integerValue"></arg>
<arg name="workflowName-textValue">AP: Task Management Workflow</arg>
<arg name="performTransitionAsUser-user"></arg>
<arg name="scopeType">ISSUE_LINKING</arg>
<arg name="destination-scopeTarget">LINK_END</arg>
<arg name="full.module.key">com.googlecode.jira-suite-utilitieslinkedtransition-function</arg>
<arg name="scopeDestination-linkEnd">ANY:ANY</arg>
<arg name="jsuWorkflowParamsVersion-textValue">2.23.3-SNAPSHOT</arg>
<arg name="preconditionAwareFunctionMode-textValue">ALWAYS</arg>
<arg name="source-scopeTarget">ISSUE_IN_TRANSITION</arg>
<arg name="integerValue">21</arg>
<arg name="scopeDestination-jql"></arg>
<arg name="class.name">ch.beecom.jira.jsu.workflow.function.linkedtransition.LinkedTransitionFunction</arg>
<arg name="scopeSource-jql"></arg>
<arg name="status"></arg>
</function> |
|
Post
...
Function Mapping: Update any Issue Field (JSU)
Arg Name: JSU Cloud | Arg Name: JSU Server |
---|
Example Code Block |
---|
<function type="class">
<arg name="class.name">com.atlassian.plugin.connect.jira.workflow.RemoteWorkflowPostFunctionProvider</arg>
<arg name="full.module.key">com.atlassian.plugins.atlassian-connect-plugincom.googlecode.jira-suite-utilities__updateanyissuefield-function</arg>
<arg name="remoteWorkflowPostFunctionConfiguration">
{"preconditions":[],
"preconditionAwareFunctionMode-textValue":"TRUE",
"runAsUser-user":"",
"field.name":"summary",
"field.value":"test summary",
"append.value":false,
"jsuCloudWorkflowParamsVersion-textValue":"2.8.0",
"scopeType":"SAME",
"source-scopeTarget":"ISSUE_IN_TRANSITION",
"destination-scopeTarget":"ISSUE_IN_TRANSITION"}
</arg>
<arg name="remoteWorkflowPostFunctionUUID">e6518c27-cd5e-40b4-a190-14b1c32c1e8e</arg>
</function> |
| Example Code Block |
---|
<function type="class">
<arg name="scopeSource-linkEnd"></arg>
<arg name="append.value"></arg>
<arg name="maxAllowed-integerValue"></arg>
<arg name="runAsUser-user"></arg>
<arg name="field.value">test summary</arg>
<arg name="field.name">summary</arg>
<arg name="scopeType">SAME</arg>
<arg name="destination-scopeTarget">ISSUE_IN_TRANSITION</arg>
<arg name="full.module.key">com.googlecode.jira-suite-utilitiesupdateIssueCustomField-function</arg>
<arg name="scopeDestination-linkEnd"></arg>
<arg name="preconditionAwareFunctionMode-textValue">ALWAYS</arg>
<arg name="jsuWorkflowParamsVersion-textValue">2.23.3-SNAPSHOT</arg>
<arg name="source-scopeTarget">ISSUE_IN_TRANSITION</arg>
<arg name="scopeDestination-jql"></arg>
<arg name="class.name">com.googlecode.jsu.workflow.function.UpdateIssueCustomFieldPostFunction</arg>
<arg name="scopeSource-jql"></arg>
</function> |
|
...
Preconditions in JSU Cloud are built-in as a part of the post - function. You can add as many preconditions inside a post-function. But in JSU Server preconditions are implemented as a separate post - function which that acts as preconditions. All the preconditions from JSU Cloud are available in JSU Server as well, but they need different configurations.
Preconditions in JSU Server/Cloud |
Date Compare (JSU) |
Date Expression Compare (JSU) |
Date Window (JSU) |
Fields Required (JSU) |
JQL (JSU) |
Linked Status (JSU) |
Regular Expression Check (JSU) |
User Is In Any Groups (JSU) |
User Is In Any Roles (JSU) |
User Is In Custom Field (JSU) |
Value Field (JSU) |
...
Workflow Name | Jira Cloud Class-Name | JSU Class-Name (Jira Server) |
---|
Conditions |
|
|
User Is In Any Group | com.atlassian.jira.workflow.condition.UserInAnyGroupCondition | com.googlecode.jsu.workflow.condition.UserIsInAnyGroupsCondition |
User Is In Any Project Role | com.atlassian.jira.workflow.condition.InAnyProjectRoleCondition | com.googlecode.jsu.workflow.condition.UserIsInAnyRolesCondition |
User Is In Custom Field | com.atlassian.jira.workflow.condition.UserIsInCustomFieldCondition | com.googlecode.jsu.workflow.condition.UserIsInCustomFieldCondition |
Value Field | com.atlassian.jira.workflow.condition.ValueFieldCondition | com.googlecode.jsu.workflow.condition.ValueFieldCondition |
Validators |
|
|
Date Compare Validator | com.atlassian.jira.workflow.validator.DateFieldValidator | com.googlecode.jsu.workflow.validator.DateCompareValidator & com.googlecode.jsu.workflow.validator.DateExpressionCompareValidator |
Date Window Validator | com.atlassian.jira.workflow.validator.WindowsDateValidator | com.googlecode.jsu.workflow.validator.WindowsDateValidator |
Field Required Validator | com.atlassian.jira.workflow.validator.FieldRequiredValidator | com.googlecode.jsu.workflow.validator.FieldsRequiredValidator |
Regular Expression Check | com.atlassian.jira.workflow.validator.RegexpFieldValidator | com.googlecode.jsu.workflow.validator.RegexpFieldValidator |
Post - Functions |
|
|
Clear Field Value | com.atlassian.jira.workflow.function.issue.ClearFieldValuePostFunction | com.googlecode.jsu.workflow.function.ClearFieldValuePostFunction |
Copy Value From Other Field | com.atlassian.jira.workflow.function.issue.CopyValueFromOtherFieldPostFunction | com.googlecode.jsu.workflow.function.CopyValueFromOtherFieldPostFunction |
Update Issue Custom Field | com.atlassian.jira.workflow.function.issue.UpdateIssueCustomFieldPostFunction | com.googlecode.jsu.workflow.function.UpdateIssueCustomFieldPostFunction |
Mapping between Jira Cloud Modules
...
and JSU Server
The following description describes all the attributes which need to be mapped between the Jira Cloud and Jira Server Workflow functionality.
...
The Jira Cloud 'Date Compare Validator' combines 2 two JSU Date Compare Validators which are:
Date Compare Validator (compareTypeField = true)
Date Expression Compare Validator (compareTypeField = false)
which of the 2 two Validators to use is defined by the Jira Cloud argument name 'compareTypeField'
...
All argument names are the same between Jira Cloud and Jira Server. Argument
Arg Name: Jira Cloud | Arg Name: Jira Server |
---|
Example Code Block |
---|
<validator name="" type="class">
<arg name="class.name">com.atlassian.jira.workflow.validator.DateFieldValidator</arg>
<arg name="compareTypeField">true</arg>
<arg name="conditionSelected">3</arg>
<arg name="includeTimeSelected">true</arg>
<arg name="date1Selected">customfield_10017</arg>
<arg name="date2Selected">customfield_10022</arg>
</validator> |
| Example Code Block |
---|
<validator name="" type="class">
<arg name="class.name">com.googlecode.jsu.workflow.validator.DateCompareValidator</arg>
<arg name="conditionSelected">1</arg>
<arg name="includeTimeSelected">2</arg>
<arg name="date1Selected">created</arg>
<arg name="date2Selected">created</arg>
</validator> |
|
...
Arg Name: Jira Cloud | Arg Name: Jira Server |
---|
Example Code Block |
---|
<validator name="" type="class">
<arg name="class.name">com.atlassian.jira.workflow.validator.RegexpFieldValidator</arg>
<arg name="fieldSelected">description</arg>
<arg name="expressionSelected">\d</arg>
</validator> |
| Example Code Block |
---|
<validator name="" type="class">
<arg name="class.name">com.googlecode.jsu.workflow.validator.RegexpFieldValidator</arg>
<arg name="fieldSelected">versions</arg>
<arg name="expressionSelected">\d</arg>
</validator> |
|
Post
...
Function Mapping: Clear Field Value
All argument names are the same between Jira Cloud and Jira Server.
Arg Name: Jira Cloud | Arg Name: Jira Server |
---|
Example Code Block |
---|
<function type="class">
<arg name="class.name">com.atlassian.jira.workflow.function.issue.ClearFieldValuePostFunction</arg>
<arg name="full.module.key">com.atlassian.jira.plugin.system.workflowclearFieldValue-function</arg>
<arg name="field">assignee</arg>
</function> |
| Example Code Block |
---|
<function type="class">
<arg name="class.name">com.googlecode.jsu.workflow.function.ClearFieldValuePostFunction</arg>
<arg name="full.module.key">com.googlecode.jira-suite-utilitiesclearFieldValue-function</arg>
<arg name="field">comment</arg>
</function> |
|
Post
...
Function Mapping: Copy Value From Other Field
Arg Name: Jira Cloud | Arg Name: Jira Server |
---|
Example Code Block |
---|
<function type="class">
<arg name="class.name">com.atlassian.jira.workflow.function.issue.CopyValueFromOtherFieldPostFunction</arg>
<arg name="sourceField">assignee</arg>
<arg name="destinationField">assignee</arg>
<arg name="copyType">same</arg>
</function> |
| Example Code Block |
---|
<function type="class">
<arg name="sourceField">assignee</arg>
<arg name="class.name">com.googlecode.jsu.workflow.function.CopyValueFromOtherFieldPostFunction</arg>
<arg name="destinationField">customfield_10101</arg>
</function> |
|
Post
...
Function Mapping: Update Issue Custom Field
All argument names are the same between Jira Cloud and Jira Server.
...