Salesforce to Jira: Using FME for Business Automation

I mentioned in my previous post that, at my current organization, we had made good use of FME in processing non-spatial business data. In this post, I’ll provide an example of that. One of the functions in my department is professional services. Our professional services team, like similar teams in many product companies, doesn’t capture its own work. It is dependent on our sales team to capture work and communicate when the deal has closed so work can begin. As we grew, and as we switched to fully remote during the pandemic, this communication often lagged, resulting in delays in starting work that had previously closed. We chose to tackle this problem with automation.

All of our sales activity is captured in Salesforce. When the status an opportunity object with a record type of Professional Services becomes “Closed/Won” then work on that job can begin. FME has a native reader and writer for Salesforce. Additionally, we use FME Cloud, in which a workspace can be configured as a webhook endpoint. So we configured a workflow in which, when a professional services opportunity became closed/won, a Salesforce automation made a webhook call to our FME workspace, passing the ID of the opportunity. FME took over from there.

The first step was to use the FME Salesforce reader to query the opportunity object out of Salesforce using the ID passed in via the webhook. We also queried the status as a data integrity check to ensure the opportunity had actually closed.

We also needed some information about the customer (Account) to which the opportunity was attached, so we did a subsequent call with a FeatureReader to get the relevant account object.

Next, we passed both the opportunity and the account through a FeatureMerger to combine the data and then an AttributeKeeper to filter down to only the attributes we needed. The next step is to create a new Jira issue for the new work.

FME does not have a Jira writer but, since Jira has a REST API, we used the HTTPCaller object to create the issue using the API.

As can be seen above, the HTTPCaller makes a POST to the Jira Issues API. You’ll notice that the request body can have “2 Possible Values.” Here, we use conditional logic based on whether opportunity has an hours estimate to select the request body content. Once this is determined, then the Jira API call is made and a new issue shows up in the Jira board.

Using this process, we were able to fully automate the creation of tickets from closed opportunities, speed the start of new jobs, and eliminate the need for manual communication about closed opportunities. FME plays a key role and, as can be seen, no code was needed to enable this workflow. While FME is well-known for its robust spatial capabilities, it is also quite powerful for non-spatial business automation.