When you can’t go backwards, make sure you heading in the right direction before you start walking – The Hosk
Studying for the MB2-703 I always learn things I hadn’t realised before or maybe I notice different things as I become more comfortable with fundamentals.
Like rereading a book, you notice things you hadn’t noticed the first time round.
I was reading about Entities which is main part of the CRM 2013 Customization and configuration exam (resources here if you are studying for this). Most CRM developers/customizers will have created a whole bunch of entities.
Entity Ownership is the same in CRM 2011, CRM 2013 and CRM 2015 so it’s good to learn about it.
When ever you create a new entity, you have to make a choice about Entity Ownership
What is Entity ownership?
When you create a new entity, you have to set the ownership options, How many ownership options are there?
I’m guessing most of you reading are going to say two.
- Organization Owned
- User Or Team
but did you know there are other types? Hidden types that only Microsoft can use/made up
I shall let Microsoft and the MSDN article explain
There are several types of entity ownership. Most entities, including custom entities, are owned by the organization, by a user, or a team. There are some business entities that do not have an owner, such as discount type (discount list), where the ownership is defined by its parent entity discount. The type of ownership defines some of the operations that can be performed on a record. Ownership for an entity is defined in the metadata property OwnershipType. The following table lists the ownership properties.
|Organization Owned||Contains data involving something that belongs to or that can be viewed by the whole organization. Organization-owned entities cannot be assigned or shared. For example, products are owned by the organization. These entities have an attribute named organizationid.|
|Business Owned||Entities that belong to a business unit. These entities have an attribute named owningbusinessunit.|
|User or Team Owned||Assigned to a user or to a team. These entities contain data that relates to customers, such as accounts or contacts. Security can be defined according to the business unit for the user or team. These entities have attributes named owningteam and owninguser.|
|None||These entities are not owned by another entity.|
Business Owned and None!
I will admit I had never thought about the ownership options on the system entities and to think some business entities (new term) which do not have an owner.
I find it intriguing when you see how Microsoft bend the rules when creating system entities and data, so they can create the default functionality in CRM but it’s only when you understand how the entities and ownership works that you can understand how Microsoft have bent these rules and why.
Entity ownership Choice
I find making the choice of entity ownership is always a painful one, it always causes me to spend a few minutes deciding whether it should be organizational or user/team. I’m always keen to choose organization where possible because it’s neater (when used appropriotly) and doesn’t create those extra fields.
Why is the choice important?
I know most CRM developers choose the default choice of User or team entity ownership and don’t even think about it, in fact I’m sure a lot of CRM developers don’t even know there is an choice about entity ownership (based on the fact I rarely see any choose organization entity ownership)
One reason making the choice takes a bit of time is once you make that choice and save it, there is no turning back. It’s one of those decisions that cannot be reversed. If you change your mind you have to delete the entity and start all over again.
Like some of the entity checkboxes – send email, queues, Connections, business process flows. Once you tick these, they have the cross of doom and can never be unticked!!
Choosing ownership is probably more like selecting if an Entity is an activity, you make the decision and the only way back is deleting and recreating the entity.
So I have made it clear it’s a decision you don’t really want to get wrong and it’s not really that important because if in doubt you can choose user/team ownership and not use owning fields and functionality.
What’s the difference, Why does it matter
To understand why the decision is important you need to think about what happens when you choose one of the options and the security ramification of the decision
When you choose Ownership of User/Team
After you have chosen Entity ownership type of user/team, CRM will create some additional fields to enable the records to be owned by users/teams.
It creates fields for OwningUser, OwningTeam, owningbusinessunit and ownerid.
The reason it creates all the fields is for the security roles and the five access levels
You have to record the business unit of the user/team so the security role can work out what other users can view the record.
If you selected organization level of Entity Ownership then it has two access levels None and Global.
Organisation ownership means the entity will not have an owner field or any of the other user/team/business unit lookups. Global or none visibility means the entity will ignore the business units of the users
Practical Considerations of Entity Ownership
So if organization entity ownership only has access levels of none or global when would you use it?
If no one needs to own the records, entities like
- Config Settings
If in doubt, select User/Team
I have put this rule in because if you find you do need to hide visibility of an entity or think you might then you should select this option
But if the entity doesn’t need to be owned by anyone or there is no need to hide the records from groups of users then make the entity ownership type to organisation and save yourself the bother of having all those needless ownership fields and views and security settings
Changing an entity from organisation ownership to user/team
Scott and Jukka made some good points on twitter and I felt I should update this post with the information.
I mentioned above you can’t go back on your decision but what can happen is the project can happily move forward and then at some point in the future the customer will decide this entity now has some security requirements on the entity.
Changing an entity from entity ownership type Organisation to User/Team is not possible. What you would have to do is create a new entity with the ownership type user/team. Export all the data from your old entity and import it into your new entity. Configure security roles and then delete the old entity.
In other words loads of work, so you have to be very sure
Here are their comments
@BenHosk I always select ‘User or Team’ just in case security requirements comes along later!
@BenHosk @ScottDurow I’ve never regretted setting entity ownership as User, whereas I have seen significant rework caused by Org owned ones.
Here is another good article on the subject
Practical Dynamics CRM- User-Owned or Organization-Owned Entities?
Your articles are great but the flying dots on your page really hurt the eyes. Please stop them.
Very good article. One comment:
The caveat is that for every user-own entity, there will be additional lookup around PrincipleObjectAccess table thus performance impact for every ready, update etc. This is required to enforce the ownership for each record thus impacts the performance.
So I use thumb rule that if security requirements are not clear and entity is related to customer then chances are that you will want to implement security in future so go with user owned.
Otherwise organization wide should be fine. In other words, try to keep things simple if possible.
Great point. If there is a possibility you might need security then its best to make it user owned because changing is difficult
However one need to be careful as most of the custom entities will be related to Customer eventually. Also one needs to be careful the impact of additional looks and updates which will happen on these entities behind the scene if one is using high volumes. Then this decision will become costly.
Another consideration is that if you want to create goals, the entities must be user/team owned. We made a lot of our entities in our product organization owned to save on lookups/clutter and now have customers that want to create goals related to these entities.
I’m always in doubt when making the decision 🙂