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

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

Fixed – Unable to Login to Dynamics CRM or An unsecured or incorrectly secured fault was received from the other party. See the inner FaultException for the fault code and detail


We might get below error while trying to consume Organization Service through the client application

  • Unable to Login to Dynamics CRM

  • An unsecured or incorrectly secured fault was received from the other party. See the inner FaultException for the fault code and detail.

Chances are the Security Defaults are enabled on the account you are using.

https://docs.microsoft.com/en-us/azure/active-directory/fundamentals/concept-fundamentals-security-defaults

If not required, login to

https://portal.azure.com/

Select Azure Active Directory > Properties > Manage Security Roles

And disable it

This time the connection will be successful.

Try below as well –

SecurityProtocolType.TLS12 –

https://nishantrana.me/2018/10/20/unable-to-login-to-dynamics-crmorganizationwebproxyclient-is-nullorganizationwebproxyclient-is-null-error-while-using-crmserviceclient/

https://nishantrana.me/2018/04/24/unable-to-login-to-dynamics-crmorganizationserviceproxy-is-null-error-while-using-crmserviceclient/

Server Clock out of sync –

https://nishantrana.me/2011/12/13/an-unsecured-or-incorrectly-secured-fault-was-received-from-the-other-party-see-the-inner-faultexception-for-the-fault-code-and-detail/

MFA –

https://nishantrana.me/2020/05/07/an-unsecured-or-incorrectly-secured-fault-was-received-from-the-other-party-see-the-inner-faultexception-for-the-fault-code-and-detail-while-trying-to-connect-using-xrmtoolbox/

Hope it helps..

Advertisements

Fixed – There was an error calculating dependency for this component. Missing component id error while trying to import a solution in Dynamics 365


We got the below error while trying to import the solution.

The error indicates that either the component with the specified GUID in the error message is either missing in the solution or is missing in the target environment.

Search for the GUID either in the customization.xml or solutions.xml to find the component.

Add the missing component in the solution and try the import again.

Or remove the dependency to that component from the source solution.

In our case, it was the Quick View Form referred to in one of the entity’s form but not included in the solution. We added the Quick View Form in our solution and tried the import which worked.

We could have also removed the quick view form from the entity’s form (if the component was not needed) and tried the import.

Hope it helps..

Fixed – Object reference not set to an instance of an object error while calling an Action in Dynamics 365


Recently in one of our JavaScripts which was calling an action (with a plugin registered to it) was giving us the below error.

We had a plugin registered on the call of that action, which in turn was calling an external service.

We figured out the probable cause of this error (related to certificates) and updated the plugin code accordingly on the server.

Unfortunately, this didn’t fix the issue for us, we also tried different possible solutions but to no avail.

As a last resort, we thought of giving this a try – deactivate and activate the Action, and to our surprise that did the trick.

Our thought is maybe Action was somehow still referring to the old plugin code, and the step of deactivating/activating the Action kind of cleared the cache or something, making action to refer to the latest plugin code deployed.

Hope it helps..

Advertisements

Fixed – Column names in each table must be unique. Column name ‘x’ in table ‘y’ is specified more than once while importing solution in Dynamics 365


Recently while trying to import the solution we got the below error.

Below was the outcome of our analysis

  • The column or the field referred to in the error message was not available in the CRM application i.e. customizations – default solution was not having this attribute.
  • The column was only available in the base table of the entity.
  • The column was not available in the filtered view of that entity.
  • The column was not available in the MetadataSchema.Attribute table.
  • We had around 50 such columns in the base table of the entity.

In short, the field was only available in the base table and wasn’t available anywhere else, which could have been the result of the solution being deleted at some point in time, followed by the wrong restoration of the table (i.e. unsupported change to the database).

We raised the Microsoft Support for the same, and the way we resolved the issue was by dropping/deleting those columns from the base table, followed by running the solution import which went successful this time. (fortunately the fields were all blank – null or default value)

ALTER TABLE “table_name” DROP “column_name”;

We can also get this error if we have a field with same schema name as source field created in the target environment (created manually / directly there). In this case also either we can remove the field from the source environment’s solution file or we can delete the field from the target environment.

Hope it helps..