Tuesday, 25 December 2018

Get Organization Unit (OU) Name - MS CRM 2011/2013/2015/2016/D365 On-Premise

Get Organization Unit (OU) Name MS CRM 2011/2013/2015/2016/D365 On-Premise - 


You may find the OU Name which you configured while installing CRM2011/2013/2015/2016/D365 On-Premise

On the CRM server (where you installed MSCRM2011/2013/2015/2016/D365 On-Premise)

Navigate to below path.

C:\Users\userID which you used to install CRM\AppData\Roaming\Microsoft\MSCRM\Logs\crmserversetup.log

open this file with notepad 

press Control+F

Find this word :   OUDistinguishedName

you will get the OU Name there in below format.

OU=OU NAME-OU,DC=your domain,DC=your domain,DC=com

Thursday, 20 December 2018

The request failed. The request was aborted: Could not create SSL/TLS secure channel.

Error: The request was aborted: Could not create SSL/TLS secure channel.



Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.


ReasonThe error is generic and there are many reasons why the SSL/TLS negotiation may fail. The most common is an invalid or expired server certificate, and you took care of that by providing your own server certificate validation hook, but is not necessarily the only reason. The server may require mutual authentication, it may be configured with a suites of ciphers not supported by your client, it may have a time drift too big for the handshake to succeed and many more reasons.



Solution: Added some more code to make it works -


ServicePointManager.Expect100Continue = true;
ServicePointManager.DefaultConnectionLimit = 9999;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12 | SecurityProtocolType.Ssl3;


Saturday, 1 December 2018

Windows Authentication Errors on local Servers

Windows Authentication Errors on local Servers (Loopback Protection)


Issue:

When logged into your Windows server, IIS Windows authentication through a browser does not work for either Windows Auth or Basic Auth using Windows user accounts. Login attempts just fail with a 401 error.
However, accessing the same site externally and logging in works just fine, using Windows log on credentials. It only fails when on the local machine.

Cause:
This problem is caused by a policy called Loopback Protection that is enabled on server OSs by default. Loopback Protection disables authenticating against local Windows accounts through HTTP and a Web browser.

Resolution:
Perform this configuration manually find this key in the registry on the server:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
and edit or add a new key:
DisableLoopbackCheck (DWORD)
then sent the value to 1 to disable the loopback check (local authentication works), or to 0 (local authentication is not allowed).

Using PowerShell:
New-ItemProperty HKLM:\System\CurrentControlSet\Control\Lsa -Name "DisableLoopbackCheck" -Value "1" -PropertyType dword

Thursday, 1 November 2018

Domain Migration/Change for Existing MSCRM/D365 On-Premise

Domain Migration/Change for Existing MSCRM/D365 On-Premise


Query: If your office and changed to a new domain and the users are all migrated to the new domain. Users are currently accessing CRM with the old credentials and you are planning to change the domain of existing CRM to point to new.  Please advise me with the best approach to proceed further -

There are 2 Approaches you can follow to migrate domain -


Approach 1

1) Install CRM on a new server in the new domain.

2) use SQL backup restore to move the MSCRM DB to SQL Server in the new domain

3) Point to CRM new CRM OU while DB import

4) Use the user mapping tool to change the existing domain with the new domain name.

5) Use a CRM deployment manager to import it as a new organization.


Approach 2

1) Directly change the Domain name of the existing CRM setup

2) Modify registry or update database appropriately to fix the server URL / ConfigDB changes and so on.

Sunday, 28 October 2018

Reporting Error: Error while fetching data extension






Resolution You might use either of the below two solutions or both:
  
1)      SQL Server Reporting Service is not running on server. 

Check SQL Server Reporting Service for its status. Start the service if its already not running. Follow these steps:

ü  Start > Administrative Tools > Services
ü  Right click SQL Server Reporting Service > Properties > Start
ü  Check SQL Reporting Services URL for the Organization

2)      The SQL Report Server URL must have been configured incorrectly

Follow below steps to resolve:

ü  Open Deployment Manager
ü  Disable the Organization for which Reports are not running
ü  Click Edit Organization
ü  Check Report Server URL is correct or not. If it is not correct, update the Report Server URL. It might be of the kind http://crmsrv:5555/ReportServer
ü  Follow the wizard further and click Finish
ü  Enable the CRM Organization

* To know the correct URL for Report Server, open Reporting Services Configuration Manager and click on Web Service URL and check the URL towards the below of dialog window.


Sunday, 21 October 2018

Validation are allowed in MSCRM using JavaScript

1. The contacts first and last name must be alphabets ([A-Z][a-z])
function validateLastName(executionContext) {
   var formContext = typeof executionContext != 'undefined' ? executionContext.getFormContext() : Xrm.Page; // get formContext
   
   var pattern = /[^a-z]/ig;
   var fieldName = 'lastname';
   var currentValue = formContext.getAttribute('lastname').getValue(); 
   if (pattern.test(currentValue)) {
     formContext.getControl(fieldName).setNotification('Invalid value, please only enter letters.');
   } else {
     formContext.getControl(fieldName).clearNotification();
   }

}
2. The account names can have 8 special characters such as & , ', ",  #, -, /, <, >
function validateAccountName(executionContext) {
   var formContext = typeof executionContext != 'undefined' ? executionContext.getFormContext() : Xrm.Page; // get formContext
   
   var pattern = /[^a-z0-9&\'"#\-\/<>]/ig;
   var fieldName = 'name';
   var currentValue = formContext.getAttribute(fieldName).getValue(); 
   if (pattern.test(currentValue)) {
     formContext.getControl(fieldName).setNotification('Invalid value, only these special characters are allowed: &\'" #-/<>');
   } else {
     formContext.getControl(fieldName).clearNotification();
   }

}
3. The city name must be alphabets ([A-Z][a-z])
function validateCity1(executionContext) {
   var formContext = typeof executionContext != 'undefined' ? executionContext.getFormContext() : Xrm.Page; // get formContext
   
   var pattern = /[^a-z]/ig;
   var fieldName = 'address1_city';
   var currentValue = formContext.getAttribute(fieldName).getValue(); 
   if (pattern.test(currentValue)) {
     formContext.getControl(fieldName).setNotification('Invalid value, please enter only letters.');
   } else {
     formContext.getControl(fieldName).clearNotification();
   }

}
4. The phone number attribute can have only  0-9, -, (,) characters as a valid characters
function validateTelephone1(executionContext) {
   var formContext = executionContext ? executionContext.getFormContext() : Xrm.Page; // get formContext
   
   var pattern = /[^0-9,\-]/ig;
   var fieldName = 'telephone1';
   var currentValue = formContext.getAttribute(fieldName).getValue(); 
   if (pattern.test(currentValue)) {
     formContext.getControl(fieldName).setNotification('Invalid value, please enter only numbers or - and ,');
   } else {
     formContext.getControl(fieldName).clearNotification();
   }
}
5. The postal code attribute can have only 0-9, - characters as a valid characters
function validatePostalCode(executionContext) {
   var formContext = typeof executionContext != 'undefined' ? executionContext.getFormContext() : Xrm.Page; // get formContext
   var pattern = /[^0-9\-]/ig;
   var fieldName = 'address1_postalcode';
   var currentValue = formContext.getAttribute(fieldName).getValue(); 
   if (pattern.test(currentValue)) {
     formContext.getControl(fieldName).setNotification('Invalid value, please enter only numbers or -');
   } else {
     formContext.getControl(fieldName).clearNotification();
   }
}