How to Fix A Broken Celigo Real-Time Data Flow from Salesforce

By Bobby Gill on December 7, 2021

A frustrating issue that I’ve run into with using the Celigo iPaaS tool for syncing data from Salesforce to a Postgres database is that sometimes the real-time data flow from Salesforce stops working. This usually happens after I disable the real-time flow within Celigo and then try to re-enable it which ends up with the Salesforce real time synchronization flow not working or responding to any data changes made in Salesforce. In this post, I will show you how to quickly resolve this issue and get Salesforce real-time syncs back up and running in Celigo.

What is Celigo?

Celigo brands itself as a “iPaaS” for enterprises. An iPaaS is the moniker used to denote what is called an “integration platform as a service”. That’s a fancy way of saying “cloud based data pump”. Celigo provides the ability to respond implement data flows from a myriad of systems to each other, leveraging a pretty robust UI and a Javascript extension language to enable a wide range of data integration scenarios. If you are familiar with the Boomi product, you can think of Celigo as a competitor to that.

A multi-step real-time data flow from Celigo to Postgres and a REST API.

A multi-step real-time data flow from Celigo to Postgres and a REST API.

Given my history working on true state-based data synchronization products like Microsoft’s Forefront Identity Manager (FIM) and its older-brother Microsoft Identity Integration Services (MIIS), one thing to make clear right away is that Celigo is not a state based synchronization engine. It has no notion of what the true state of data in downstream systems should be, nor does it claim to do so. Do not try to use Celigo to enforce data compliance or implement hiring/firing flows in heterogeneous systems, as its stateless nature makes it very unreliable for those use cases.  Celigo is simply a pump that responds to either real-time events in connected systems or scheduled tasks to execute a workflow. Taken for what it is, I actually think Celigo is a very well designed product that offers a really good mix of out UI configuration with extension points at all the right places.

How do Celigo Real-Time Flows from Salesforce Work?

Celigo offers real-time synchronization for a selected set of connectors, which means that rather then being controlled by a schedule, the data flow triggers immediately upon change of data in a downstream system, one of those being Salesforce. Real-time synchronization that is initiated by changes in Salesforce data is achieved by Celigo through the use of a APEX trigger that is defined on each object in Salesforce. Here is an example of a APEX trigger defined on the Lead object in Salesforce that is used to initiate a real-time flow on the Lead object.

trigger TriggerLead on Lead (after insert, after update) 
  {
  System.debug('Lead insert/update trigger fired');
  integrator_da__.RealTimeExportResult res = integrator_da__.RealTimeExporter.processExport(); 
}

When a change is made on any object in Salesforce that has the Celigo trigger defined on it, this then will trigger Celigo logic that is installed on the Salesforce instance to forward the data change to the Celigo cloud instance. Within Salesforce, Celigo uses a custom object named “integrator_da__Real_Time_Sync__c” to control which data changes in Salesforce is forwarded to Celigo. When you create a new real-time synchronization flow in Celigo from Salesforce, Celigo creates a new integrator_da__Real_Time_Sync__c instance to hold that definition within Salesforce. Likewise, when you enable/disable a real-time sync flow within Salesforce, it then propagates that change to the associated integrator_da__Real_Time_Sync__c object and the field named “disabled”. The root issue of the problem with real-time flows not working from Salesforce is that sometimes when a flow is enabled/disabled in Celigo, the disabled flag in Salesforce is not changed to match the status in Celigo.

Fixing a Broken Celigo Real-Time Flow from Salesforce

To fix a real-time synchronization flow from Salesforce that has stopped working, the solution is to manually enable the integrator_da__Real_Time_Sync__c object, as it is likely that it has been disabled, but for whatever reason not enabled again by Celigo.

1.) Login to Salesforce and access the list of real time synchronization objects (integrator_da__Real_Time_Sync__c) defined by using the following URL: https://<salesforce url>/lightning/o/integrator_da__Real_Time_Sync__c/list

2.) You will see a list of object instances (see above), each one corresponding to a real-time flow defined in Celigo.

3.) Identify the integrator_da__Real_Time_Sync__c object that corresponds to the flow in Celigo. This is involves a bit of elbow grease as the easiest way to identify the integrator_da__Real_Time_Sync__c object corresponding to a Celigo flow is to look at the SObject Type defined on the integrator_da__Real_Time_Sync__c object. So if your real time synchronization flow on changes to Lead objects is broken, then look for the integrator_da__Real_Time_Sync__c object with SObject Type ‘Lead’.

4.) Once identified, the solution is to uncheck the “disabled” flag checkbox within the integrator_da__Real_Time_Sync__c and save it.

Voila! Your real-time flow from Salesforce should not be working again.