Security roles are inherited by child business units in Microsoft Dynamics. As I mentioned in a previous blog Sneaky Cylon Copies of Your CRM Security Roles, security roles have linked copies that have the same name but are separate entries with their own unique guids for each business unit. This creates an interesting situation when you want to base business logic on a user’s security role memberships. Since the only thing that is effectively guaranteed to be the same between parent and inherited security roles is the name you need to enact some design patterns to use them in a consistent manor in your code.
I was on a conference call the other week when Jack Bender, a Senior Consultant from Microsoft, mentioned Harvey Balls in reference to security role privileges. Later on I asked him what the heck he was talking about with this Harvey Ball stuff. If you already know the whole Harvey Ball story then feel free to roll your eyes and give me the gas face. I just thought it was a somewhat odd description of the little balls used to adjust security permissions. For those of you who don't know what Harvey Balls are here is a brief summary so that when the time comes and you hear about Harvey Balls or you just want to impress someone by talking about them you'll be in the know.
The best practice stated by Microsoft when dealing with security roles is not to create security roles underneath the root business unit of your organization. Each security role defined at the root is inherited by its child business units. In the case of a new organization the roles you get will be the out of the box security roles. The interesting thing about this is as a developer is that the UI deceives you into thinking that when you are looking at security roles that there is only one when in fact much like the Cylons in Battlestar Galatica there are multiple copies. What is happening behind the scenes is that for each child business unit the security role is being duplicated down the business unit hierarchy. If you are asking yourself why you should care then you have to consider instances when you want to know information about certain security roles in the system. If you are ever in a situation where you are looking for a security role by its guid like in a configuration setting you'll have to keep in mind that you can't just copy the guid you find in the interface and expect that it applies to all business units because they are all unique records with their own guids in the database.
When working with solutions in a project often times I come across a few exports that I made previously. The probably I have is most people never update the version numbers on a solution. You end up with two or more solutions not really knowing what is in one versus another. Granted not knowing exactly what is in one solution versus another is still a problem, but the issue can at least be minimized.
Working on a project with multiple developers can be challenging. It requires collaborate and organization in order to take advantage of tasks that can be done in parallel and keep everyone on the same page. If you’ve ever tried to do this on CRM project you’ll find that as you add more developers to the project you quickly reach a tipping point where it becomes very difficult for them to not step on each other’s toes.
Every developer has their own style of writing code. I'm sure I'm not the only person that has inherited code from someone else only to make grimacing faces when you open it up in Visual Studio. I will admit that sometimes I want to slap people for what they have handed over to me but I'm sure someone has wanted to slap me a time or two as well. If you are like most developers you will have the immediate urge to "fix" this code to bring it up to your "standards". I'm no different. Not that I claim to be the swami of coding standards. I'm always learning and getting better but I think I am not bad compared to stuff I've seen. Here are a few of my philosophies. I have to say that a book that I read called Clean Code by Robert C. Martin has really made an impact on my thought process. I think in general we get so caught up in the work of writing code that we step back and think about how we are writing code. When it comes to coding with CRM 2011 I have some basic thoughts on what things should look like.
If you've done any kind of customization work on Dynamics you've probably run into a situation at some point where the needs arises to create a custom application to suit the need. The debate that I always here is should it be done in ASP.NET or Silverlight. When I first started getting involved in CRM projects I didn't really have a strong opinion either way. I wasn't really up to speed on Silverlight either so I had a knowledge gap influencing my “shoulder shrug” treatment of the issue. Now that I know a thing or two more my opinion has shifted.
So imagine you’ve created this awesome Silverlight application. The app works great and everyone’s happy. In this particular case the client was using an automated build tool called Anthill which is how they deploy their CRM solutions. The later versions of the CRM SDK have a deploy function where you can have your code in TFS and deploy your plugins and web resources straight from your project after pointing the Visual Studio CRM Explorer add-in to a specified server and organization. This all sounds great until I get a call saying that my wonderful Silverlight application isn’t working.
Distraught and aggravated I start contemplating would could have possible gone wrong. What could I have possibly done wrong? As it turns out when I go to the deployment server the Silverlight control decided to not show up in a matter of speaking. Just to give some background this is a Silverlight control hosted in an HTML web resource displayed in the form content iFrame from a navigation link. The page shows up just fine, but my control isn’t loading. Weird…
When dealing with the account entity you may decide to display the year founded as part of the company information. This information can come from various public sources of information. It feels natural to think of year as a date since it is part of a date. But of course it is really in fact a “date part”. It is part of what makes up a date but in and of itself is actually just a number. Handled alone it is best stored as a numeric value which makes it easier and faster for filtering and searching purposes. The problem is that if you try to store a date as a numeric value in CRM 2011 that value will be displayed with a comma on the form. If you can live with that fine, but if that bugs the heck out of you then you have to look at the pros and cons of other options.
Let me just preface this discussion with my option that when deciding between making it a date or a text field in order to fix formatting, text is the way to go. Maybe I’m preaching to the choir but I had this discussion on this topic recently. I’ll briefly go over some points on text versus the date data type.
The Customer Address entity is one of those special entities in CRM. As you probably know it stores address and shipping information for accounts and contacts. I had worked on a project where we had hoped that we could attach a custom entity to the address entity like any other entity. We found out that customer address is special. It’s one of those entities where Microsoft slaps your hands and says only we can use it so keep out, but that’s another story. The interesting thing about the a ...
Introduction Near the ending of any project where a new system is being implemented there comes a time when everyone looks around the meeting table and groans because at some point users have to be trained to use this great new system that has been developed for them. Hopefully in your project the various user classes that have a stake in the project believe their needs were heard and they feel that the new system will empower them to perform their job better. This is of course the best case sc ...
I recently read the Microsoft Whitepaper that was released a few days ago titled “Deploying Microsoft Dynamics CRM 2011 and CRM Online Solutions from Development through Test and Production Environments”. From what I saw the authors are recommending the same thought process I had about solution management in the software development life cycle.
For development purposes you slice up the project into component layers. The layers are composed by functionality and also to allow for less contention by members of a development team. In a discussion with some Microsoft consultants they split up a project into 6 solutions as follows:
I know you are probably waiting with anticipation as to what two entities I’m referring to in my title. Well without keeping you in such suspense I’ll go ahead and tell you. The two entities are very common things that we find in our everyday development lives which are the Event Log and Configuration entities. Yes I know this is amazingly obvious but I can’t say that every project I’ve worked on had these two entities. Maybe it’s not so obvious. If you aren’t a believer let me talk about my log ...
You’ve probably seen the option to install Full-Text Search during a SQL Server installation without really understanding what it is and how it can be used. As with other database systems SQL Server has a full spectrum of features that typically reaches far beyond what is needed in any one software development project. I look at Full-Text Search Services as one of those step child type features I never felt was worth spending time on since it seemed so trivial at first glance. I couldn’t ever really recall a time when I had a problem searching text per say. If you are like me you probably thought about why would you need that feature for a second and then went on your merry way. Honestly I didn’t really know what the full-text search feature was in the scheme of things and never really had a situation where I felt like it was something I really needed.
The complementary paper includes over 12 years of research, recent survey results, and CRM turnaround success stories.
This 60-second assessment is designed to evaluate your organization's collaboration readiness.
Learn how you rank compared to organizations typically in years 1 to 5 of implementation - and which areas to focus on to improve.
This is a sandbox solution which can be activated per site collection to allow you to easily collect feedback from users into a custom Feedback list.
Whether you are upgrading to SharePoint Online, 2010, 2013 or the latest 2016, this checklist contains everything you need to know for a successful transition.