Thursday, August 25, 2016

Insufficient Permissions

When users get the Insufficient Permissions dialog, it means that security will not permit them to do the task they wanted. Sometimes this is desirable as you don't want to give users permission
The key to deciphering a permission issue in Dynamics CRM is in the log file. Click the Download Log File button. This will be an XML file containing a bunch of stuff that is difficult to comprehend, but using these steps to find just what you need will help make this easier.

Step 1: look for the Message tag. In my example, I see the following: 

SecLib::AccessCheckEx failed. Returned hr = -2147187962, ObjectID: 16476d24-ca68-e611-80cd-0050568077fb, OwnerId: 153d564f-1264-e611-80cc-0050568077fb, OwnerIdType: 8 and CallingUser: 400b5cdc-0d64-e611-80cc-0050568077fb. ObjectTypeCode: 3, objectBusinessUnitId: 8439abf5-4a07-e611-80c0-0050568077fb, AccessRights: AppendAccess 

Step 2: The parts you need to look at are the ObjectTypeCode, and the AccessRights. You can identify the entity by checking the ObjectTypeCode against this reference: https://msdynamicscrmblog.wordpress.com/2013/07/18/entity-type-codes-in-dynamics-crm-2011/ so in this case, the entity is the Opportunity.

 Step 3: Check the users rights for the Opportunity entity. You do this by opening the users record (under settings/users) and then click the Manage Roles in the command bar (sometimes it is under the "..." more commands icon). Make a note of all the Security Roles assigned to the user. Note: Some users can have more than one role.

Step 4: View the assigned Security Roles (under the Security menu in the main navigation).
In this case, the user only has rights to Append records to her own opportunities. 


Step 5: It appears in this case that the user must not have had ownership of the Opportunity record and therefore could not Append any information to it, such as a note, activity, product, or a connection. To resolve the issue, you can assign the ownership of the record to the user (if it is just one time), or give her full rights to append to opportunities to records owned by others. In some cases, you might want to build more complex workflows that assign ownership of an opportunity depending on what stage the sales process is in order to control who can make changes during the sales process.

Saturday, May 7, 2016

Using FetchXML in a CRM form without having to use string concatenation

I am a solution architect using Microsoft Dynamics CRM, and I must be the laziest programmer I know. I HATE to write FetchXML code embedded in Javascript. But I am getting over it. I started using FetchXML Builder add-on to XRM Toolbox and that was very helpful for working with CRM Online. But last week I needed to query the Product table in a custom form to pull back a list price of a product, and I was dreading the thought of having to add all the little quotes and doing string concatenation because I knew I would be tweeking it and repeatedly making changes in FetchXML builder, them moving the query code back to Javascript and making it a bunch of concatenated strings (wash, rinse, repeat).

If I were putting the FetchXML into a C# program, no problem because that language supports having multi-line strings. And I could use Format.string() to insert my parameters into the code so I don't have to concatenate that either.

Not so much in Javascript. So I did some research and found some articles on how it could be done. I can put the FetchXML between comments and then use a regular expression to make it into a legit string. As long as nobody turns on 'compression' on the web server, it should continue to work. The code looks like this:

The last function in this takes care of replacing the {0} in my FetchXML with the GUID I need in the query. Line 15 of my code gets the GUID from a lookup field, and Line 16 calls the Format function to replace the {0} parameter with the GUID.

Friday, May 6, 2016


I am ready for email 2.0.
Have you ever heard someone say that your email inbox is really full of other peoples agendas?
I want to be able to say what my agendas are, and make the sender tell me why their message should be on my agenda.

In fact, when I get an email, why is it that I cannot add my own information (metadata) to it?
The best that any system seems to offer is to let me put it into a folder. Really?
Aren't we past the whole idea that everything lives in some kind of taxonomy?

What if an email relates to two different subjects?
For example, an expense receipt for a customer might be categorized under receipts, expense, and a customer name.
When I get an email, I want to add some of my own keywords to it so that I can cross reference it different ways.

Don't get me wrong, I still like the folders, but they are the _only_ metadata I can easily add to my mail.
Well...not the only metadata.
I have Outlook and I can add multiple categories, but it is limited to a small number and I bet I would have more than it supports.


Thanks for letting me get that out of my system.
I found this article on Outlook best practices that I like.
https://support.office.com/en-us/article/Best-practices-for-Outlook-2010-f90e5f69-8832-4d89-95b3-bfdf76c82ef8

Back to the inbox.