How to Set up an Azure DevOps Salesforce Integration: The Comprehensive 2021 Guide

azure devops salesforce integration

Information continuously evolves and grows in organizations. This untapped information, if shared between teams using different applications like Azure DevOps and Salesforce, can increase business revenues and leave you with more satisfied customers. For this purpose, an Azure DevOps Salesforce integration seems like the best choice. 

Such integration would mean the information exchange between Azure DevOps and Salesforce is automatic, bi-directional, and in real-time, so data is consistently accessible and up-to-date.

This guide will introduce you to a step-by-step Azure DevOps Salesforce integration. It will also help you understand the benefits of such integration and present the key drivers for choosing the correct integration technology.

Note: In this guide, we have used an integration solution called Exalate for implementing an Azure DevOps Salesforce integration. We will learn more about it on the way!

Here is what we’re going to cover in this article:

Why Integrate Azure DevOps and Salesforce

Azure DevOps has been a game-changer for bringing the development and operation teams together. It facilitates an end-to-end DevOps toolchain for developing and deploying software programs. It aims to bridge the gap between the once siloed development, IT operations, engineering, and security teams, to help them collaborate and work together harmoniously. 

It has a gamut of applications supported through its marketplace

Salesforce is a popular Customer relationship management (CRM) tool used by sales, marketing, service, and IT teams to strengthen customer bonds and relationships. It aims to provide a complete customer overview through a single Salesforce interface. It is a robust, customizable, and scalable cloud-based platform that can fulfill most of your business needs. 

It too has a variety of best-in-class apps provided through AppExchange

A common trait you can observe here is that both these applications are built to bridge the gap between teams and bring them closer, be it development and operations or sales and marketing. Therefore, they can share information and build on each other’s expertise to achieve common business improvement goals. 

But this collaboration and communication between teams if not handled correctly can lead to a waste of time and effort of valuable human resources and will eventually reduce productivity. 

This is because information exchange between teams is generally carried out manually via phone calls and emails or through meeting notes or by switching between applications. Then it is further absorbed and updated in respective platforms manually. 

This causes costly manual data-entry errors in addition to misplaced, unused, redundant, and scattered information across different platforms. 

So how do we let these teams exchange data automatically without having to leave their familiar environment? 

An Azure DevOps Salesforce integration would make perfect sense here. It will allow for real-time, automatic two-way synchronization of information between Azure DevOps and Salesforce, leaving teams in a more streamlined and collaborative environment.  

Choosing the right integration tool here is the next logical step. So let’s understand how we can do that. 

How to Choose the Right Solution for an Azure DevOps Salesforce Integration

The possibilities and checklists for a suitable integration tool can be overwhelming. But to bring down the list to the bare minimum, here’s what you must consider. 

Note: As mentioned above, we have chosen Exalate for implementing an Azure DevOps Salesforce integration and we will look at what it has to offer.

Security

Perhaps, this should be your top criteria for an integration tool, since it involves disparate applications across companies sending and receiving business information. It’s important then, to secure this critical business data from being accidentally misused or shared with unauthorized parties. Using secure transport protocols like HTTPS, encrypted file transfers, or controlling access to the data to authorized users only are important security mechanisms. 

You can read more about how Exalate implements security measures by reading its security and architecture whitepaper

Decentralized Integration

It’s important for an integration tool to support decentralized integration. This means that both sides of the integration have complete control over what data is sent and how incoming data is received. 

They can share or receive data they want independently without having to configure or inform the other side. This guarantees that both sides maintain autonomy. 

Exalate achieves this with the help of its scripting engine that supports outgoing and incoming sync rules on both integration sides. These rules help control the information shared, thus ensuring decentralized integration.  

Reliability

The way your integration tool handles downtime and system failures is also important. Sync updates or changes must be queued in the proper manner and applied in the same order as their initiation. All this must be done automatically without any manual intervention. 

Exalate achieves this using an advanced transactional sync engine which breaks down all the synchronization requests in single atomic steps that are applied in the same order and retried once the system resumes from a downtime even when a system is being upgraded to a new version or a firewall is being reconfigured.  

Flexibility 

Your integration and synchronization requirements are bound to change with time. It’s natural for you to expect your integration tool to adapt to these changing requirements with minimal configuration.  

Exalate, for example, supports basic synchronization scenarios straight out of the box, so it works on a low-code non-configuration mode for simple use cases that can be set up in very little time and is also easy for business users to understand. And you can also build custom synchronizations using its intuitive scripting engine for unique or advanced integration cases. 

Another aspect of a tool being flexible is that it supports integrations with other popular applications like Jira, GitHub, Zendesk, ServiceNow, and HP QC/ALM as well. Since Exalate already supports these integrations, it will be easy for you to integrate with another of your partner, vendor, customer, or supplier who uses one of these applications. 

Having chosen the right tool for an Azure DevOps Salesforce integration, it’s now time we learn how to implement the integration. 

How to Set up an Azure DevOps Salesforce Integrationin 6 Steps

To begin with, Exalate needs to be installed on both Azure DevOps and Salesforce instances. This is an important part of Exalate’s distributed architecture feature. Since installing it on both sides will mean that the shared information can be controlled from either end independently. 

You then establish a connection between them, it’s like an initial handshake to know and acknowledge what instance you are integrating with.

And finally, you can configure the connection to control what is sent and received and then set automatic triggers to start syncing data. 

So let’s dive right into it! 

Step 1: Install Exalate on Azure DevOps 

You can install Exalate on Azure DevOps through its marketplace or on a docker. (Check out this guide for a detailed procedure on installing Exalate on Azure DevOps).

We are going to install it from the marketplace in this guide. 

You can find Exalate on the Azure DevOps marketplace. Or you can first log in to your instance and navigate to “Browse marketplace” from within it. 

azure devops marketplace

If you can’t find it, then navigate to Organization Settings –  Extensions and then click “Browse marketplace”.

Type “Exalate” in the search box. 

exalate for azure devops

On the next screen, click the green “Get” button to start the 30-day free trial.

exalate for azure devops

You will now be taken through the installation wizard. You need to select your organization type from the drop-down list. After that, click “Install”. 

select your azure devops organization

Follow the wizard next as it’s pretty straightforward. 

Once done, you can access Exalate by going to the “Organization Settings” and clicking “Extensions”. 

Then proceed to verify Exalate on your Azure DevOps instance. 

Once you finish this, install it on the Salesforce side. You can skip this if you have already installed it and move to the next step. 

Step 2: Install Exalate on Salesforce

Exalate on Salesforce is available through the Early Access Program (EAP). And it will soon be available on AppExchange. 

For installation via EAP, visit your Salesforce instance. Click on the top right cog icon, and go to “Setup”. 

salesforce setup

From the left-side menu, click “Apps”, then “App Manager” and select “New Connected App”

salesforce app manager

Fill in the details on a form that appears next. Name the app as “Exalate”. The API name will be auto-filled. 

Scroll down and click the “Enable OAuth Settings” checkbox. Specify the callback URL for the EAP. 

Then select the OAuth scopes. Make sure to add the scopes shown below using the “Add” arrow button. 

Salesforce API

Once done, scroll up and click the “Save” button. Changes might take some time to reflect. 

Next check for the OAuth policies of your connected app. For this, go to the left menu sidebar, click Apps> Connected Apps> Manage Connected Apps, and then select “Exalate”. Make sure that the “Permitted users” is set to “All users may self-authorize”. Follow these steps to get it done if it isn’t showing the correct option.

Then move to the integrations page of Exalate. Select Salesforce as the tracker there.

Salesforce integration page on Exalate

For the form that is displayed next, we need certain details from our Salesforce instance.

Form for requesting Salesforce integration

So navigate to Salesforce and go to the “App Manager” as you did before.

Exalate connected app salesforce

Click on “View” as shown below and copy the “Customer Key” and the “Customer Secret” for the Exalate connected app. Keep this someplace safe.

manage connected apps in salesforce

Now go and fill in the “Consumer key” and the “Consumer secret” in the form.

Fill in the Salesforce URL and the “Organization Type”  in the form. The Salesforce URL must be of the classic version of Salesforce and not the Lightning edition. 

If you are on the Lightning edition of Salesforce, switch to the classic version by clicking the profile icon on the top-right of the page and selecting “Switch to Salesforce Classic”. Copy the URL from the classic Salesforce version from there. 

switch to salesforce classic

For knowing your correct “Organization type”, click here.

After clicking “Submit”, you will receive an email. Click on the link in your email and allow access to Exalate for Salesforce.

Allow access Jira Salesforce integration

Then fill in a basic form so that your Exalate for Salesforce instance is verified and evaluation license activated.

Exalate for Salesforce

Click on “Agree and Submit” and accept the EULA.

Another email will arrive in your inbox. Click on “Verify Exalate instance” in the email.

Verify exalate instance

Upon successful verification, you can proceed to the next step. 

exalate email validation

Anytime you are logged out of your Salesforce instance, follow these steps to log in again.

Note: To know more about the detailed installation procedure click here.

Step 3: Connect Azure DevOps and Salesforce

On your Salesforce instance, you will be on the welcome screen. Click on the “Connections” tab on the left-hand menu. 

Go to the “Connections” tab. Connections in Exalate define your scope of synchronization and specify how your synchronization must behave. A unique connection for each instance is created. 

On the screen, you can see existing connections between Salesforce – ServiceNow, Salesforce – Zendesk, and Salesforce – GitHub. However, this screen will be empty if you haven’t worked with Exalate before and this is your first time creating connections. 

Either way, click on “Initiate connection”. 

With Exalate, one side initiates the connection and the other side accepts it. Exalate has a uniform interface so you will come across similar screens on either end.  

Here, we start from the Salesforce side. But you can start from Azure DevOps as well. 

initiate azure devops salesforce connection

You will then be asked to enter the destination instance URL. This will be the link to your Azure DevOps instance. 

In case you are confused about which link to enter, you can navigate to the left-hand “General Settings” Exalate menu and copy the URL from there. 

After a brief pause, new fields will appear. These will prompt you to choose the configuration type. 

exalate configuration modes

Exalate comes in two configuration modes: Basic and Script

The Basic mode allows you to work with default mappings and configurations that can’t be modified. It comes with the Free Plan that allows you to experience Exalate firsthand and offers up to 1000 free syncs per month. It is suitable for basic synchronization use cases.

The Script mode, on the other hand, offers the full functionality of Exalate with advanced configurations and scripting capabilities. With this mode, you can implement unique, complex, or advanced synchronization use cases. 

You can also choose to upgrade your existing Basic connection in Azure DevOps or Salesforce to a Scripted one if you want to use Exalate with all its features and configuration modes. 

Both these modes have slightly different screens, so we will take a look at both of them one by one. 

Continue with the Basic Mode

If you select “Basic” on the screen above and click “Next”, you will be asked to verify admin access to the destination instance, Azure DevOps in our case. 

Click the “Yes, I have admin access” button if you have access. Then click “Initiate”. If you don’t have access, click “No, I don’t have admin access”. Exalate then generates a unique invitation code for you. You need to copy and paste this code manually on the Azure DevOps side. 

initiate basic Azure DevOps Salesforce integration

After a quick verification, you will be redirected to the Azure DevOps side. 

Select a project on the Azure DevOps side from a drop-down list. This would be the project whose work items you want to sync or the one in which you will receive incoming Salesforce entities. 

Click “Next” after selecting the one you want. 

salesforce to azure devops connection

A message stating that your connection has been established will be displayed. 

You now need to enter the work item key you want to synchronize on the Salesforce side. 

Click “Exalate” once you have entered it. 

successful Azure DevOps Salesforce integration

If you now navigate to the Salesforce instance, you will be shown the same screen asking you to enter the Case number you want to synchronize on the Azure DevOps side. 

Note: The Case number must be copied from the URL of the Case you select to synchronize. This is shown in the image below.

salesforce case number

Sit back and let Exalate do its work. Have a look at the status messages to know what’s happening. 

azure devops salesforce sync in progress

After a while, see the successful synchronization status as shown below. 

successful salesforce to Azure devops sync

In the Basic mode, you can sync

  • individual work items or Salesforce entities as shown above.
  • by creating triggers for automatic synchronizations. 
  • work items using the Connect operation on the Azure DevOps side.
  • the existing workitems and Salesforce entities in bulk using the “Bulk Connect” operation. 

We will see how to create triggers a bit further down. 

Continue with the Script Mode

Moving on with the script mode, choose “Script” on the screen below and click “Next”. 

Note: We are initiating the connection from the Azure DevOps side now so you know how it works on both ends. But the same screens will appear if you start from the Salesforce side. 

exalate script mode

Enter the local instance short name, Azure DevOpssince that’s our local instance, and also the remote instance short name, Salesforce in our case. 

A connection name joining the two names and appended with a “to” will be generated. You can choose to change it if you want.

Spend some time describing the connection. This will come in handy when you have a lot of them and don’t remember why you created a particular one in the first place. 

establish Azure DevOps Salesforce integration

Click “Next” when you are ready to move ahead. 

Then select the project on the Azure DevOps side as you did for the Basic mode.

Azure DevOps integration project

A unique invitation code will be generated. This code is one of Exalate’s security mechanisms, such that each connection established ensures that data is sent and received from the correct source and destination. 

Click on “Copy invitation code” to copy it. Keep it somewhere safe. 

You can now go to the other side by clicking on “Go to remote”, or simply close this window and go to your Salesforce instance manually. 

If you do the latter step, the connection will be displayed in your Azure DevOps connections list under the “Pending” status. The status will turn “Active” when you finish setting up the connection on the Salesforce side. 

exalate invitation code

On the Salesforce “Connections” tab, click on “Accept invitation”. 

accept salesforce azure devops connection invitation

After this, a multi-line text box will appear. Here, you paste the invitation code you had kept safe and click “Next”. 

paste exalate invitation code

This will complete your connection process in Script mode. You can now proceed to configure the connection. 

For this, you click on the “Configure Sync” button or edit the connection if you want to configure it later by closing this window. 

configure azure devops salesforce sync

Step 4: Customize the Connection to Decide What Information Gets Shared

Customizing or configuring the connection is necessary to control what information you want to send to the other side and how you want to deal with information coming from that side. 

It also involves creating automatic synchronization triggers, so you set them once or as needed and experience a two-way synchronization that happens according to the conditions you have set.

As mentioned before, you can choose to configure using the “Configure Sync” button or choose to edit it. 

To edit the connection, navigate to the “Connections” tab and click on the edit icon in front of your connection name as shown below. 

Editing can happen at both ends, but the outgoing and incoming information you set or triggers you create will be specific to your platform.

You can also go to the other side of the connection by clicking on the remote antenna icon shown below. 

By clicking the 3 dots, you can either activate, deactivate, or delete the connection. 

edit azure devops salesforce connection

Any way you decide to go ahead, you get similar screens for configuring the connection. 

It has 4 tabs: “Rules”, “Triggers”, “Statistics” and “Info”. 

We will see rules here and triggers in the next step.

“Statistics” gives you an overview of your synchronizations like the number of issues under sync, the date of your last sync, etc. 

The “Info” tab gives you information about your connection like the name, description, and type of connection. You can edit the description here if you want. 

Azure DevOps Salesforce sync rules

Let’s discuss the “Rules” tab now. 

The screen above shows the rules on Salesforce and the one below shows them on Azure DevOps. 

As seen, each side has a set of incoming and outgoing sync rules written in Groovy scripting language. It is pretty intuitive and easy to follow. 

Incoming sync rules specify how you want to map the incoming information. 

The outgoing sync rules specify what information you want to sync with the other side.

You can edit the sync rules by adding scripts to send (Outgoing sync) or receive (Incoming sync) new information. Or by deleting the existing rules to stop sending (Outgoing sync) or receiving (Incoming sync) data, depending on whether you are editing it on the Azure DevOps side or the Salesforce side. 

For sending or receiving new information, we add a script and make changes in the outgoing/incoming sync rules.  

So in the screen shown above, if we want to synchronize “Opportunity” in addition to “Case”, we add the following code: 

if(entity.entityType == “Opportunity”) {

replica.key            = entity.Id

replica.summary        = entity.Name

replica.description    = entity.Description

}

edit salesforce azure devops sync rules

Here, entityType is the Salesforce entity you want to sync. The ID, name, and description of “Opportunity” are synced with key, summary, and description of work items. 

Now if you want to stop the data exchange, delete those lines in the outgoing and incoming sync rules respectively. 

If you prefer to keep the rules so that you can use them later, you can simply comment them as shown on the screen below. 

To comment a single line, add “//” at the start of the line. To add a comment to multiple lines, add a “/*” at the start of the line and a “*/” wherever you want the comment to end. The commented lines will be ignored while synchronizing information. 

For instance, we don’t want to sync the summary of work items, we simply comment the line: //replica.summary = workItem.summary. 

exalate sync rules

Proceed to create automatic synchronization triggers now. 

Step 5: Set Conditions for Automatic Synchronization: Triggers

Sync rules control what information you send and receive. To start the synchronization, you need to create triggers. Triggers are conditions you set, which when met, exchange information based on the outgoing and incoming sync rules you have set. 

To create triggers, click on the “Triggers” tab shown below. 

Alternatively, you can also create triggers by clicking on “Triggers” in the left-hand menu of “Exalate”. 

Both approaches send you to similar screens, but the latter one asks you to select the connection you want to create a trigger from since it is from the general tab. 

You will see a list of triggers here. It will be empty if you haven’t created any. 

Click on the “Create trigger” button. 

create azure devops salesforce integration triggers

An “Add trigger” pop-up will be displayed. 

The first drop-down will ask you to select the entity type you want to create the trigger for. 

On the Azure DevOps side, it is “Work Item”.

On the Salesforce side, there are many entity types you can sync, but the most popular ones are Accounts, Products, Opportunities, Tasks, and Cases

add trigger to salesforce azure devops sync

The “If” field is the condition of the trigger. In the above example, we created a trigger for the work item type “Task” i.e [Work Item Type] = ‘Task’

You can use platform-specific query language in the “If” section. 

WIQL (Work Item Query Language) in the case of Azure DevOps and SOQL (Salesforce Object Query Language) in the case of Salesforce. 

On the Salesforce side, you first select the Salesforce entity. We select “Opportunity” as shown below.

create triggers for azure devops salesforce connection

For Salesforce, there are 2 ways you can deal with the “If” section. The first is to fill in the text boxes with proper information about the Opportunity you want to filter, as shown on the screen above. 

Or toggle the “Use search query” switch to enter a SOQL query as shown below.

Salesforce SOQL

To learn more about how to create them for specific platforms, refer to this one for Azure DevOps or this one for Salesforce. 

Leave “Notes” so you know the purpose of your trigger. 

There is a toggle switch that lets you activate or deactivate a trigger. This is useful when you don’t need the trigger and don’t want to create it from scratch later. Click the “Add” button once you are done. 

The trigger you have created will be listed as shown below. 

You can choose to edit or delete the trigger from here. To synchronize existing work items matching your trigger criteria click on the 3 dots and select “Bulk Exalate”. 

bulk exalate

Once you are done, click on “Publish” to apply the changes to your connection. 

Step 6: Synchronize Information between Azure DevOps and Salesforce

For the Basic mode connection, individual work items and Cases can be synced by following the procedure mentioned in step 2. 

You can also create triggers or use the “Bulk Connect” operation for syncing information with the Basic mode. There is also a “Connect” operation on the Azure DevOps side that you can use to synchronize work items. 

Information in the Script mode connection can be shared by using the “Connect” operation in Azure DevOps, by creating triggers, or using the “Bulk Connect” operation in both Salesforce and Azure DevOps. In addition to this, you can always edit what information leaves your system and how you interpret incoming information using the sync rules. 

Exalate periodically checks for new synchronization requests or existing sync updates. So if you don’t see your sync result immediately, wait for some time and try again.

Common Use Cases

Development and Sales Teams

An Azure DevOps Salesforce integration can be useful for both development and sales teams. 

Suppose your sales team uses Salesforce and your development team uses Azure DevOps. 

The sales team always has access to customer feedback, queries, and new feature requests. Integration between these applications would mean that they can request bug fixes and dev updates right from within Salesforce. This in turn would create a new work item in Azure DevOps.

The development team would then work on it and update the statuses while doing so. An automatic bi-directional synchronization here would mean the sales team having real-time updates about the work items they have raised, and always have the correct answers for their customers. 

This would also hold true in the opposite case. Suppose the development team is working on a frequently requested feature update. They send this across to the sales team on Salesforce, maybe as a “Task”. The comments, statuses, and other relevant information can then be exchanged between Salesforce and Azure DevOps, helping the sales teams to close deals that are pending due to that particular feature request faster and in a more organized manner. 

Conclusion

This guide served to explain why an Azure DevOps integration is essential to bridge the gap between sales and development teams. How it helps alleviate problems these teams face due to manual data entry mistakes, thus wasting a lot of valuable time and effort. 

We also saw how an automatic and real-time information exchange between Azure DevOps and Salesforce can help us have a consistent and reliable view of revenue-driving information. 

We also discussed how Exalate offers features suitable for such an integration. And then finally had a look at how an Azure DevOps Salesforce integration can be implemented by following a few straightforward steps.    

Recommended Reads:

Comments are closed.