Sticky

This blog has moved to www.dreamingincrm.com. Please update your feed Url. Thank you.

4 June 2014

Update Tooltip using XrmToolBox Easy Translator

XrmToolBox is one of my favorite tools, that I use everyday. Among the 20+ tools in XrmToolbox, these are my top three by  usage
1.) Sitemap Editor
2.) Web Resources Manager
3.) View Layout Replicator

Among all these tools, which are all exceptional, Easy Translator is one I never used, as I work only on CRM Deployments with English as the primary language and no requirement from any of the users for alternate languages. There is a interesting usecase for this tool, apart from translation. You can use this to update the tooltip text is CRM 2013. Tooltip text in CRM 2013 is picked up from the description on the field property.


The account name field will show the tooltip text as "Type the company name or business name" when the user hovers over the label.


If we want to setup meaningful tooltips for lot of fields, it is easier to do this via Easy Translator. First export the selected entity to Excel using Easy Translator. I this case I have just chosen Account. We just want to export only the Attributes.


Next open the file in Excel and update Description for the attributes that require a different tooltip text, I this case I am going to change the tooltip text only for the Account Name field to "Type the organisation name or business name".

Save the Excel file and import it.

The tooltip text should now reflect your changes.



2 June 2014

Deployment Manager exception after installing UR17 in CRM 2011

I recently encountered an issue with an existing CRM 2011 environment after installing Rollup 17. The deployment manager would crash with this following error.

Type is not resolved for member 'Microsoft.Crm.CrmSecurityException,Microsoft.Crm.Core, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'.

I turned on CRM tracing and this seems to be the underlying error.

at CrmException..ctor(String message, Exception innerException, Int32 errorCode, Boolean isFlowControlException)  ilOffset = 0x0
at CrmException..ctor(String message, Exception innerException, Int32 errorCode)  ilOffset = 0x0
at SecurityUtils.GetActiveDirectoryEntry(String searchItem, String searchFilter, String searchItemLogInfo, Boolean throwIfNotFound, String domainName)  ilOffset = 0x44
at SystemUserService.GetCaseSafeName(String domain, String accountName)  ilOffset = 0x188
at SystemUserService.GetCaseSafeName(String name)  ilOffset = 0x50
at SystemUserService.GetIdsFromName(String userName)  ilOffset = 0xB
at SecurityRoleService.TryVerifyUser(String userName, SecurityRole role)  ilOffset = 0xC
at SystemUserController.TryVerifyUser()  ilOffset = 0xD
at DMSnapInHelper.DisplayMessageBoxIfCurrentUserIsNotSystemUser(Console console)  ilOffset = 0x0
at DMSnapIn.OnInitialize()  ilOffset = 0x27
at SnapInBase.Initialized()  ilOffset = 0x41
at SnapInClient.Microsoft.ManagementConsole.Internal.ISnapInClient.Initialize(ISnapInPlatform snapInPlatform)  ilOffset = 0x14
at UnsafeNativeMethods.DispatchMessageW(MSG& msg)  ilOffset = 0xFFFFFFFF
at ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)  ilOffset = 0x18E
at ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)  ilOffset = 0x1F7
at ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)  ilOffset = 0x13
at SnapInMessagePumpProxy.Microsoft.ManagementConsole.Internal.ISnapInMessagePumpProxy.Run()  ilOffset = 0x34
>Crm Exception: Message: Could not find AD entry for : 09283477 with SearchFilter: samAccountName, ErrorCode: -2147214038, InnerException: System.DirectoryServices.ActiveDirectory.ActiveDirectoryObjectNotFoundException: The specified domain does not exist or cannot be contacted.
at System.DirectoryServices.ActiveDirectory.Domain.GetDomain(DirectoryContext context)
at Microsoft.Crm.SecurityUtils.GetActiveDirectoryEntry(String searchItem, String searchFilter, String searchItemLogInfo, Boolean throwIfNotFound, String domainName)

After much troubleshooting with CRM tracing, Netmon, LDAP Tracing and Wireshark I was able to ascertain that this exception is thrown right after Deployment Manager sends a NbtNs packet before crashing.
 I wrote a small console application to see if this could be a Domain Controller issue. There was no NbtNs packet sent out in my console application and it was successfully able to query the user details.

I posted this in CRM forums and it seems that others also are having the same issue, after moving to Rollup 17. This seems to be a bug in UR17, which cannot handle more than 15 characters in Domain Name (according to the poster). Here is the forum post https://community.dynamics.com/crm/f/117/t/128100.aspx

The was also an additional issue I encountered when I tried to uninstall UR17. The uninstall process would crash with a owner_importlogs key violation on ImportLogBase table. It seems the uninstall process wants to insert two rows with Owner Id = Guid.Empty in the ImportLogBase table.

I had to disable this constraint, allow the uninstall process to finish and later delete these two rows.

So if are having similar issues with Deployment Manager after installing UR17, downgrade to UR16 or wait for UR18.

UPDATE: Issue tracked in Connect -> https://connect.microsoft.com/dynamicssuggestions/feedbackdetail/view/883263/bug-ur17-deployment-manager-domain-resolution