I’ve now finished with Zapier support (Unable to help hence why I created this...), and the workaround I’m about to explain below is now a solution in my environment.
Salesforce Changes
1. Within salesforce create a new field called “Zapier_Comments” (Text Area or Text Area (Long) or Text Area (Rich)) within the Case object. This field should not be displayed on a lightning record page or a page layout.
2. Create a “Record-Triggered” Flow, Trigger the Flow When: “A record is created”.
3. Create a “Update Records” action.
4. In “*How to Find Records to Update and Set Their Values” select: Specify conditions to identify records, and set fields individually
5. Select the “Case” object.
Filter Case Records:
Condition Requirements to Update Records: “CaseID” Equals “Parent ID (Case) > Case ID”
6. Set Field Values for the Case Records:
Field: “Zapier_Comments” ← Value “Triggering FeedItem > Body”.
JIRA Changes
1. Create a new global field called “SFDC Case Number”.
2. Create another global new field called “SFDC Case URL ID”.
Both of the above fields should be hidden until populated.
Salesforce Case Creation
- This all starts with the creation of a case and a specific field that would highlight the need for the case to be logged also as a JIRA story with the aid of the initial Zapier workflow (ZAP1).
- Within the case we would create two new fields (JIRA_Numer & JIRA_Status) we would use these to identify the specific case in JIRA when updating comments for this case.
- The JIRA_Numer & JIRA_Status are a critical part of the comments structure and are populated back to Salesforce when a JIRA story has been created.
Zapier Comments From Salesforce to JIRA.
Based on the details of the above case that has been created (ZAP1) we would create another Zapier workflow for the comments (ZAP2).
- As the comments in a salesforce case are "Posts" for the purposes of what we are trying to achieve and for this we only use internal viewing posts so that clients via experience cloud cannot see them.
- One note on internal posts on a case is that the object is not part of a field in the case object but a seperate object called "Feed Item".
- ZAP2 therefore has a relative simple flow similar to ZAP1 but utilising the new field (“Zapier_Comments”).
1. Create a “Update Records” action. (Salesforce Object: "Case" and Field "Zapier_Comments")
2. Create a "Find Record" action. (Salesforce Object: "Case", Field to Search "Zapier_Comments", Search Value "(This should the selected field from within salesforce)")
3. Create a "Filter Conditions" action. (Only Continue if... "JIRA_Numer", "Exists")
4. The workflow then splits into the relevant JIRA board dependant on the type of case that is logged....
5. Then based on the "JIRA_Numer" we find the JIRA story (Find Item, Salesforce field "JIRA_Numer").
6. Use "Formatter" action, Transform (Convert HTML to Markdown) to remove the html component from the "Zapier_Comments" field and very importantly we add extra text "Update from Salesforce:"
7. Create a "Add Comment to issue" Issue (Use the Find Issue" and key from point 5)
Zapier Comments From JIRA (Setup on each individual board) to Salesforce.
We will call this ZAP3, and we start with a filter so that the comments we have added from Salesforce do not echo back to salesforce through this trigger.
1. Create a new widget for JIRA (New Comment).
2. Create a new widget for Salesforce (New Find Record) and Field to Search "JIRA_Numer" search value "Issue Key".
3. Create a "Filter Conditions" action. Only continue if "Body Plain Text" "Exists" AND "Body Plain Text" "(TEXT) Does not contain" "Update from Salesforce:" <-- very important.
4. Create a "Update Record" widget. Salesforce Object: "Case", Record to Update: "ID:" Internal comments: "The JIRA ticket has an update:" && "(Body Plain Text)"
I appreciate its a lot of info and I may of missed some bits but I hope it will give you are really good point in the right direction. This now works 100% in my environment.