Migration Instructions: Workflow Rules to Flows
This guide will help you migrate from Workflow Rules with Outbound Messages to Flows for syncing data to the external Daxtra
A Bullhorn Recruitment Cloud partner. One of the Search and Match / Resume Parsing services providers integrated with Bullhorn Recruitment Cloud Integration Service (DIS). This migration applies to the following Salesforce objects:
-
Contact → Flow: Send To DIS Contact
-
Call List Member (CallListMember__c) → Flow: Send To DIS CallListMember
-
Job (Job__c) → Flow: Send To DIS Job
-
Contact Document (ContactDocument__c) → Flow: Send To DIS ContactDocument
Complete prerequisites first to determine what objects are synced to Daxtra and what fields are used. Make sure necessary permission set is assigned
Prerequisites: Identify Your Current Configuration
Before proceeding with the migration, you need to understand your existing current Workflow Rule and Outbound Message configuration.
Find Your Active Workflow Rules
-
Navigate to Setup > Workflow Rules
-
In the "Object" filter, select one of these objects:
-
Contact
-
Call List Member (TR1__Call_List_Member__c)
-
Job (TR1__Job__c)
-
Contact Document (TR1__ContactDocument__c)
-
-
Look for workflow rules with these naming patterns:
-
trcm_syncContact_rule or syncContact (for Contact)
-
trcm_syncCalllistMember_rule or syncCallListMember(for TR1__Call_List_Member__c)
-
trcm_syncVacancy_rule or syncVacancy (for TR1__Job__c)
-
trcm_syncContactDocument_rule or syncContactDocument (for TR1__ContactDocument__c)
-
These workflow rules might be Managed (from TR1 package - shown with a lock icon and namespace TR1) or Unmanaged (custom configurations you created - no lock icon or namespace).
Analyse Your Workflow Rule Logic
For each active workflow rule you identified, you need to find out if the configuration deviates from original Bullhorn Recruitment Cloud version. Review Rule Criteria and the Outbound Message Configuration (Fields to Send).
| Object | Default Formula Criteria | Default Fields to Send |
|---|---|---|
|
Contact |
AND( OR(!ISCHANGED(TR1__SMWS_Date_Time__c),ISCHANGED(TR1__External_Candidate |
|
|
Call list Member |
!ISBLANK(TR1__Contact_Daxtra_Id__c) |
|
|
Vacancy/Job |
AND( !ISCHANGED(TR1__SMWS_Date_Time__c), !ISBLANK(TR1__Client_Job_Description__c), LEN(TR1__Client_Job_Description__c) > 0, OR( TR1__SMWS_Status_Code__c='Queued', ISNEW() ,ISCHANGED( CreatedDate),ISCHANGED( Id),ISCHANGED( LastModifiedDate),ISCHANGED( TR1__Account_Name__c),ISCHANGED( TR1__City__c),ISCHANGED( TR1__Client_Description__c),ISCHANGED( TR1__Client_Job_Description__c),ISCHANGED( TR1__Division__c),ISCHANGED( TR1__External_Vacancy_Id__c),ISCHANGED( TR1__Industry__c),ISCHANGED( TR1__Job_Title__c),ISCHANGED( TR1__Level__c),ISCHANGED( TR1__Open_Date__c),ISCHANGED( TR1__Primary_Background__c),ISCHANGED( TR1__State_Area__c),ISCHANGED( TR1__Regional_Area__c),ISCHANGED( OwnerId),ISCHANGED( Name),ISCHANGED( TR1__Account__c),ISCHANGED( TR1__Sourcing_Recruiter__c),ISCHANGED( TR1__Contact__c),ISCHANGED( TR1__Hiring_Manager__c),ISCHANGED( TR1__Fee_Percentage__c),ISCHANGED( TR1__Primary_Matching_Requirement__c),ISCHANGED( TR1__Secondary_Matching_Requirement__c),ISCHANGED( TR1__Additional_Matching_Requirement__c),ISCHANGED( TR1__Final_Matching_Requirement__c),ISCHANGED( TR1__Certification__c),ISCHANGED( TR1__Education__c),ISCHANGED( TR1__Computer_Systems__c),ISCHANGED( TR1__Management_Experience__c),ISCHANGED( TR1__Other_Experience__c),ISCHANGED( TR1__Status__c),ISCHANGED( TR1__Company |
|
|
Contact Document |
AND(!ISCHANGED(TR1__SMWS_Date_Time__c), TR1__SMWS_Status_Code__c !='100', TR1__isDefault__c == true, !ISBLANK(TR1__Internal_URL__c), !CONTAINS(TR1__Internal_URL__c, "file=00P"), !ISBLANK(TR1__External_Candidate_Id__c) ) |
|
Make sure Daxtra Integration permission set is assigned to all users who can sync records.
-
Go to Setup > Permission Sets
-
Choose Daxtra Integration(TR1.Daxtra_Integration)
-
Click to Manage Assignments and check the user list.
-
Click Add assignment if any user is missing.
Identify MW endpoint URL to be used for outbound messages
-
Open any of the Outbound messages analysed in previous steps.
-
Write down Endpoint
When two systems integrate, an endpoint is one end of a communication channel. URL from an outbound message configuration page.
Step 1: Configure Flow Fields and Logic (If Customized)
Skip this step/section entirely if there was no deviation identified as part of previous step.
For each object with customization:
-
Navigate to Setup > Flows
-
Find the corresponding Flow:
-
Send To DIS Contact
-
Send To DIS CallListMember
-
Send To DIS Job
-
Send To DIS ContactDocument
-
-
Click on the Flow name (not Activate/Deactivate buttons).
-
Click Save As button (top right).
-
This creates a new version that you can customize
-
The new version will be an override (unmanaged version) of the managed Flow
-
1.1 Configure Field Mappings
-
In the Flow Designer, locate the Constant element named {Object_Name}_Fields_For_DIS.
-
Example: Contact_Fields_For_DIS
-
-
Click on the constant element to edit it.
-
Update the Value with your comma-separated list of Field API
API, or Application Programming Interface, is used by customers to create custom career portals or to take advantage of Data Mirror/DataMart. Bullhorn prefers to use REST API. Names from Step 0 "Fields to Send"-
Include both standard and custom fields
-
Use Field API Names exactly as documented in Step 0
-
Copy
Example
FirstName,LastName,Email,TR1__Function__c,TR1__Primary_Background__c,TR1__External_Candidate_Id__c,CustomField__c
-
-
Click Done.
1.2 Update Flow Conditions
-
In the Flow Designer, locate the Formula element named "Condition".
-
Click on the formula element to edit it.
-
Review the formula - it should contain multiple ISCHANGED() checks connected with OR().
-
Add or remove field references to match your tracked fields from Step 0.
-
For each field in your "Tracked Fields" list, ensure there's a corresponding ISCHANGED($Record.FieldName__c) entry.
-
Copy
Example
OR(
ISCHANGED($Record.FirstName),
ISCHANGED($Record.LastName),
ISCHANGED($Record.Email),
ISCHANGED($Record.TR1__Function__c),
ISCHANGED($Record.TR1__Primary_Background__c),
ISCHANGED($Record.CustomField__c) ← Add this if CustomField__c is in your tracked fields
)
-
-
-
Click Done.
1.3 Save & Activate Your Override
-
Click Save (top right).
-
Add a description like "Customized field mappings and business logic for DIS sync".
-
IMPORTANT: Click Activate to make this version the active override.
-
Verify the Flow shows as "Active" with your version number.
Repeat for Each Customized Object
Complete Steps 1.1, 1.2, and 1.3 (if applicable) for each object where you have custom configurations.
Step 2: Add Remote Site Settings
-
In the Quick Find box on the left, type "Remote Site Settings".
-
Click on Remote Site Settings under the "Security" (or "Security Controls") section.
-
Click the New Remote Site button.
-
Fill in the fields:
-
Remote Site Name: Enter a descriptive name, for example, TalentRover_Data_API. (Note: This name cannot have spaces).
-
Remote Site URL: Enter Endpoint URL identified in Pre-requisites, Part D
-
Active: Make sure this checkbox is checked.
-
Description: (Optional) Add a description, e.g., "TalentRover Data API Endpoint".
-
-
Click Save.
Step 3: Activate New Flows (Before Deactivating Workflows)
If you’ve activated flow overrides in Step 1, they are already activated.
-
Navigate to Setup > Flows
-
Activate the following Flows:
-
Send To DIS Contact
-
Send To DIS CallListMember
-
Send To DIS Job
-
Send To DIS ContactDocument
-
Step 4: Deactivate Old Workflow Rules
Only AFTER all Flows are active, deactivate the old workflow rules.
-
Navigate to Setup > Workflow Rules.
-
Find and deactivate these rules (if they exist and are active):
-
trcm_syncContact_rule or syncContact
-
trcm_syncCalllistMember_rule
-
trcm_syncVacancy_rule or syncVacancy
-
trcm_syncContactDocument_rule or syncContactDocument
-
-
To deactivate, click on the workflow rule name.
-
Click Edit.
-
Uncheck Active.
-
Click Save.
Never both Workflows and Flows active simultaneously for the same object. This will cause duplicate syncs to DIS.