My Photo

Microsoft Dynamics 365

Official Blog for Microsoft Dynamics Functional and Technical Solutions....
Browsing Category " D365 "

Dynamics CRM V9 / D365 Connection through Console without Prompt

There are 2 major steps involved in the process.
  • Register the application with your Azure subscription
  • Build the Console Application
Register the application with your Azure subscription

Build the Console Application 

You need to change only the below authentication method in step 3 rest remains same

Pass user credentials with service URL and client id in Authentication Context


string authority = "https://login.microsoftonline.com/68e86d2-65ed-4666-8ee-f8ce245d20de/oauth2/authorize";
AuthenticationContext authContext = new AuthenticationContext(authority, false);
var credentials = new UserCredential("shashank@s.onmicrosoft.com", "pas@wrd1");
//without prompt
AuthenticationResult authResult = authContext.AcquireToken(serviceUrl, clientId, credentials);
authHeader = new AuthenticationHeaderValue("Bearer", authResult.AccessToken);
You can have a look at my code here :Sample Code

Happy Coding and CRMing 😊


SOURCE : mscrm.com

Unable to Connect Plugin Registration tool with MS CRM v9 / D365 SDK

On
ISSUES:

Not able to login Plugin registration tool (Keep popping up for Credentials)

Resolution:

1. Update latest SDK from the Download tools from NuGet or Quick start Plugin Registration Tool V9.0.0.7

For downloading the latest PRT from VS Nuget packages - this link might be useful

2. Modify using TSL to 1.2 through Fiddler .

Step 1 Open Fiddler and navigate to Tools - Options - HTTPS Tab


Step 2 Under HTTPS tab click on to Protocols link - a Popup will come change the TLS vesion from 1.0 / 1.1 to tls 1.2.  i.e. " <client>;ssl3;tls1.2 " and press on ok


Now you will be able to connect to your CRM v9 Organisation with PRT

Happy CRMing 😊

SOURCE : mscrm.com

Entity for Views in CRM based on View Ownership - SavedQuery and UserQuery Entity

There are 2 types of View in CRM entity based on View Ownership , which are stored in two different entities.

1)  Organisation or System View - stored in the View Entity (SavedQuery)
2)  Individual, personal or User/Team View - stored in the Saved View Entity (UserQuery)

Below is the Fetch XML that you can use to retrieve the Data of the entites

1)  Organisation or System View
<fetch top="5000" >
  <entity name="savedquery" >
    <attribute name="name" alias="ViewName" />
    <attribute name="createdbyname" alias="Owner" />
    <attribute name="description" alias="Description" />
    <attribute name="returnedtypecode" alias="returnCode" />
    <attribute name="fetchxml" alias="fetchXML" />
  </entity>
</fetch>

2)  Individual, personal or User/Team View
<fetch top="5000" >
  <entity name="userquery" >
    <all-attributes/>
    <attribute name="name" />
    <order attribute="name" descending="false" />
    <attribute name="ownerid" />
    <attribute name="modifiedon" />
    <attribute name="userqueryid" />
  </entity>
</fetch>

We can retrieve the data of these entries by C# also you can see the full code example here:
https://msdn.microsoft.com/en-us/library/gg594431.aspx

You can also use LINQ query for retrieving these view.

Happy CRMing 😊

Add value in option set - Status Reason C#

Reference to be used - using Microsoft.Crm.Sdk.Messages;
var response = ((InsertStatusValueResponse)service.Execute
(
new InsertStatusValueRequest
{
    AttributeLogicalName = "statuscode",
    EntityLogicalName = "task",
    Label = new Microsoft.Xrm.Sdk.Label("Auto Closed", 1033),
    StateCode = 1 //Status: 0 active & 1 inactive
}
)).NewOptionValue;


Happy Coding 😊

Validation to accept only Numeric Character in MS CRM


Below script is a generic validation which will show for error if field is having anything except numeric value



function ValidateOnlyNumeric(context) {
    var fieldname = context.getEventSource().getName();
    var phone = Xrm.Page.getAttribute(fieldname).getValue();
    if (checkFormat(phone)) {
        Xrm.Page.getControl(fieldname).clearNotification();
    } else {
        Xrm.Page.getControl(fieldname).setNotification("Please enter only numeric characters");
    }
}
function checkFormat(phone) {
    var regex = /^\d+$/;
    if (regex.test(phone)) {
        return true;
    } else {
        return false;
    }
}

To enable it for any field just register it on change of the required field with function name “ValidateOnlyNumeric” and check “Pass execution context as first parameter ” and save an publish it will start working



Hope it helps

Happy Coding 😊

Connect to Dynamics CRM / D365 WebApi v9 from Console Application C#

There are 2 major steps involved in the process.
  • Register the application with your Azure subscription
  • Build the Console Application
Prerequisites

CRM / D365 Trial Organisation

Register the application with your Azure subscription


Step 1 Login to azure portal  https://portal.azure.com with your CRM credentials


Step 2 Click on Azure Active Directory - App registrations


 Step 3 Click on to New application registration


 Step 4 Enter Your Desired Name and Redirect URL but select Native in Application type and click on create Button


Step 5 After some some time you will be able to see your created apps then click on it


Step 6  Then click on Required permissions under API Access and then click on Add


Step 7  Click on Select API and then Select Dynamics CRM Online and Click on Select


Step 8  Select Access CRM Online as organisation users checkbox and click on Select Button


Step 9 Then click on Done



Build the Console Application 

Step 1 Navigate to Microsoft Url for sample for web API or click here quick start sample and extract to your desired location


Step 2 Open the Solution file in vs and you have to edit the code by reading the comment with TODO tag


Step 3 Update the service URLwith your current CRM organisation

Eg:
        private static string serviceUrl = "https://sa##x.crm8.dynamics.com";   // CRM Online



To get the client ID go to your app in Azure and copy the GUID specified for Application ID


To get the client ID go to your app in Azure and copy the GUID specified for Application ID and redirecting URL to Home Page URL ( will be same as you gave at the time of app creation in Redirecting URL)

Your Code should look like below

private static string serviceUrl = "https://sablecafex.crm8.dynamics.com";   // CRM Online
private static string userAccount = null;  //CRM user account
private static string domain = null;  //CRM server domain
private static string clientId = "e5cf0024-a66a-4f16-85ce-99ba97a24bb2";
private static string redirectUrl = "http://localhost";  //e.g. "http://localhost/SdkSample"

Step 3 Update Authentication Context with direct Authorisation Endpoint URL

To get Authorisation Endpoint URL go to your app in Azure click on Endpoints button


And copy the OAUTH 2.0 Authorization Endpoint URL


Replace the previous lines for getting authority information and update with the below code

string authority = "https://login.microsoftonline.com/e5cf0024-a66a-4f16-85ce-99ba97a24bb2/oauth2/authorize";
AuthenticationContext authContext = new AuthenticationContext(authority, false);



Your Code should look like below

//AuthenticationParameters ap = AuthenticationParameters.CreateFromResourceUrlAsync(
//        new Uri(serviceUrl + "api/data/")).Result;
//AuthenticationContext authContext = new AuthenticationContext(ap.Authority, false);

string authority = "https://login.microsoftonline.com/e5cf0024-a66a-4f16-85ce-99ba97a24bb2/oauth2/authorize";
AuthenticationContext authContext = new AuthenticationContext(authority, false);

AuthenticationResult authResult = authContext.AcquireToken(serviceUrl, clientId, new Uri(redirectUrl), PromptBehavior.Always);

The above code is connection with Prompt dialogue, for connection without prompt see my another thread - without prompt

Step 4 Rebuild

 Include the below reference to your project(to global config file the line before where your client credentials is configured) and change the .Net framework to 4.6.1 and rebuild 

"ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12"

for More details on it refer to my another thread here 


Step 5 Rebuild Your code and run it you will be prompted with sign in page enter your credentials


Step 5 Press on Accept


 And Your are done


You can have a look at my code here : My Sample Code

Inspired By : Nishant Rana's Weblog

Happy Coding and CRMing 😊

SOURCE : mscrm.com

Dynamics CRM V9 / D365 connection Error Console or Custom Web Application

Last Night I Created a new Organisation and Connected it with console app an then I faced a strange issue in CRM v9 while connecting to Org Service with D365 through web API. It was perfectly working before that. If any one faces the below issue then try the solution given below.

Issue : Connection to CRM V9 / D365 from console application or Custom Web application failed with exception

Error Observed:

Message : "One or more errors occurred." 
Source : "mscorlib"





ROOT CAUSE:

Its all because of the latest update in the Microsoft TSL(Transport Security Layer) Protocol in SDK assemblies..Microsoft allowed the TSL connection 1.0  and 1.1 for the browsers or client to connect the CRM org.Now Microsoft will support only TSL 1.2 or above going forward(Reference) . If you are connecting your org with the old version of plugin registration tool , then you may face this issue

SOLUTION:

Include the below reference to your project(to global config file the line before where your client credentials is configured) and change the .Net framework to 4.6.1 and rebuild 

"ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12"

Code Snippet :

//Create an HTTP client to send a request message to the CRM Web service.
                using (HttpClient httpClient = new HttpClient(messageHandler))
                {
                    //Specify the Web API address of the service and the period of time each request
                    // has to execute.
                    httpClient.BaseAddress = new Uri(serviceUrl);
                    httpClient.Timeout = new TimeSpan(0, 2, 0);  //2 minutes

                 
                    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

                    //Send the WhoAmI request to the Web API using a GET request.
                    var response = httpClient.GetAsync("api/data/v9.0/WhoAmI",
                            HttpCompletionOption.ResponseHeadersRead).Result;

                    if (response.IsSuccessStatusCode)
                    {
                        //Get the response content and parse it.
                        JObject body = JObject.Parse(response.Content.ReadAsStringAsync().Result);
                        Guid userId = (Guid)body["UserId"];
                        Console.WriteLine("Your system user ID is: {0}", userId);
                    }
                    else
                    {
                        Console.WriteLine("The request failed with a status of '{0}'",
                               response.ReasonPhrase);
                    }
                }

Happy Coding 😊

SOURCE : https://community.dynamics.com

CRM Rest Builder for Dynamics CRM D365 / MSCRM 2013, 2015, 2016

Navigate to the below URL and Download the latest version of the solution of CRM Rest Builder

For 2015 & 2016 & D365 use the v2.5.0.0 release
For 2011 & 2013 use the v1.5.0.0 release

1) CRM Rest Builder GIT Hub URL
2) CRM Rest Builder Drive  v2.5.0.0 , v1.5.0.0

And follow the below steps

Step 1 - Navigate to your Organisation Settings -> Solutions and click on Import Button



Step 2 - Click on to Browse Button



Step 3 - Navigate to the solution file previously downloaded and click on open and then click on Next



Step 4 - Click on to Import Button



Step 5 - After some time you will see the below success message



Step 6 - Now you will be able to see the CRM Rest Builder Button on the ribbon bar on solutions Click on it



And You are good to go with CRM Rest Builder



Happy CRMing 😊


SOURCE : mscrm.com