Tuesday, November 8, 2016

Set Focus on a control in CRM 2011

How to set focus on a control in CRM 2011 using Javascript


Option 1:
var control = Xrm.Page.ui.controls.get("AttributeName");
control.setFocus();

Option 2:

In some situations we need to show the alert to end user and then set the focus on the field where validation takes place, in this case setting focus directly on that fails so simply set the focus to a different field on the same tab first and then reassign the focus to the field from which the OnChange() event was called like so:


Xrm.Page.getControl("AnyFieldFromSameTab").setFocus(true);
Xrm.Page.getControl("TheFieldYouReallyWantToFocus").setFocus(true);


Wednesday, October 5, 2016

CRM 2016 New Form Rendering Engine

With the release of CRM 2016 (2015 Update 1 for CRM Online), comes a new form rendering engine built to provide better performance of form loads. The two main changes are focused around loading process of the form and the handling of the cache.

You might have noticed it when you open up an account or contact, two loading screen flash by (“requesting data from CRM” and “loading business logic”) just before your record is loaded.







If you are currently being plagued by these messages, it may be a good idea to turn the new rendering engine off. To do this, simply go to: Administration -> System Setting, scroll all the way down and you will see the “Use legacy form rendering” option. Turning it to “yes” will disable the new engine.


Monday, October 3, 2016

The specified active directory user already exists as a crm user.

We came across this error, when we were trying to Add new user into the CRM.

"The specified Active Directory user already exists as a CRM user"
"You are attempting to create a user with a domain logon that is already used by another user. Select another domain logon and try again."
This kind of error comes when you moved your database from other organization. Solution for this is explained below:
Note: This is unsupported way for the resolution. Please take a backup of both Config DB as well as MSCRM DB.
Solution 1: Please check whether the User you are trying to add is disabled. Change the view to disabled user, as the search on User entity in CRM work only for Enabled user.
Solution 2: (Unsupported)
       1.       Get SID for AD-user
1.1   Open Windows Powershell (Run as Administrator)
1.2   Type below command in the window.
$AdObj = New-Object System.Security.Principal.NTAccount("USERNAME")
$strSID = $AdObj.Translate([System.Security.Principal.SecurityIdentifier])
$strSID.Value

       2.       Login to SQL server (Config DB)
2.1   SIDs are stored in SystemUserAuthentication table of Config DB where it is being prefixed with “W:” where I think W may be referring as Windows.  Get the UserId for the SID which we identified in step 1.
select UserId,* from SystemUserAuthentication where
AuthInfo ='W:SIIDFromStep1'

       3.       I found the OrganizationId by querying the Organization table.

select Id,UniqueName from organization

       4.       I then found the SystemUserOrganizations record for the intersection of their user CRM user ID and the Org ID by running the following query:

select * from SystemUserOrganizations
where OrganizationId = 'OrganizationIDFromStep3'
AND UserId = 'UserIDFromStep2'

       5.       Backup MSCRM_CONFIG database & SystemUserOrganizations table using:

select * into SystemUserOrganizations _bak  from SystemUserOrganizations

       6.        I then deleted the SINGLE record identified in step 4.

delete from SystemUserOrganizations
where OrganizationId = 'OrganizationIDFromStep3'
AND UserId = 'UserIDFromStep2'

       7.       I went and added my user.

Again, this worked for me. I hope this helps someone else out, but your mileage may vary and don't blame me if things get messed up. :)

Friday, August 5, 2016

Access Denied trying to uninstall assemblies from GAC

On a CRM development server running on Windows Server 2008 R2, I had to uninstall some assemblies in the GAC and I kept getting access denied, when trying to delete them. This was the case both using gacutil.exe and the Windows Explorer when running in Administrative mode.
So, looking for at a way to do this, I had to change a Local Security Policy, in order to allow them to be deleted.
1.  Open Local Security Policy MMC.
2.  Goto Security Settings -> Local Policies -> Security Options
3.  Locate “User Account Control: Run all administrators in Admin Approval” and change the setting from Enabled to Disabled
4.  Reboot and now the assemblies can be deleted
IMPORTANT! Never ever do this on a production system, and always turn it back on afterwards.

Thursday, August 4, 2016

SQL Server performance for Dynamics CRM

Data Management Views, stores transnational information which can be used to monitor performance of SQL Server. Below are some queries which gives you data related to indexes used in your CRM database tables and which are the most expensive queries according to that you can troubleshoot the problem related to performance.


  • Index Usage

Select OBJECT_NAME(a.object_id),b.name,a.user_seeks,a.user_scans,a.* from sys.dm_db_index_usage_stats a join VirginMedia_MSCRM.sys.indexes b on a.object_id = b.object_id and a.index_id = b.index_id
Where a.database_id = DB_ID('YourOrganizationName_MSCRM')order by b.name

  •       Most Expensive Queries
SELECT top 100 SUBSTRING(qt.TEXT, (qs.statement_start_offset/2)+1,((CASE qs.statement_end_offset WHEN -1 THEN DATALENGTH(qt.TEXT) ELSE qs.statement_end_offset END - qs.statement_start_offset)/2)+1),
qs.execution_count,
qs.total_logical_reads, qs.last_logical_reads,
qs.total_logical_writes, qs.last_logical_writes,
qs.total_worker_time,
qs.last_worker_time,
qs.total_elapsed_time/1000000 total_elapsed_time_in_S,
qs.last_elapsed_time/1000000 last_elapsed_time_in_S,
qs.last_execution_time,
qp.query_plan
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp
ORDER BY
qs.total_logical_reads DESC -- logical reads



  •              Missing Indexes
SELECT
      migs.avg_total_user_cost * (migs.avg_user_impact / 100.0) * (migs.user_seeks + migs.user_scans) AS improvement_measure,
      'CREATE INDEX [myIndex_' + CONVERT (varchar, mig.index_group_handle) + '_' + CONVERT (varchar, mid.index_handle)
      + '_' + LEFT (PARSENAME(mid.statement, 1), 32) + ']'
      + ' ON ' + mid.statement
      + ' (' + ISNULL (mid.equality_columns,'')
      + CASE WHEN mid.equality_columns IS NOT NULL AND mid.inequality_columns IS NOT NULL THEN ',' ELSE '' END
      + ISNULL (mid.inequality_columns, '')
      + ')'
      + ISNULL (' INCLUDE (' + mid.included_columns + ')', '') AS create_index_statement,
      migs.*, mid.database_id, mid.[object_id]
FROM sys.dm_db_missing_index_groups mig
INNER JOIN sys.dm_db_missing_index_group_stats migs ON migs.group_handle = mig.index_group_handle
INNER JOIN sys.dm_db_missing_index_details mid ON mig.index_handle = mid.index_handle
WHERE migs.avg_total_user_cost * (migs.avg_user_impact / 100.0) * (migs.user_seeks + migs.user_scans) > 10

ORDER BY migs.avg_total_user_cost * migs.avg_user_impact * (migs.user_seeks + migs.user_scans) DESC

Improve MS CRM overall performance

Recently in a customer environment we observed performance issues with CRM application, here are some Checklist everyone should go through to improve overall CRM & server performance.