Sample code to connect to CDS / Dynamics 365 / CE using OAuth


Sample code for quick reference for connecting to CDS through a console application using OAuth

Add the NuGet package for Microsoft.CrmSdk.XrmTooling.CoreAssembly in the project.

Xrm.Tooling is the preferred way to connect to CDS, because of many benefits – we can define connection string, thread safety, support for X.509 certificate authentication, support for secure storage of sign-in credentials and reuse etc.

Note

Here we will be using the sample AppId and Redirect URI.

Sample Code- 


using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Tooling.Connector;
using System;

namespace SampleConsoleApp
{
class Program
{
static void Main(string[] args)
{
string ConnectionString = "AuthType = OAuth; " +
"Username = [username]@[domain].onmicrosoft.com;" +
"Password = [password]; " +
"Url = https://[orgname].crm.dynamics.com;" +
"AppId=51f81489-12ee-4a9e-aaae-a2591f45987d;" +
"RedirectUri=app://58145B91-0C36-4500-8554-080854F2AC97;" +
"LoginPrompt=Auto";

CrmServiceClient svc = new CrmServiceClient(ConnectionString);

if (svc.IsReady)
{
var myContact = new Entity("contact");
myContact.Attributes["lastname"] = "Test";
myContact.Attributes["firstname"] = "User1";
svc.Create(myContact);
}
}
}
}


For .NET Framework 4.5.2 – we need to explicitly specify Tls1.2 as the default protocol. 

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

https://nishantrana.me/2018/01/

.NET Framework 4.6.2 uses TLS 1.2 as the default protocol.

 

More details on – Connection string parameters.

Sample Code – Dynamics 365 Web API / Organization Service

Hope it helps..

Advertisements

How to – Extract attachment from Notes in Dynamics 365 / CE / CDS – SSIS (KingswaySoft)


Recently we were exploring ways of extracting attachment from notes to a local drive for our case entity. We also wanted to organize it based on Case Number.

For this, we used KingswaySoft’s SSIS components.

Other posts on SSIS and Dynamics 365 –

https://nishantrana.me/2018/11/26/ssis-and-microsoft-dynamics-365/

This is how our final package looked like

For CDS Source, we used Source Type as Fetch XML.

And the below Fetch XML to fetch notes details where objecttypecode is incident and isdocument property are true (i.e. has an attachment) and case as the linked entity to get the case ticket number.

Result View –

CDS / CRM Source Component

Make sure to use the alias for the attributes of the linked entity.

Next drag the Premium Derived Column, here we will use the DecodeBase64 encoding function to decode the file content stored in the documentbody field using as base-64 encoded string.

DT_Image output column will have the binary content of the attachment

Next, we have added another Premium Derived Column, this time to write the binary content to the local drive, using the WriteBinaryContent function.

Click on the ellipsis to specify the expression.

Here we are creating a folder based on the case ticket number and storing the corresponding attachments inside it.

Let us run the package

On successful execution, we can see the folders created with case ticket number and attachments added to it.

Get all the details here

http://www.kingswaysoft.com/blog/2017/03/21/Extracting-CRM-Attachments-with-Ease

Hope it helps..

Advertisements

Fixed – An error occurred when processing the security tokens in the message:You are using Ws-Tust authentication which has been deprecated and no longer supported in your environment. Please use oAuth2.0 authentication in Dynamics 365 / CDS


While trying to connect to Dynamics 365 instance through Online Federation authentication type (deprecated) using CDS/ CRM connection manager of KingswaySoft

For Console App – https://nishantrana.me/2020/11/09/sample-code-to-connect-to-cds-dynamics-365-ce-using-oauth/

you would get the below error –

KingswaySoft.IntegrationToolkit.DynamicsCrm.CrmServiceException: CRM service call returned an error: An error occurred when processing the security tokens in the message:You are using Ws-Tust authentication which has been deprecated and no longer supported in your environment. Please use oAuth2.0 authentication. (SSIS Integration Toolkit for Microsoft Dynamics 365, v20.2.0.3083 – devenv, v15.9.28307.905)System.ServiceModel.FaultException

: An error occurred when processing the security tokens in the message:You are using Ws-Tust authentication which has been deprecated and no longer supported in your environment. Please use oAuth2.0 authentication.

The solution is to use the OAuth connection type as shown below.

More on OAuth 2.0 – https://nishantrana.me/2019/08/30/oauth-2-0-with-dynamics-365-ce-web-api/

Here we have selected Password as OAuth type.

And specified username and password, and for Client App Id we have specified the default client app id.

2ad88395-b77d-4561-9441-d0e40824f9bc

https://nishantrana.me/2019/08/23/connect-to-dynamics-365-web-api-using-oauth-2-0-resource-owner-password-credential-ropc/

This connection succeeds this time.

The same will be the experience with XrmToolBox while trying to create a new connection using the connection wizard

Microsoft.Xrm.Tooling.Connector.CrmServiceClient    Error    2    06/11/20 07:18:46 Unable to connect to CRM: An error occurred when processing the security tokens in the message:You are using Ws-Tust authentication which has been deprecated and no longer supported in your environment. Please use oAuth2.0 authentication.

Error    : An error occurred when processing the security tokens in the message:You are using Ws-Tust authentication which has been deprecated and no longer supported in your environment. Please use oAuth2.0 authentication.

Try the alternate connection method like SDK Login Control, Client ID secret, etc.

https://www.xrmtoolbox.com/documentation/for-users/connecting-to-an-organization/

Please refer to the below articles to get more details –

Use of Microsoft 365 authentication with the WS-Trust security protocol

Deprecation of Office365 authentication type and OrganizationServiceProxy class for connecting to Common Data Service

https://colinvermander.wordpress.com/2020/02/09/cds-crm-sdk-ws-trust-auth-and-organizationserviceproxy-deprecated-what-does-it-mean/

Hope it helps..

Advertisements

Improved duplicate detection and merge experience in Dynamics 365 for Sales– 2020 Release Wave 2


2020 Release Wave 2 brings improvement in duplicate detection and merge capabilities.

Check other posts on Release 2020 Wave 2

To enable it, navigate to – Settings > Data Management > Duplicate Detection Settings

Enable it –

With this enabled, the user can see why a record is being flagged as duplicate, it also allows users to merge the record using the improved Merge dialog box while the record is being added, updated, or quailed as in case of lead.

On creating a duplicate contact record with the same last name and first name, the dialog box opens up.

We can select any of the matched records and click on the Merge button to merge it.

We can see the different options within the merge dialog box.

Selecting the appropriate options, and clicking on Ok merges the record.

Hope it helps ..

Advertisements

Replicate / Export Dynamics 365 (CDS) data – different options


The most common use case to export Dynamics 365 or Common Data Service data to an external database/datastore is to have more control over the data (without going through API route) with the ability to run analytics such as Power BI Reporting, Machine Learning, Data Warehousing, Integration, etc.

For analytics, we can also use our Microsoft Dynamics 365 AI apps that use Dynamics 365 data as a source

https://docs.microsoft.com/en-us/dynamics365/ai/

Below listing down few of the options –

Data Export Service – Configuration

It is a free Add on-service provided by Microsoft for exporting Dynamics 365 or CDS Data to Microsoft Azure SQL Database or Microsoft Azure SQL Server on Microsoft Azure Virtual Machine.

Microsoft recommends Azure SQL Database Premium P1 or a better plan for Data Export Service

https://docs.microsoft.com/en-us/power-platform/admin/replicate-data-microsoft-azure-sql-database

Notes on Data Export Service –

https://nishantrana.me/2018/10/04/my-notes-on-dynamics-365-data-export-service/ 

Export to Data Lake Service – Configuration

The service enables continuous replication of CDS Data to Azure Data Lake Gen 2.

https://docs.microsoft.com/en-us/powerapps/maker/common-data-service/export-to-data-lake

Few posts on Azure Data Lake

https://nishantrana.me/category/azure-data-lake/

Azure Data Factory – GUI based integration tool

Cloud-based integration service.

https://docs.microsoft.com/en-us/azure/data-factory/connector-dynamics-crm-office-365

Check out the informative posts on Azure Data Factory –https://dynamicscrmgirl.wordpress.com/tag/azure-data-factory/

We can also run SSIS Packages on Azure Data Factory

https://nishantrana.me/2020/10/21/posts-on-azure-data-factory/

Scribe Online Replication Services – GUI based integration tool

Cloud-based integration service.

https://nishantrana.me/2019/01/09/using-scribe-online-replication-services-rs-to-replicate-dynamics-ce-data/

Another option is to use Scribe Insight

https://trellispoint.com/quickly-copy-dynamics-365-online-data-to-sql-server-using-scribe-insight/

Skyvia’s Data Integration service

Informatica

Cloud-based integration service.

https://nishantrana.me/2019/11/13/easily-set-up-dynamics-365-ce-crm-replication-incremental-to-azure-sql-sql-on-premise-using-skyvias-data-integration-services/

Another GUI based integration tool that can be considered is Informatica

https://network.informatica.com/cloud/index.htm#page/cloud-microsoft-dynamics-365-for-sales-connector-guide/Introduction_to_Microsoft_Dynamics_365_for_Sales_Connector.html

KingswaySoft Integration Components – SSIS

Leading data integration software – provide SSIS components to integrate applications/databases.

http://www.kingswaysoft.com/blog/2017/04/04/How-to-Retrieve-Incremental-Changes-from-CRM-in-your-ETL-Process

Another SSIS based option is CozyRoc

https://www.cozyroc.com/ssis/dynamics-crm

Or we can use Script Component instead of using 3rd party components/ tool

https://nishantrana.me/2020/10/19/connect-to-dynamics-365-through-script-component-ssis/

More on SSIS and Dynamics 365

https://nishantrana.me/2020/10/16/ssis-kingswaysoft-and-dynamics-365/

Use SQL to query CDS data (Preview)

The capability to query CDS Data.

https://docs.microsoft.com/en-us/powerapps/developer/common-data-service/cds-sql-query

Check out all the articles on CDS T-SQL

https://markcarrington.dev/category/msdyn365/t-sql/

https://nishantrana.me/2020/05/21/setting-up-using-sql-to-query-data-in-dynamics-365-preview/

Query CDS data using Web API / Organization Service – Development

Write a custom tool using Dynamics 365 APIs

https://docs.microsoft.com/en-us/powerapps/developer/common-data-service/webapi/query-data-web-api

https://docs.microsoft.com/en-us/powerapps/developer/common-data-service/org-service/entity-operations

Hope it helps..

Advertisements

Using KingswaySoft Azure Blob Storage component with Dynamics 365


KingswaySoft provides 3 components specific to Azure Blog Storage

  • Azure Blob Connection Manager
  • Azure Blob Storage Source
  • Azure Blob Storage Destination

Check other blog posts on SSIS

https://nishantrana.me/2020/10/16/ssis-kingswaysoft-and-dynamics-365/

Let us take a simple example where we are extracting \ reading contact data from Dynamics 365 \ CDS and saving it as a text file in Azure Blob Storage.

Create a new SSIS Package, and drag the Dynamics CRM Source component to it.

(Define the connection to Dynamics CRM instance using Dynamics CRM Connection Manager)

We have selected emailaddress1, first name, and the last name attributes.

Next drag an Azure Blob Destination Component, we will first define the connection to Azure Storage first

Navigate to the Access keys in the existing Storage account to get the account name and the key (or create a new Storage account)

Paste the values and test the connection.

Below we have specified the name of the existing Blob Container, the name of the file to be created there along with the format.

The mapping column will have the mappings defined

Let us execute the package

We can see the file created in the Blob storage

We can see it populated with the source columns specified in CRM Source component.

Similarly using the Azure Blog Source component, we can read the files and can use it for any destination component including Dynamics 365 Destination.

Hope it helps..