Advertisements

Dynamics 365 – Using WebHooks to post data from Plugin to Azure Function

In my previous articles, I detailed the steps to create ‘Azure Functions’ and executing D365 SDK messages from ‘Azure Function’.

In this article, lets see how we fulfill Integration requirements using WebHooks model by submitting data to external WebAPIs and Services from D365.

What is a WebHook:

  • Webhooks is a lightweight HTTP pattern for connecting Web APIs and services with a publish/subscribe model.
  • Webhook senders notify receivers about events by making requests to receiver endpoints with some information about the events.

In this article, I am going to send data from Dynamics Plug-in to Azure Function using WebHooks model. So Plug-in acts as Webhook Sender and Azure Function acts as Receiver.

Below are the steps to create Azure Function and call Function from Plug-in by passing data.

Steps to create Azure Function:

  • Refer Create Azure Function article to create Azure Function Apps.
  • Create a new ‘Azure Function’ of type ‘Generic webhook’

wh1

  • Add below logic to Azure function which captures and logs the content posted from Plug-in

wh2

Get Azure Function URL:

Copy the ‘Azure Function’ URL along with key which will be used to communicate from Plugin.

  • Click on ‘Get function URL’ link and click ‘Copy’ to copy the URL

wh3

  • URL will have 3 parts
    • Endpoint URL
    • Code
    • ClientId
  • We would use only below 2 highlighted values while registering Plug-in.

wh4

Registering a WebHook:

  • Connect to Dynamics instance from Plug-in Registration tool
  • Click on ‘Register New Web Hook’

wh5

  • In the ‘WebHook Reistration’ page
    • Set ‘Endpoint URL’ as the ‘Endpoint URL’ value copied from ‘Azure Function URL’
    • Click ‘Add Property’
      • Set ‘Key’ as ‘x-functions-key’
      • Set ‘Values’ as ‘Code’ copied from ‘Azure Function URL’

wh6

Register Plug-in Step on WebHook

  • Register a Plug-in step on WebHook assembly

wh7

  • Create a step on ‘PostAccountCreation’

wh8

Test the WebHook:

  • Create an Account from D365
  • Check the Logs in Azure Function’s ‘Logs’ tab

🙂

 

Advertisements
Categories: CRM, Azure Tags: , ,

Code Snippet – Execute Dynamics 365 WhoAmIRequest in Azure Function

July 15, 2018 1 comment

Azure Function is a serverless compute service that enables you to run code on-demand without having to explicitly provision or manage infrastructure.

We can leverage ‘Azure Functions’ in Dynamics 365 to build robust integrations.

Scenario:

Lets take a scenario, where your Customer has a Facebook page and complaints posted on page should get created as ‘Case’ records in your Dynamics application.

In the above scenario,

  • Connecting to Facebook and retrieving Posts can be achieved using ‘Logic Apps’ Facebook connector
  • Now creating Posts as ‘Cases’ in Dynamics can be done by creating an ‘Azure Function’ with Case create logic and invoke it from ‘Logic App’

In this article, I will walk you through the steps to establish connection to D365 and  execute ‘WhoAmIRequest’ from ‘Azure Functions’.

Steps to create Azure Function:

  • Refer my previous article for steps to create Azure Function.

Prerequisites to Connect to D365 From Azure Function:

  • We would need ‘CRM SDK’ nuget packages in Azure Function to establish connection with D365.
  • Below are steps to add nuget packages to ‘Azure Function’
    • Connect to ‘Advanced tools(Kudu)‘ from ‘Function Apps -> Platform features
    • WhoAmi_1
    • Click on ‘Debug Console -> CMD’
    • WhoAmi_2
    • From the folder explorer, navigate to ‘site -> wwwroot‘ folder
    • Open the folder with your Azure Function name
      • Since my function name is ‘WhoAmI’ and I got the ‘WhoAmI’ folder under ‘wwwroot
    • WhoAmi_3
    • To refer nuget packages, we have to create a new file by name ‘project.json’
    • WhoAmi_4
    • Add below package references
    • WhoAmi_5
    • Save
  • Add URL and Credential details of ‘D365’ to ‘Application Settings’ of ‘Azure Function’
    • Navigate to ‘Function Apps -> Platform features -> Application Settings’
    • WhoAmi_6
    • Add the URL, UserId, Password details.
    • AzFunc_5

Code Snippet:

Once you have the Prerequisites ready, below is the code snippet to execute ‘WhoAmIRequest’

using System.Net;
using System.ServiceModel.Description;
using Microsoft.Xrm.Sdk.Client;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;
using Microsoft.Xrm.Sdk.Discovery;
using Microsoft.Crm.Sdk.Messages;
using System.Configuration;

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{
try{
log.Info(“Inside Try”);

ClientCredentials userCredentials = new ClientCredentials();
var userName = ConfigurationManager.AppSettings[“Crm_UserName”];
var password = ConfigurationManager.AppSettings[“Crm_Password”];
var Crm_UniqueOrgUrl = ConfigurationManager.AppSettings[“Crm_UniqueOrgUrl”];
userCredentials.UserName.UserName = userName;
userCredentials.UserName.Password = password;

log.Info(“userName – “+userName);
log.Info(“password – “+password);

var service = new OrganizationServiceProxy(new Uri(Crm_UniqueOrgUrl + “/XRMServices/2011/Organization.svc”), null, userCredentials, null);
service.ServiceConfiguration.CurrentServiceEndpoint.Behaviors.Add(new ProxyTypesBehavior());

WhoAmIRequest reqWhoAmI = new WhoAmIRequest();
WhoAmIResponse resp = (WhoAmIResponse)service.Execute(reqWhoAmI);
var buID = resp.OrganizationId.ToString();
var userID = resp.UserId.ToString();

log.Info(“Business Unit Id – “+buID);}
catch(Exception ex)
{
log.Info(“Exception – “+ex.Message);
}

return req.CreateResponse(HttpStatusCode.OK, “Successfully made call to D365.”);
}

Run and Test the Code:

  • Click on ‘Run’ and expand ‘Logs’ section to track the logs.

WhoAmi_7

🙂

 

Azure – Create and Rename a Function

July 15, 2018 2 comments

Other day I was exploring Azure ‘Functions’ and had a tough time to rename the ‘Function’.

Below are the steps to create and rename Azure ‘Function’

What is an Azure Function:

Azure Function is a serverless compute service that enables you to run code on-demand without having to explicitly provision or manage infrastructure.

AzFunc_1

In simpler words, you can run your code with no Development/Hosting environment. All you need to do is start coding in ‘Azure Function’ editor like you code in Visual Studio, you can even refer external .dlls.

Steps to create Function:

  • Connect to your Azure Portal (http://portal.azure.com)
  • Create a new “Function App”
    • I named it as ‘AzrFunc’
  • Under the “Function App”, add a new ‘Function’ of type “Webhook + API”

AzFunc_3

  • Now a ‘Function’ will get created with a default name “HttpTriggerCSharp1”

AzFuncRename_1

Steps to rename a Function:

There is no rename option in UI to change the ‘Function’ name and you have to use ‘Console’ from “Platform features -> Development Tools”

  • Open the Console

AzFuncRename_3

  • Type command “ls” which lists out your function name
  • Use command “rename” to change the Function name
    • Syntax: rename <old_name> <new_name>
      • I renamed function to ‘WhoAmI’

AzFuncRename_4

  • Restart the ‘Function App’

AzFuncRename_6

  • Refresh your “Function App”, to see the change

AzFuncRename_5

Refer documentation to learn more about ‘Azure Functions’

🙂

Categories: Azure Tags: , ,

Dynamics 365 – Read Auditing

One of the much awaited features ‘Read Access Audit‘ is being roll out in the latest version of Dynamics 365 online.

Enable ‘Read’ Audit:

  • Connect to your Dynamics 365 application.
  • To enable Audit, choose Settings > Administration > System Settings > Auditing tab

Read Audit

Access Audit Data:

  • Audit data can be viewed by connecting to the Office 365 Security and Compliance Center.
  • Connect to https://protection.office.com > Search & investigation > Audit log search and select the Dynamics 365 activities tab

Read Audit Reports

Refer this article for more info.

🙂

SQL Server Installation – VS Shell installation has failed with exit code 1638

I was getting below error during the SQL server 2017 installation.

VS Shell installation has failed with exit code 1638

Reason:

  • Exit code 1638 denotes “Another version of this program is already installed”.
  • In my case, I already had Visual Studio 2017 installed on my machine and there was conflict due to “Microsoft Visual C++ 2017 Redistributable” components which got installed with Visual Studio 2017.

Fix:

This issue was annoying and had to spend couple hours to find the actual reason and fix. Below fix worked in my case.

  • Uninstall Visual Studio 2017
  • Go to Control Panel and uninstall below ‘Microsoft Visual C++ 2017 Redistributable‘ components

VC Redist

  • Restart the machine
  • Try installing SQL Server
  • Proceed with Visual Studio 2017 installation

🙂

 

‘Portal Comment’ not showing up – Dynamics Portals

‘Portal Comment’ is an OOB activity which comes with Portal solution and enables peer-to-peer interactions between Portal Users and Dynamics Users.

To add ‘Portal Comment’ for a record, go to ‘ACTIVITIES’ tab on the form and select ‘Portal Comment’.

PC_5

Problem Statement:

  • ‘Portal Comment’ added from Dynamics on a record not showing up in Portal.
  • Below is a ‘Portal Comment’ added for Case record ‘Test’.

PC_1

  • It was not showing up on Case record on Portal

PC_2

Reason and Fix:

  • ‘Portal Comment’ will only show up on Portal, when the ‘SEND’ button clicked (i.e, Status = Completed)

PC_3

  • Now, open the record in Portal and you should see the ‘Portal Comment’
    • Note: Text added in ‘Description’ field of ‘Portal Comment’ will show up on Portal

PC_4

  • ‘Portal Comment’ can also be added from Portal by using ‘Add Comment’ button and it will show up in ‘ACTIVITIES’ tab of the record.

🙂