Integrating Dynamics 365 with Azure Functions – Part 1

By | June 5, 2018

Integrating Dynamics 365 with Azure Functions

Introduction:

Azure function is a serverless architecture where your code is hosted in the cloud and you do not need any infrastructure to host this. Traditionally extending business logic for Dynamics 365 Customer Engagement (D365 CE) included creating plugin and workflow assemblies which would be deployed to CRM using Plugin registration tool. The assembly could be either stored in the database, the preferred way or disk (on-prem only). The assembly had to be registered in sandbox mode that resulted in limited actions that could be performed through these assemblies.

For a few versions now, we were allowed to register Azure aware plugins and workflows. With v9.x, Webhooks are now supported. Webhooks are in layman terms – Event-driven programming – When an action occurs, it would raise/notify an event and it would push the data to all the subscribers of the event. Plugins and Workflow architecture were based on notifications where we would register/subscribe to messages on entities and when those actions occurred it would execute the business logic in our assemblies.

In this series, we would walk through an example of creating an Azure function and call the same through the following:

  1. An example of directly calling an Azure function from traditional workflows.
  2. Register as a WebHook and invoke it from a workflow.
  3. Register as a WebHook and register steps for messages that you would like the custom logic to be executed for.

Creating an Azure function:

Let us begin with creating the dev environment for Azure function to enable local execution and debugging.

You could use both Visual Studio as well as VS Code for developing Azure function. You could actually just write it all on a Notepad :) Azure functions support various scripting languages, however, in this example, we will use C#.

Let us begin with creating a folder (Azure) which will be the root folder and will hold all the functions we create. In order to develop and test Azure Function locally, you must have installed “Azure Functions Core Tools. Use the “npm install -g azure-functions-core-tools” command to install it.

Next in VS Code – command prompt type in the following command to initialize the environment, “func init”

Integrating Dynamics 365 with Azure Functions

Now we shall go ahead and create our first function.

C:\user\AzureBlog>func new –language C# –template “Http Trigger” –name D365HttpTrigger

This will go ahead and create the following structure in the Azure blog folder:

Integrating Dynamics 365 with Azure Functions

The scaffolding is ready with the function code ready for execution. Your function is ready to be executed.

This function could be executed through either an HTTP Get or HTTP POST request.

Let us host this function locally so that we can execute this as is using Postman

Execute the below command in VS code to start the host service

func host start –debug vscode

You should see the following message once the function is hosted:

Integrating D365 with Azure Functions

This is the URL where your function is being hosted. You can now execute this function by calling this URL.

Integrating D365 with Azure Functions

Back in your command window in VS Code, you will see the debug info.

Integrating D365 with Azure Functions

Once you are hosting the function, it also tracks and compiles the changes made to the code in real time and reports errors if any

Integrating D365 with Azure Functions

You can now host this function on Azure. Login to Azure portal and create a new Function App.

Integrating D365 with Azure Functions

Next

Integrating Dynamics 365 with Azure Functions

There are 2 plans available Consumption and App Service Plan. Functions hosted in Consumption Plan need to finish execution within 5 minutes, it could further be extended to 10 minutes by changing configuration settings, but any function that would take longer than that to execute should move to App Service Plan.

Once your resource has been provisioned, this is where you land.

Integrating Dynamics 365 with Azure Functions

There are multiple ways to upload your function to Azure

Manually create the function and update the code

1. Click + button and create a function – Choose HTTP trigger for our example

Integrating Dynamics 365 with Azure Functions

2. Choose Function Level Authorization

Integrating Dynamics 365 with Azure Functions

This will require a code to be passed to invoke this function. If the code does not match, it will not execute the function.

3. You get the same scaffolding ready that you had using the command in VS Code.

Integrating Dynamics 365 with Azure Functions

4. Now if you had changed the code in a local environment you could simply copy/paste the code in run.csx and save it.

5. You can also use the View files section to upload files.

VSTS continuous integration

You can also have the files/folders created and uploaded directly. For this, you need to create Deployment Plan using the Deployment Options.

Integrating Dynamics 365 with Azure Functions

Now let us test this function through Postman.

Click Get Function URL found on the run.csx file to get the URL to execute this function. You will notice the URL comes with the code query string attached to it.

Integrating D365 with Azure Functions

If you provide an incorrect code you get the error status code

Integrating D365 with Azure Functions

With the Azure function hosted, it is now ready to be invoked from D365.

Conclusion:

In this blog, We saw how to create an Azure function and now that we have our Azure function ready and hosted, in our next blog we have look at invoking the function through a workflow.

 

Map Dynamics CRM

Leave a Reply

Your email address will not be published. Required fields are marked *