Our goal is to create an Automation for Jira DC that creates one Initiative and then fans out multiple Epics/Stories across different projects from a single request, based on several Yes/No “impacted area” fields, while avoiding duplicate Initiatives.
General Rule Information Jira Data Center xxxx Impacted Areas = 11 binary yes/no select lists created as 11 separate fieldsCustom Field 18503 = “Changes Needed.” Customfield_11902 = Parent Link (Epic → Initiative)Customfield_10006 = Epic Link (Story → Epic)ProjectId 28100 = Strategic InitiativesProjectId 30300 = impacted area delivery project
We worked with support for guidance and landed on the best path, which was more than one rule. We so far have:
Note / known issue (not intentional): In the single-impacted-area framework above, the ACSIS History sub-branch creates a Story, but the rule then continues on to create the Initiative → Epic → Story chain as well. That means when customfield_18700 = "ACSIS History" we currently end up with two Stories (one linked to the request and one linked to the Epic). This is not the intended behavior—we want only one Story path to run (either “story-only” or the Initiative/Epic/Story path), so we’re likely missing an ELSE / stop / guard structure there.
Where we need help:
We are struggling to convert this into a rule for multiple impacted areas.
Example: If Impacted Area A = Yes and Impacted Area B = Yes on the same request, we expect 1 Initiative + 2 Epics + 2 Stories, but we currently get 2 Initiatives + 2 Epics + 2 Stories.
We have considered:
Questions:
Rule JSON
If it can help, the full JSON of our current progress is:
{"rules":[{"id":213,"clientKey":"com.codebarrel.tenant.global","name":"ACSIS History Impacted","state":"ENABLED","canOtherRuleTrigger":true,"notifyOnError":"FIRSTERROR","authorAccountId":"b15635","actorAccountId":"b15635","created":1772210760677,"updated":1772212970127,"trigger":{"id":"8947","component":"TRIGGER","schemaVersion":1,"type":"jira.issue.event.trigger:transitioned","value":{"synchronous":false,"eventKey":"jira:issue_updated","issueEvent":"issue_generic","fromStatus":[{"type":"ID","value":"3"}],"toStatus":[{"type":"ID","value":"10001"}]},"children":[],"conditions":[]},"components":[{"id":"8948","component":"CONDITION","schemaVersion":1,"type":"jira.comparator.condition","value":{"first":"{{issue.customfield_18503.value}}","second":"Yes","operator":"EQUALS"},"children":[],"conditions":[]},{"id":"8949","component":"CONDITION","schemaVersion":1,"type":"jira.condition.container.block","children":[{"id":"8950","component":"CONDITION_BLOCK","parentId":"8949","schemaVersion":1,"type":"jira.condition.if.block","value":{"conditionMatchType":"ALL"},"children":[{"id":"8952","component":"ACTION","parentId":"8950","schemaVersion":6,"type":"jira.issue.create","value":{"operations":[{"fieldId":"summary","fieldType":"summary","type":"COPY","value":{"type":"COPY","value":"current","additional":"summary"}},{"fieldId":"description","fieldType":"description","type":"COPY","value":{"type":"COPY","value":"current","additional":"description"}},{"fieldId":"project","fieldType":"project","type":"SET","value":{"type":"ID","value":"30300"}},{"fieldId":"issuetype","fieldType":"issuetype","type":"SET","value":{"type":"ID","value":"10001"}},{"fieldId":"issuelinks","fieldType":"issuelinks","type":"SET","value":{"issue":{"type":"COPY","value":"trigger"},"linkType":"inward:10000"}}],"sendNotifications":false,"useLegacyRendering":false},"children":[],"conditions":[]},{"id":"8953","component":"ACTION","parentId":"8950","schemaVersion":1,"type":"codebarrel.action.log","value":"Story: {{createdIssue.key}}","children":[],"conditions":[]}],"conditions":[{"id":"8951","component":"CONDITION","conditionParentId":"8950","schemaVersion":1,"type":"jira.comparator.condition","value":{"first":"{{issue.customfield_18700.value}}","second":"ACSIS History","operator":"EQUALS"},"children":[],"conditions":[]}]}],"conditions":[]},{"id":"8954","component":"ACTION","schemaVersion":6,"type":"jira.issue.create","value":{"operations":[{"fieldId":"summary","fieldType":"summary","type":"COPY","value":{"type":"COPY","value":"current","additional":"summary"}},{"fieldId":"description","fieldType":"description","type":"COPY","value":{"type":"COPY","value":"current","additional":"description"}},{"fieldId":"project","fieldType":"project","type":"SET","value":{"type":"ID","value":"28100"}},{"fieldId":"issuetype","fieldType":"issuetype","type":"SET","value":{"type":"ID","value":"12705"}},{"fieldId":"issuelinks","fieldType":"issuelinks","type":"SET","value":{"issue":{"type":"COPY","value":"trigger"},"linkType":"inward:10003"}}],"sendNotifications":false,"useLegacyRendering":false},"children":[],"conditions":[]},{"id":"8955","component":"ACTION","schemaVersion":1,"type":"codebarrel.action.log","value":"Initiative: {{createdIssue.key}}","children":[],"conditions":[]},{"id":"8956","component":"ACTION","schemaVersion":1,"type":"jira.create.variable","value":{"id":"_customsmartvalue_id_1772209174764","name":{"type":"FREE","value":"InitiativeKey"},"type":"SMART","query":{"type":"SMART","value":"{{createdIssue.key}}"},"lazy":false},"children":[],"conditions":[]},{"id":"8957","component":"ACTION","schemaVersion":6,"type":"jira.issue.create","value":{"operations":[{"fieldId":"summary","fieldType":"summary","type":"COPY","value":{"type":"COPY","value":"current","additional":"summary"}},{"fieldId":"description","fieldType":"description","type":"COPY","value":{"type":"COPY","value":"current","additional":"description"}},{"fieldId":"project","fieldType":"project","type":"SET","value":{"type":"ID","value":"30300"}},{"fieldId":"issuetype","fieldType":"issuetype","type":"SET","value":{"type":"ID","value":"10000"}},{"fieldId":"customfield_16200","fieldType":"com.atlassian.jira.plugin.system.customfieldtypes:select","type":"SET","value":{"type":"SMART","value":"{{issue.customfield_16200.value}}"}}],"advancedFields":"{\n“fields”:{\n“customfield_11902”: {“value”:”{{InitiativeKey}}”}\n}}","sendNotifications":false,"useLegacyRendering":false},"children":[],"conditions":[]},{"id":"8958","component":"ACTION","schemaVersion":1,"type":"codebarrel.action.log","value":"Epic: {{createdIssue.key}}","children":[],"conditions":[]},{"id":"8959","component":"ACTION","schemaVersion":6,"type":"jira.issue.create","value":{"operations":[{"fieldId":"summary","fieldType":"summary","type":"COPY","value":{"type":"COPY","value":"current","additional":"summary"}},{"fieldId":"description","fieldType":"description","type":"COPY","value":{"type":"COPY","value":"current","additional":"description"}},{"fieldId":"project","fieldType":"project","type":"SET","value":{"type":"ID","value":"30300"}},{"fieldId":"issuetype","fieldType":"issuetype","type":"SET","value":{"type":"ID","value":"10001"}},{"fieldId":"customfield_10006","fieldType":"com.pyxis.greenhopper.jira:gh-epic-link","type":"SET","value":{"type":"SMART","value":"{{createdIssue.key}}"}},{"fieldId":"customfield_16200","fieldType":"com.atlassian.jira.plugin.system.customfieldtypes:select","type":"COPY","value":{"type":"COPY","value":"current","additional":"customfield_16200"}}],"sendNotifications":false,"useLegacyRendering":false},"children":[],"conditions":[]},{"id":"8960","component":"ACTION","schemaVersion":1,"type":"codebarrel.action.log","value":"Story: {{createdIssue.key}}","children":[],"conditions":[]}],"projects":[{"projectId":"30000","projectTypeKey":"software"}],"labels":[],"tags
UPDATE:
Your current challenge stems from a synchronization and duplication issue inherent in Jira’s event-based automation. Here is a breakdown of the core problem:
The proposed JSON-driven solution shifts the rule from Hard-Coded Logic to Data-Driven Processing. Instead of telling Jira what to do for every specific field individually, you are giving Jira a map (the JSON) and a single set of instructions on how to read that map.
This ensures:
InitKey, EpicKey) that persist throughout the single execution.This structure allows you to use a single Create variable action at the start of your rule to define the entire "Blueprint" for the request.
Here is how that schema would look. It separates the "Global" parents (Initiative/Epic) from the "Conditional" children (Impacted Areas).
{
"hierarchy": {
"initiative": { "project": "28100", "typeId": "12705", "prefix": "INIT:" },
"epic": { "project": "30300", "typeId": "10000", "prefix": "EPIC:" }
},
"impactedAreas": {
"customfield_18700": {
"name": "ACSIS History",
"project": "30300",
"typeId": "10001",
"prefix": "STORY:"
},
"customfield_18701": {
"name": "Billing Systems",
"project": "30300",
"typeId": "10001",
"prefix": "STORY:"
}
}
}UPDATE:
I have used this general data-driven blueprint pattern previously to manage scenarios that would otherwise require dozens of separate automation rules or incredibly deep, nested conditional logic. By treating the JSON as a configuration layer, you decouple the "what" (your business data) from the "how" (the Jira automation engine). This makes the system significantly easier to scale—adding a 12th or 13th impacted area becomes a simple text update rather than a structural rebuild of the rule.
A quick note on implementation: While the logic and JSON structure provided above follow proven architectural guidelines for Jira Cloud Jira Data Center, please treat this as a conceptual framework. This hasn't been pulled from a live, finished production environment, so you will want to validate the specific field IDs and smart value syntax within your own environment to ensure it handles your specific global transitions and project permissions correctly.
Regards,
Ben
Ben, thanks for this indepth analysis.
Here is a different description of what we are trying to accomplish:
Trigger: Requestor moves Request issue to Submitted/Done on the Request Project
Automation:
2. If only one area is impacted (Changes Needed = yes)
A. If the impacted area is the same as the Requesting Business Area:
Create story on impacted area's project
Properly "link" story to the request issue (relates to)
B. The impacted area is NOT the same as the Requesting Business Area:
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Does this refactored interpretation below align with your requirement(s)?
If it's getting close I could throw together a working example to demonstrate.
The goal is to dynamically choose between two structural patterns when the request is submitted and automation rule triggered:
Using the Data-Driven JSON approach mentioned earlier, you can handle these logic branches cleanly within a single rule:
By defining the logic this way, you avoid "race conditions" because the decision of which pattern to follow is made at the very start of the rule execution, before any issues are created.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
What is the source of the information you are posting? As a reminder, when posting AI-generated content, the content should be validated and the source described in the text of the post. To learn more, please see the community guidelines:
https://community.atlassian.com/forums/custom/page/page-id/rules-of-engagement
Several things in the described approach do not exist in automation rules:
Kind regards,
Bill
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
If you think you can throw together an example, that would be most helpful.
Thanks
Dan
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
We also have ScriptRunner installed if you think this would be easier to build and manage using that tool.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi @Bill Sheboy
I've amended my original answer content to avoid current and potential future confusion.
I appreciate your quick response in pointing out my oversight in feature parity between DC and Cloud. Please assume positive intent with my original answer.
I will put it on my list to publish a formal "how-to" article on data-driven automations in Jira Cloud as they're an extremely powerful way to avoid complex if/else blocks and multiple rules. I'll cover off areas including detailed explanations on using JSON in automations, iterating lists of data, variable scoping etc.
Cheers,
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
If you think you can throw together an example, that would be most helpful.
I'll take a look at alternate options using native Jira DC automation capabilities, as there is limited potential for some "data-driven" concepts similar to my original guidance. DC does lack advanced branching support though, which might be a show stopper for "native" options.
We also have ScriptRunner installed if you think this would be easier to build and manage using that tool.
ScriptRunner for Jira DC has the opposite problem: You can achieve a lot more in DC ScriptRunner compared with its cloud counterpart. Here is some advice in this respect:
In closing... I'd also like to encourage the re-consideration of the "business process" attempting to be solved by an automation. When an automation is getting rather curly, this may be indicating that underlying processes could potentially be reworked for greater overall simplicity.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Rather than posting a text description or partial JSON for a rule, I recommend posting:
Those will provide better context to help understand the symptoms. Thanks!
Next, I am having trouble following your exact scenario's variations. It may help to provide a GIVEN ... WHEN ... THEN ... description of the scenario, and some specific examples of any variations.
Until we see those, you have more limitations with Jira Data Center automation than with Cloud. A couple of different approaches to create multiple levels of issues based on a single event / trigger are:
Kind regards,
Bill
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Bill,
Please see my reply to Ben above to see if that helps better describe the use case.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Thanks for the additional information on your scenario, @Dan Leatherwood as it seems quite challenging to solve with Jira Data Center (DC) automation...let alone with Cloud.
One way to possibly solve the variable number of issues for your impact areas is using multiple rules and if / else blocks. This is needed because Jira DC does not have Advanced Branches. The general approach would be:
This approach should eliminate duplicate Initiatives as the if / else blocks select only what is needed one-by-one before callout out to the other rule.
Although this approach may work, it may be brittle and complicated to maintain...particularly if something causes an error to interrupt the flow.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.