As outlined in our Workflow Guide, fields are used to sync records must be based on fields that live on those records directly.
This often can lead to issues within CRM systems where Contacts are often associated to Company type records since most customers want to segment what contacts they sync to their other systems based on fields that live on the Company Object and not the Contact Object. While some CRM systems allow you to set up automation to copy values from one record to another, ConnectWise does not have an available option for this task.
An available workaround is to use Bedrock to move data between Contact and Company objects in ConnectWise. Essentially, we are going to be using Bedrock to "sync ConnectWise on itself" in order to attach the needed fields to the proper objects. Follow the steps below to make this happen. For this example, we want to sync any Contacts associated to Clients.
Step 1. Create a custom text field on the Contact called "Company_Type"
The first step is to create a custom text field on the Contact object. This will be the destination for the field that we want to use for filtering that currently lives on the Company object. Remember our example is using a field called Company_Type, but you can use this method for any field that needs to be pulled down.
Please reference this ConnectWise help article if unfamiliar with creating custom fields. https://docs.connectwise.com/ConnectWise_Documentation/090/020/070/038
Step 2. Add New Contact Mapping in Bedrock
The goal of this step is to create the mapping that will bring the Company_Type value from the Company object and attach it to our recently created custom field Company_Type that is attached to the Contact object. The Contact Mapping in Bedrock that we will use to sync ConnectWise to itself may look a little unusual since we are only syncing data from one object to another object in the same system.
It is important to note that this will need to be created as a new Contact Mapping, even if one already exists. This will mean that your mappings screen will contain two distinct Contact Mappings. You will want to place this mapping below your 'main/initial' Contact Mapping. The reason for this is that Bedrock will treat each of these mappings as separate operations, which will become important later in this guide when we set up conditions. Our mapping is set up like this:
Step 3. Add Fields to This New Mapping and Set Conditions
Now, in the new Contact Mapping, map the two fields together ensuring that the Company_Type field that lives on the Company > Contact relationship is first in the list. The second row will contain the new custom Company_Type field that is only attached to the Contact.
This will look a bit funny compared to other mappings, but remember that we're using Bedrock to link ConnecrtWise back on itself! Your mapping will look something like this:
In addition to the field mapping above that will be passing the value down from the Company to the custom Contact field, you will want to map the following fields for ConnectWise:
- Contact - "Email"
- Contact - "First Name"
- Contact > Company - "Status"
- Contact > Company - "Name"
- Contact > Company - "Address Line 1"
VERY IMPORTANT: Only Map ConnectWise fields in this mapping. Do not map any fields that are associated to the other system, even if there is a required field warning saying that it should be mapped.
Once you have the mappings setup, click on the Conditions tab and here you want to simply say that if a ConnectWise Contact has Any Field that is Not Empty:
Step 4. Set Conditions on the Main Mapping
Recall that the point of this exercise is to sync converted contacts back to HubSpot. We will want to apply conditions to the initial Contact Mapping to ensure that we are only getting the data being sent back to HubSpot when we want it to be. In this example, we are only looking to send Contacts back in to HubSpot from ConnectWise after they have become either Clients or Prospects, all while letting all HubSpot contacts make it through the mapping. We will use conditions on the initial contact mapping to do this. To get our above example to work, we need to structure our conditions like this:
Step 5. Set Contact Workflow Rule
Recall that Workflow Rules are one of the ways that Bedrock determines if a record is in a good position to sync. By the time a record has reached the workflow stage, Bedrock has recognized a change to a mapped field, and has noted that the record has passed any mapping-level conditions (like the ones we just set up above).
Now, since we have some restrictive mapping conditions tied to the main mapping for syncing CW Contacts to your other system, you actually want to leave your Workflow rules for syncing ConnectWise contacts rather open ended. At most you could setup a rule that says if the Contact is Inactive, don't let it sync. But otherwise, you want all or most of your contacts passing a Workflow so that at the very least we pass down the fields from the Company to the Contact in the first mapping that they'll pass through.
Note: The InactiveFlag on the Contact in ConnectWise is tied to the Active / Inactive checkboxes on the contact record. This is just a boolean field and when it is a true, it means the record is inactive so when you want to only sync Active contacts, you want to set the rule to be where this field is False.
Step 6. Run a Test
As with most mapping/sync changes in Bedrock, we recommend drumming up a quick test to make sure that everything is working according to plan. This could be done a couple of ways. If you have implemented an 'on demand trigger field', this could be used to force a desired contact record back through Bedrock without making changes to any of the 'real' mapped fields. Alternatively, you could add another logic layer to the workflow rule that is highly restrictive. For example, you could greenlight a singular record based on email to make it through the systems.
Because we are using Bedrock to sync ConnectWise on itself, you will need to wait for two sync runs to occur before expecting to see the records in HubSpot. This is due to the way the logic is set up. On the first sync for a 'vanilla' contact, Bedrock will search the initial Contact Mapping for the conditions that are set. Not finding them to be met, the system will go through the other mappings until reaching the secondary contact mapping, which is the one that is responsible for pulling Company_Type from the Company record on to the Contact record. This mapping will execute. Then, on the next sync run, the conditions on the initial mapping will be met, and the record will be sent over to HubSpot.