How – To Series 16: UR 12 – Downside of Auto Save feature

Update: This issue is fixed now with MS CRM 2013 Org Level Setting. Following is the update: all,
UR 12 has introduced a nice feature called “Auto Save” which will save the CRM Records(only Process Driven UIs) in the background automatically when it get updated by the user in UI.

When a field value changed by user, in the bottom right corner a label as “Unsaved Changes” gets displayed:

After few seconds(15-20 sec), forms gets saved automatically:

From usability point of view, it’s a very nice feature… then what’s going wrong??

When I came to know about this feature, few things came to my mind:

Scenario1: Lets say I have registered a workflow or a plugin on “onChange” of a field called “fax” in “account” entity. User has entered some value(1234) in the “fax” field and went on to fill other fields. After few seconds(lets say 20 sec) form gets saved automatically in the background. Incase if user feels he entered some wrong value in “fax” field so he/she modified the field again.

Prior to UR12 or with Classic Forms: User saves the form manually. Even though user modifies the same field twice, field value gets saved to the database once(in one transaction). And the workflow which is registerd will fire once and completes it’s tasks.

with UR12 Process Driven Froms: As user modifies the same field twice(one before the auto save and one after the background save), field value gets saved to the database twice(in two transactions). And the workflow which is registerd will fire twice…..

Scenario2: Lets say I have registered a workflow or a plugin on “onChange” of fields called “fax” and “email” in “account” entity. User has entered some value(1234) in the “fax” field. After few seconds(lets say 20 sec) form gets saved automatically in the background. Then user modifies the “email” field. After few seconds form gets saved in the background

Prior to UR12 or with Classic Forms: User saves the form manually. workflow will be triggered only once.

with UR12 Process Driven Froms: As user modifies two fields (one before the auto save and one after the background save), two field values gets saved to the database in two different transactions. And the workflow which is registerd will fire twice…..

To verfiy that, I have registered a workflow on “fax” and “email” field. Added a step to attach notes with fax and email field vlaues:

Result after Scenario 1:

Workflow instances:

Created Notes:

Created Notes when fax got updated to 1234

Created Notes when fax got updated to 1234567

In the same manner, for the second scenario too workflow got triggered twice…

Is it the expected behavior??? or Is it a design glitch??? or something am I missing??? So, if we gonna use Process Driven forms then what should be the considerations for extending the entity behavior??

Fingers Crossed….!!! 🙂

Share me your thoughts…!!!

How – To Series 15: UR 12 – How to enable Process Driven Forms

Hi all,
The most feature rich release(Polaris) post CRM 2011 has already been out and excited to see the same applied on my CRM online instance. Following is the snapshot of CRM 2011 in Chrome Browser.CRM Online(Polaris) Landing Page:

Account Home Page Grid:

Account Form:

Few observations:

1. As expected, “Areas” in Left Navigation Pane doesn’t have icons.
2. “Resource Center” still exists as it should not(we will come to know when it will be removed)
3. In “Account” grid, “account” icon column has been removed.
4. Coming to Ribbon, disabled ribbons are greyed but still retaining their icon colours.
5. Tab text colour changed to light blue and size got decreased.
6. No divider line between header and body
7. New icons(refresh, arrow buttons etc..)
8. Significant control highlighting with border when it get focused
9. And the notable difference is in “Notes” Section:

Now, we can type notes text and upload an attachment at one go whereas earlier it used to be one after the other.

Overall at first glance you can find certain CSS changes. In order to find exact CSS changes I downloaded the SDK v5.0.13 for polaris & UR12 . However, the visual style guide doesn’t include the latest CSS changes. Is it a miss in the package??

Now, lets come to the main course…where are the Process driven UI for Account, Contact and Opportunity entities? As we heard it earlier that there will be a new form for each entity(Account, Contact and Opportunity)which will have same name as their entity schema name. However, in the above account form, you don’t see it having an option to select another form. As most of you might have already know that we need to explicitly enable this feature so as customer will have the flexibility to choose when they require this. Remember once this feature is enabled we cannot revert it.

To enable, navigate to “Settings->Administration->Product Updates and click on “Update” button

It will take few minutes to install the updates. Once it gets installed, you will see the following content:

Installation process actually involves in creating the new UI forms, a new entity called “Process Configuration”, appropriate assignment of privileges and all the required components for them.  However, the new UI forms won’t contain all the customization whichever we have done prior to UR12. So, we need to migrate them manually(First point in the above screenshot talks about that). As I am having a new CRM instance which doesn’t have any customizations, I am good to go and use the new UI forms as is. Again, you are not yet done. Click on the second link(Enable the new forms) to enable the new UI feature.

Refresh your page and you can see that “Resource Center” Area has been disappered.

Account Form(Process driven):

Contact Form(Process driven):

Opportunity Form(Process driven):

Getting a taste of Metro Style design app in CRM…???

There are lot more stuff of UR 12 to try out… Happy CRMing..!!! 🙂

Hope it helps..!!! 🙂


Post Sync Plugins not allowed for certain System entities?

I was getting some errors when trying to associate some records on creation of “User” and “Team” entities. I have registered “Post – Sync” step for those plugins.Getting following error for “Post” “Sync” plugin on “User” creation:
Error: usersettings with Id Does not Exist.


Getting following error for “Post” “Sync” plugin on “Team” creation:
Error: Generic SQL Error.

Changing them from “Post – Sync” to “Post – ASync” resolved the issue. It looks like SQL Locks might be causing the issue. There may be few more System entities for which the same is applicable. There is no documentation available specifying for which System entities creation “Post – Sync” plugins are not allowed. So, next time if you get any of the above errors for any of the other entities then try to change it to “ASync” and see whether it resolves your issue.

Hope it helps..!!! 🙂

Hidden Security Role in MS CRM….!!!????

     Recently I was trying to assign all the available Security Roles in a Business Unit to a particular User using following Code:

     private void AssignSecurityRoles(IOrganizationService service, Guid userId)  
       QueryExpression query = new QueryExpression  
         EntityName = "role",  
         ColumnSet = new ColumnSet("name")  
       EntityCollection roles = service.RetrieveMultiple(query);  
       EntityReferenceCollection entityRefCln = new EntityReferenceCollection();  
       foreach (Entity entity in roles.Entities)  
       service.Associate("systemuser", userId, new Relationship("systemuserroles_association"), entityRefCln);  

To my suprise, I received following error: “The Support User role cannot be assigned to a User”

After debugging the code, I found that there is one role called “Support User” security role present in the list of retrieved security roles. I never seen this role in the CRM UI so quickly went through the CRM UI app and to my surprise it is not available. However, it is present in the SQL Server… !!! Doesn’t it mean it’s a hidden role???? Not aware of the actual purpose of this role. As per SDK documentation, “A user who is a customer support engineer” is the description for the Security Role.

I added an additional conditional to avoid associating “Support User” security role for the time being. Anyone has an idea about the purpose this Security Role????

How – To Series 13: How to Hide System Chart or User Chart Name in Dashboard

Hi all,
I have worked on one of the requirement to hide lables of all charts(System or User) in all the dashboards. This requirement has been done more than once for different instances. Thought of sharing so that it will be helpful to someone.         By default, Chart Name and view Name will be shown in every chart when it is displayed in a dashboard as follows:

Inorder to hide the chart lable, I thought of going with the following appraoch
              In Post Stage of chart retrieval, replace the chart name with an empty string.

Pluing Code:

public void Execute(IServiceProvider serviceProvider)

// Get the context

IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));

// Check the required pre-requisits; if not, exit
if (!(context.MessageName.ToLower() == “retrieve” && (context.PrimaryEntityName.ToLower() == “savedqueryvisualization” || context.PrimaryEntityName.ToLower() == “userqueryvisualization”)))

// Get the chart entity
Entity entity = (Entity)context.OutputParameters[“BusinessEntity”];

//Replace the chart name with empty string.
if (entity.Attributes.Contains(“name”))
entity.Attributes[“name”] = string.Empty;

As chart can be either System or User so register the plugin on following two steps:


Once plugin is registered, following is the result:

I have also shared the code here
Hope it helps..!!! 🙂


Reserved Organizations in MS CRM…!!!!!

Today I got the following error when I tried to create an organization with name “Tools”. The error message says I am using a reserved name “Tools”. Never paid attention to the “reserved names” mentioned in the error message and unaware that we do have this restriction. A quick search pointed me to following blog post which has the query to findout the reserved organizations in MS CRM: 

Following is the list of Restricted Organizations:

1 About
2 Activities
3 AdvancedFind
4 api
5 AppWebServices
6 aspnet_client
7 bi
8 bin
9 Biz
10 Calendar
11 Condition
12 CRMReports
13 CS
14 dev
15 Help
16 Home
17 Import
18 MA
19 MSCRMServices
20 Notes
21 Products
22 rc
23 Reports
24 ReportServer
25 ResourceCenter
26 Sdk
27 SFA
28 signin
29 SM
30 support
31 Tools
32 tsweb
33 UnitTests
34 UserDefined
35 Workplace

Just thought of sharing…!!!! 🙂

How – To Series 12: Another restriction from Field Leve Security….!!!?

We all know that only OOB fields have been restricted from Field Level Security and all the custom fields can have Field Level Security. However, today i tried creating a new field of type “Single Line of Text” of format”EMail” with “Field Level Security” enabled.To my surprise I can see the following error:

And this is the error message in the Log file: “This field is not

I raised this issue with MSConnect here . Need to findout whether its bug or by design.

How-To Series 11: How To Trigger a plugin on Sharing a Record and Send An EMail

Hi All,
Today I have seen one forum post asking for Sending an email on Sharing a record. So, thought of implementing the same and blog it over here.
When a record is shared, a “PrincipalObjectAccess” record will be created in DB. However, we can’t register a plugin on “Create” Message for “PrincipalObjectAccess” entity. Instead, we can register it on “GrantAccess” message which will be triggered on sharing the record. So, simply register your plugin as follows:

Following is the piece of plugin code to get the details of record being shared and the users/team for whom the record has been shared. Here I am trying to send an email to the user for whom the record has been shared.

// The InputParameters collection contains all the data passed in the message request.if (context.InputParameters.Contains(“Target”) && context.InputParameters[“Target”] is EntityReference)

{// Entity Record which has been shared
EntityReference sharedRecord = ((EntityReference)context.InputParameters[“Target”]);
// System User for whom the record has been shared
EntityReference sysUser = ((PrincipalAccess)context.InputParameters[“PrincipalAccess”]).Principal;

// System User ID who has shared the record
Guid fromUserId = context.UserId;
// Send An EMail
SendEmail(service, sysUser, fromUserId, sharedRecord);

I have shared the entire plugin code over here: Here

PS: If we have shared the record to multiple users then this plugin will also be triggered multiple times. This means that, if you have shared a record to 5 users then an email will be sent to 5 users seperately not in a single shot.

Hope it helps…!!! 🙂

How-To Series 10: How To get Selected Record Entity Name from Activities or Queue Item Entity Home Page Grid

Hi All,
           We know that we can use “SelectedEntityTypeName” to get the selected record’s “Entity Name” in a Grid. This is useful for every entity with an exception to couple of entities like “Queue Item” and “Acitivity” HomePage Grids as these will display records belongs to more than one entity. For an instance, “Activities” will display “EMail, Phonecall, Appointment etc..”. 
           So, if you want to retireve the selected record’s entity name then use the following function. The following function requires all the views in the grid to have the entity name as one of the column at the same location. It will retrieve selected record’s Id along with its entity name. Its the same way we used to do in CRM 4.0’s ISV.Config.
function ShowSelectedIdsWithEntityName()
var selectedrecords = document.all[‘crmGrid’].InnerGrid.SelectedRecords;
for (var i=0; i < selectedrecords.length; i++)
//This will return the selected record guid
alert(“Selected Record Id: “+selectedrecords [i][0]);
// This will return the 5th column data. OOB, in “Queue Item” entity “Type(Entity Name)” is the 5th column for all views.
alert(“Selected Entity Name: “+selectedrecords [i][3].cells[4].innerText);

Following is for “Queue Item” entity.

Hope it helps….

Vikranth P.