Hosk Blog Most Popular CRM Posts of the Year

I published 202 blogs posts this year!  Which roughly works out at about 4 a week.

Here are the most viewed blog posts this year.  There is a caveat where the posts written at the start of the year have a big advantage over the posts created in the last few months.

I have learnt a lot writing these blog posts and I’m glad they have been viewed so many times

Top 12 blog posts from my blog

1.  MB2-703 – CRM 2013 Customization and Configuration Certification – 7610 views

This page has all of the CRM 2013 Customization and Configuration content I have created to help myself and other people pass the MB2-703 certification.  It works because I passed, which I write about here

2.  CRM 2013 – Setting up Visual Studio with the Developer Toolkit for Microsoft Dynamics CRM – 7478 views

A blog and video tutorial with a step by step guide to setting up the CRM Developer toolkit

3.  CRM 2013 – Step by Step Update Plugin Tutorial using the CRM 2013 Development Toolkit – 7021  views

A blog and video creating a plugin to run on the update stage using the CRM Developer toolkit

4.  CRM 2013 – Understanding Solutions and how they work – 4751 views

A blog post all about Solutions and how they work

5.  CRM 2013 – MB2-703 – CRM 2013 Customization and Configuration Study information – 4362 views

Some study information with links to lots of information including two study guides

6.  CRM 2013 – quick way to get the guid on a form – 4123 views

A quick way to get the guid on a form in CRM 2013, something which as a developer I do all the time.

7.  CRM 2013 – MB2-703 – Customization and Configuration Certification Solution Test Questions – 3857 views

Some test questions on solutions

8.  CRM 2013 – Plugins – Simple update plugin – Redeploying, improving and updating – 3656 views

This blog shows you how to redeploy your plugin with a few changes

9.  CRM 2013 – Javascript to get id of current record – 2613 views

A quick blog which shows you how to get the Guid of the form

10.  CRM 2011/2013 – Javascript to get the object type code of an entity – 2532 views

It’s important to get the object type code programatically because as I found you cannot hard code this value because it could be different in different CRM instances (e.g. DEV, TEST, PROD)

11.  CRM 2013 – How to set up Field Level Security – 2555 views

A blog showing how Field Level security works

12.  CRM 2013 – Workflow to set the current date and time – 2532 views

A workflow which sets the current date and time

Tips on passing MB2-703 – CRM 2013 Customization and Configuration Certification

I finally took the MB2-703 exam and passed, YIPPPEEEE

This is the 3rd time I have taken the customization and configuration exam because I have taken it for

  • CRM 4
  • CRM 2011
  • CRM 2013

Every time I take the exam, during my studying and preparation for the exam I always learn or understand how CRM works a bit better. The certifications involve studying new functionality added in each new release of CRM but my understanding is different and I focus on different aspects of CRM and try to understand how the internal CRM mechanics are working and I wrote articles like these

CRM 2013 – When should you create a custom activity entity?

CRM Entity ownership – How do you decide?

To see all the articles, questions and videos I have created for the CRM 2013 customization and configuration certification click the link below

https://crmbusiness.wordpress.com/mb2-703-crm-2013-customization-and-configuration-certification/

I have also createde some links to some good free articles on subjects on the exam but alas there isn’t many links there because I started to late with that idea

https://crmbusiness.wordpress.com/mb2-703-crm-2013-customization-and-configuration-certification/free-links-mb2-703-study-guide/

It’s worth the effort

The value of the certification comes from the studying and reading for the certification rather than having the certification.  It was a great motivator to learn the new functionality because to make the exams different there is usually an emphasis on new functionality, which is logical because otherwise the exams could be quite similar.

I find it useful to refresh my knowledge on areas I haven’t used for a while, forgotten and the new functionality which I may not have used yet.

Learning the information to a level you can pass a certification does reinforce the information and helps it stick in your mind.

I have written before

CRM 2013 – Why you should take and pass the Configuration and Customization Certification

A quick recap  why I think it’s worth studying for the latest CRM certifications

  • Learn how the new functionality works, particularly it’s limitations
  • Study CRM functionality you don’t use very often
  • Refresh your knowledge on CRM
  • You get a broad knowledge of CRM

My process of studying

Read the MOCS (Microsoft Official Circiculm)

You can find the link to the MOC’s for all the certifications here.  The MB2-703 MOC link is below.

MB2-703: – Microsoft Dynamics CRM 2013 Customization & Configuration

The MOC should be the solid base to build your studying for the certification around.  The MOC covers all the areas which will be in the exam and unlike CRM 2013 books, only focuses on the areas which will be on the exam.

Read articles on the subjects

The MOC’s are great but they can be a bit dry and I like to read articles on areas of the exam.  Articles are small bite sized chunks with the added benefit of usually containing examples and screen shots.  The real world usage of CRM 2013 functionality is very useful for understanding how the CRM 2013 functionality can be used and limitations

Take notes

Taking notes is a good way of highlighting the important points for revision and condescending the MOC’s, blog posts and other sources of information into a smaller collection, which you can revise from.

Using CRM 2013 trial

There is no better way to learn the functionality of CRM 2013 than by using it.  If you are fortunate you will use CRM 2013 every day in your job, but there are still areas you don’t use very often, but make sure you know how they work rather than just the theoretical knowledge of how they work.

Tips on passing the certification

New Functionality

Study the new functionality added into CRM 2013

  • Business Process Flow
  • Business Rules
  • Access Teams

Use CRM 2013

Don’t just read and study about CRM 2013 topics, but actually try it out with a CRM 2013 trial

  • This will give you some practical knowledge/experience of the functionality
  • It will help you understand how it really works, which isn’t always the same as it says in the manual
  • You learn how it doesn’t work (important, particularly for the exam)
  • It creates experiences and visual images which will help you recall information in the exam
  • You will have experience of using the functionality, which is useful for your job

Write your own study notes

Going through the process of making notes when reading the MOC’s or articles on the exam subjects I would make notes.  The process of taking notes means you have to understand the material and select the key points.  To do this you have to actively think about the topic and subjectively understand it to the key features/limitations.  I believe this will help you learn and increase your understanding.

The benefit of taking notes is you can use them to study with later.

Blog about the CRM 2013 functionality

Teaching and explaining about a topic makes you learn and understand the topic in more detail.  This will give you a deeper understanding of the functionality.

I found writing about the security and business rules very useful

CRM 2013 – MB2-703 – Business Units and Security Roles Study Information

CRM 2013 – Understanding Business Rules

If questions came up about these topics I had a very good understanding and could work out the answers

Exam tips

 

Book the exam so you have a deadline

This is a great motivational tool and will stop you keep putting off taking the exam.

Create some practise questions or use mine to practise

If you are studying with someone else both create practise quesitons and notes, share them with each other

There is some practise questions you can find on my blog post below

https://crmbusiness.wordpress.com/mb2-703-crm-2013-customization-and-configuration-certification/

Study Notes

Create your own study notes, you will be learning and reinforcing the information by creating the notes and reading study notes is quicker and easier than MOC’s or blogs

My study notes are here

CRM Chat Study notes can be found here

CRM GEEK for CRM 2011

The study notes are very useful, 46 pages of good notes about the CRM 2011 Customization and Configuration exam. http://www.crmanswers.net/2014/01/crm-2013-mb2-703-exam-my-experience.html

Exam Techniques

  • Get there early, sometimes the test centers are in odd places which could take some time to
  • Take your time in the exam (you will have plenty)
  • On each question, first eliminate the answers you know are wrong, usually there are some obvious answers which are wrong.  This will leave you with a smaller choice
  • Review all the questions, just to make sure you haven’t made any silly mistakes

Good CRM design should not make users think

A well designed CRM system is where users use the system instinctively without needing to stop and think – Hosk

I have been reading Don’t Make Me Think!: A Common Sense Approach to Web Usability, the book is great, easy to read and it gets straight to the point, which it needs to because the book is only 216 pages long and was written so it could be read by an executive on a 2 hour flight!

I wish films, books and TV programs would get to the point and stop extending things out, quality not quantity.  The book offers great insight into usability in websites, Steve Krug the author is a usability expert and some they key points I have taken from his excellent book.

1.  Don’t make them think

A website should be so easy and obvious to use the users shouldn’t have to think.  The users should not need to think where to click because it should be obvious.

2.  Users are like sharks

Users scan pages and will click on the first thing which seems might be the right thing to do.  Users keep moving or die, e.g. They will point and click.

3.  Users Love Back buttons

Users love back buttons because they use websites, with a point and click attitude.  Users haven’t got time to think about what to do, they would rather click what seems right.  This usage means they will make mistakes and need to go back often.  It’s a trial and error method of web site usage because the cost of a mistake is rectified by pressing the back button.

4.  Creatures of habit

Once users find a method which works they stick to it and do it again and again and again

5.  Searching Rocks

Users know how searches work and use it a lot as a short cut to get to where they want to go.

6.  Everyone loves to go home

The home button is vital to a website because it means no matter what rabbit hole the user goes down or how lost they get on a website, they can always get back to the start with one click without any thinking

7.  Get rid of happy talk

Happy talk is like small talk on websites.  Lots of words with not much being said, usually happy talk is information about the site, creating the site and other information the user isn’t interested in but the creators found interesting.  You can read more about happy talk here, Common happy talk is

  • welcoming messages
  • details of the process of creating the website such as how long it took
  • information about the design of the website such as rationale
  • superfluous instructional advice

 

Web Usability and CRM 2013/2015

When CRM 2013 (which doesn’t seem long ago) was released the user interface was completely rewritten and it looked fantastic but then users started to use the application and they found the navigation was more difficult in CRM 2013 than in CRM 2011, oops.

The question is, Why was navigation harder in CRM 2013?

After reading the points made in Steve Krug’s book, these points explain why the navigation was difficult

Too much thinking needed

There were times when using CRM 2013 when I wasn’t sure how to navigate to the record/area I wanted to go.  I had to stop instinctively navigating and start to think about how I might navigate there.  I would have these thoughts

  • How do I get too a certain record?
  • Which navigation tool (menu, hyperlink, back button) should I use?
  • Where is the advanced find button?
  • How do I get back?

Some of the reason was due to my CRM 2011 navigation habits, but other problems were because it wasn’t obvious how to navigate in CRM 2013 and I had to keep stopping to think.  Thinking isn’t how people are trained to use websites and slowed down the navigation process considerably, which contributed to the feeling it was harder than CRM 2011.

No Home button/Left hand menu

The removal of the left hand navigation pane was like Windows 8 removing the Start button.  People like knowing there is an easy, quick way to get back to the start.  The best solution to this problem I have seen was the free codeplex solution One Click Navigation which I have reviewed here.  This puts a menu on the top, all the time, ahhh safety.

Creatures of habit – CRM 2013/2015 is too different

Users are used to working with CRM 2011 and CRM 2013 seemed very different and less initiative.  CRM 2013/2015 is different from most web sites and applications which means users can’t use their natural instincts to point and click and muddle their way through.

There is likely to be a degree of uneasiness whenever any users use a new product

Dude, where is my advanced find?

This was one of the most puzzling changes Microsoft made in CRM 2013, suddenly I could rarely find the advanced find button, why would anyone hide this awesome button?  Advanced find in CRM is a great tool because you can skip the navigation and find the records you are interested in quickly and you can save your advanced find as a search for easy reuse.

The advanced find button has been restored in CRM 2015 and can be found on the global command bar and always accessible no matter where you are.

Global Advanced Find is Here in Microsoft Dynamics CRM 2015!

It’s good to see Microsoft to listening to the feedback of the Microsoft Dynamics Community.  I wrote an article on this subject Is Microsoft Listening to the Dynamics CRM Community?,

Slow to Navigate

One of the points I took from the book is users are in a hurry, swimming and swooping like sharks, clicking and not thinking, muddling through, clicking what seems right and pressing the back button if wrong.

CRM 2013/2015 make it hard to navigate quickly, you have to wait for menu’s to animate and then they keep hiding again.

Users of CRM will use CRM everyday and will want to reach power user level, quickly navigating the site without thinking.

Designing Better CRM forms and Improving User Experience

Don’t make the user think

Make the flow of your CRM system obvious, don’t make the user think.  Using the new business process flows can help users along the journey without them getting lost or stopping the process to puzzle out where they should go next.
One of the key terms to think about is how to simply the process because a simple process/forms needs less thinking by the users.
Ways to reduce user thinking and simplify
  • Business Process flows guiding the user
  • Remove unused fields on views, forms
  • Reduce options
  • Change Sitemap and
  • Hide sections/fields until needed
  • Business rules/JavaScript to auto fill values
  • Use Dashboards to show aggregated data
  • Views filtered and sorted to reduce noise
  • group data on a form in logical areas
  • Different forms for different security roles/teams

Test your CRM Solution

A good way to test your form layout and business process logic is to get someone with no experience of using your CRM solution and see how they get on.   You cannot test the processes or forms yourself because you already know how to use it and can’t unlearn the process.  It’s possible to get existing users to test design improvements.
Coding horror blog had a really good blog post on Low-Fi usability testing, whilst reading this I realised CRM forms/solutions rarely ever consider the usability of their forms/system.

Reduce fields and clicks needed on a form

I remember working on a project and the feedback from the intial forms was
It takes 4 clicks more to complete this form than it did with the old system
That form was an epic failure but the message has always stuck with me.  All the forms should take the least amount of clicks and inputs possible to make it as easy as possible for the user.
Simplify your forms and remove anything the user doesn’t really need.  The top of the form should contain the important fields that must be filled in, these will be the first fields the user see’s and has to fill in.

Business Required fields at the top

Users want the Business required fields at the top of the form, this is the first area they look at on each form.  Make it easy for the user and put the fields they must fill in at the top, near each other.  Thought has to be given to logically arranging fields in groups versus putting business required fields at the top.

Correct Field types

Instead of field validation on the values entered in a field, going through the processs
1.  User enters value
2.  Field OnChange event, validates value and displays warning (back to point 1 until passes validation)
You can avoid this by using the correct field type and option Sets with a limited number of choices.  It’s easier for a user to choose from an option set with 3 options than typing a value in manually (again and again).  It’s frustrating for a user to not be able to save a record due to wrong data, finding the field and correcting is a slow process, so getting this right first time is great user experience.

Automate field entry

Workflows and plugins can automatically (where possible) fill in the values of fields in related entities
JavaScript and Business rules can automate field values based on values entered in related fields.
Microsoft Dynamics CRM has plenty of tools to help automate processes, calculate fields, automatically fill in related fields and create related records.
Using OnChange events on fields with Business Rules and JavaScript will not affect form loading times

Hide Section and Fields

It’s possible to simplify a form by hiding fields which are not used.  Field OnChange events allow you to show/hide fields based on interaction with the user and creating a tailored user experience.

Different Forms for Different Security Roles

Different users with different roles are often not interested in all of the fields on a form so there is no need to display them all.  You can create different forms for different users (security roles), hide/show certain fields and arrange fields in a different order (putting the fields they don’t need to fill in at the bottom).  This can greatly simplify a form for different users e.g. less options is less confusing.

Business Process Flows

Business process flows offer a guided/quick navigation through business process which can involve multiple entities. Business process flows work in conjunction with security roles, allowing you to create a different business process for different sets of users.

Extra stuff

An interesting article from CRM MVP Scott Durow on how the Command Bar really works, did you know it’s a ribbon in disguise!

4 things you need to know about the Command Bar

CRM MVP Jukka wrote a good blog

How Would You Change the Dynamics CRM Navigation?

I would recommend not only reading the blog post, but the comments have a great discussion about CRM Navigation

What is TypeScript and how does it work with CRM 2011/2013

I prodded CRM MVP Dave Berry with a twitter stick, berating him to start blogging again, this is dangerous because he is a CRM Super Hero

You should read his CRM MVP Q&A, it’s very funny and interesting

Th reason I was prompting him because I was reminded of his great blog posts because I was reading a blog post from Guido Preite who wrote an excellent blog entry –  Entity.GetAttributeValue<T> and ActivityParty, This is a great blog post from Guido and I would recommend all CRM Developers to read it (and subscribe to his blog).

In the blog he links to a Dave Berry blog post explaining Entity.GetAttributeValue.

Entity.GetAttributeValue Explained

This prompted me to tweet Dave Berry and he said he was doing some work on TypeScript and CRM.

What is TypeScript

Lets start with Wiki Definition

http://en.wikipedia.org/wiki/TypeScript

TypeScript is a free and open source programming language developed and maintained byMicrosoft. It is a strict superset of JavaScript, and adds optional static typing and class-basedobject-oriented programming to the language. Anders Hejlsberg, lead architect of C# and creator of Delphi and Turbo Pascal, has worked on the development of TypeScript.[1][2][3][4]

TypeScript is designed for development of large applications and transcompiles to JavaScript.[5]As TypeScript is a superset of JavaScript, any existing JavaScript programs are also valid TypeScript programs.

 

Stackoverflow has a good discussion

http://stackoverflow.com/questions/12694530/what-is-typescript-and-why-would-i-use-it-in-place-of-javascript

Typescript is a superset of Javascript which primarily provides static typing, classes and interfaces. One of the big benefits is to enable IDEs to provide a richer environment for spotting common errors as you type the code.

It’s still early days, but to get an idea of what I mean, watch Microsoft’s introductory video on the language.

For a large Javascript project, adopting Typescript might result in more robust software, while still being deployable where a regular javascript application would run.

It is open source, but you only get the clever Intellisense as you type if you use Microsoft’s Visual Studio (also noted in blog post from Miguel de Icaza).

 

Typescript home

http://www.typescriptlang.org/

This site has a bunch of samples, handbook and tutorials and is probably a good place to start.

Good articles on TypeScript

Some great resources for learning type script

http://definitelytyped.org/directory/learn.html

 TypeScript: First Impressions

Enhance Your JavaScript Investment with TypeScript

What is TypeScript

TypeScript: JavaScript Development at Application Scale

7 months

 

Hosk Thoughts on TypeScript

I will add I haven’t used TypeScript yet, so I’m just basing my thoughts on what I have read, whilst writing this article.  If you do want to get started using TypeScript with CRM, Dave’s article TypeScript, CRM 2011, and You is probably the best place to start.

As a Java developer and then C# I have often found JavaScript and it’s dynamic types confusing and dangerous.  It does have advantages like Using Dynamic Javascript.  Strong typing

The biggest problem I have is Javascript makes it hard to create classes and structure the code in logical and well thought out design.  The flip side of this it’s easy and tempting to right quick messy Javascript code which is a pain to debug and maintain later.  Javascript doesn’t offer much to the Developer with intellisense or code checking.  This means I can often publish code with syntax errors in it!!!

The first interesting point about TypeScript is it compiles the code to JavaScript, so the end product of your CRM development will be the same e.g. a javascript file.  You can almost think of it as the difference between writing early bound and late bound code.  The advantages of writing early bound plugin code, is the plugin code uses the entity classes and fields.  Early bound code has these advantages

  • Easy to read and understand
  • removes syntax errors
  • Casting and type errors are found at compile time (and not runtime by the customer)

TypeScript in my view is trying to do the same kind of standards and advantages to the JavaScript code as early bound code does to plugins.

One of the main advantages (in my opinion) is TypeScript makes it easy to create types, modules and interfaces in your code, which means the code will be more like the strong typing (C#) code.  This should make it easier for developers to create well structured code and less excuses for Developer to create hacky, messy Javascript.

Auto Complete/Intellisense improvements

Reading the http://www.typescriptlang.org/ page, another benefit is with strong typing (read this wiki article about strong and weak typing) is you can get visual studio tools/development tools to help with best practices, static checking and code re-factoring of the TypeScript code.  I understand this to mean it’s like writing plugins using early bound code, with Visual studio helping you easily select fields (defined in your entities file) and refactoring and check your code for best practices with tools like ReSharper and FXCop

The benefit of visual studio helping autocomplete all the Out of the box Javascript functions is probably worth it alone

Xrm.Page

Xrm.Data

etc

TypeScript was created by Microsoft

Microsoft created TypeScript to help .NET developers create similar code in JavaScript as they create in .NET.

 

CRM and TypeScript

There isn’t currently lots of resources or examples of TypeScript and CRM, I’m not suprised by this because until Dave mentioned I hadn’t really heard much about it.

Before you start creating any TypeScript I think I would start with the article written by Dave Berry

TypeScript, CRM 2011, and You

The blog post was from May 2013, so it will be a bit out of date (I’m guessing) but Dave has put these advantages of learning TypeScript

  • Types!  (If that wasn’t the first thing on this list, I should be soundly questioned.)
  • Compiles to JavaScript by basically removing itself from the code, and applying some cohesive closure structures to the results.  (This is why all valid JavaScript is valid TypeScript.)
  • C#’s interface and inheritance model!  (Multiple inheritance isn’t supported, but multiple interfaces are.  My C++ days are calling, and I let it go to voicemail.  I’m ok with this model.)
  • Multiple method signatures!  (This doesn’t apply anything on the “compile” to JavaScript—yet—but makes the IDE experience nicer.)
  • Generics!  (…coming in TypeScript 0.9)

 

CRM 2013

There is a good CRM 2013 blog post (split in 2) on TypeScript, which is simple and straight forward and a great place to start learning to use TypeScript

TypeScript and Dynamics CRM 2013 – Part 1

TypeScript and Dynamics CRM 2013 – Part 2

The CRM2013 definition file is on GitHub (https://github.com/sduck/Crm2013TypeScript)

 

CRM 2011

There are three blog posts I found on CRM 2011 and TypeScript

Using TypeScript for CRM 2011

TypeScript

TypeScript, CRM 2011, and You

To use TypeScript you need a definition file and for CRM 2011 you can find it

CRM 2011 TypeScript extension

 

 

Hopefully I will get a bit time to have a play with TypeScript myself, I love the idea of it and think it could a great tool to write JavasScript which would be easier to understand/maintain and with the improvements with intellisense would make less sytnax, complete waste of time type mistakes, which could save a bunch of wasted time publishing Javascript files.

This was my first look at TypeScript and the next step is to get my hands dirty and dive in.

If anyone else has any experience using TypeScript please leave a link to your experiences/blog post in the comments

CRM 2011 – odd error with Query Expression and ConditionOperator.In

I found an odd error with OptionSetValues and ConditionOperator in when doing a query expression.

I was doing a query expression which retrieved some account records where an optionSet was either Bill to or Ship to.  So using a query expression I used the ConditionOperator.In and selected the two values.

Now the wierd this is the below examples works

ConditionExpression condition3 = new ConditionExpression();
condition3.AttributeName = “chw_appointmenttype”;
condition3.Operator = ConditionOperator.In;
condition3.Values.Add(new object[] { new OptionSetValue(126740001).Value, new OptionSetValue(126740000).Value });

This one doesn’t work

OptionSetValue op3 = new OptionSetValue(1);
OptionSetValue op4 = new OptionSetValue(3);
QueryExpression newquery1 = new QueryExpression(“contact”);
newquery1.ColumnSet = new ColumnSet(“fullname”);
newquery1.Criteria.AddCondition(new ConditionExpression(“address1_addresstypecode”, ConditionOperator.In, new int[] { op3.Value, op4.Value }));

Now unfortunatly for me I was using the second example and couldn’t understand why the query was erroring because it all looked ok.

Finally I had to search the internet and found this blog

http://mscrmuk.blogspot.co.uk/2011/05/unexpected-error-with.html

below is his explanation

QueryExpression q = new QueryExpression(“annotation”);
Guid g1 = Guid.NewGuid();
Guid g2 = Guid.NewGuid();
q.Criteria.AddCondition(new ConditionExpression(“objectid”, ConditionOperator.In, new Guid[] { g1, g2 }));

However, change the last line to the following, and it fails with the error above:

q.Criteria.AddCondition(“objectid”, ConditionOperator.In, new Guid[] { g1, g2 });

On the face of it, you’d expect identical behaviour, but it looks like the problem is due to the parameter overloads on the different methods. The constructor for ConditionExpression takes 5 overloads, and the compiler will use System.Collections.ICollection for the array of Guids. However, the AddCondition method only offers one type for the third parameter (params object[]). The result of this is that the code fails because the parameter is interpreted as object[] {new Guid[] { g1, g2 }}.

Interestingly, other code can also work, e.g.

q.Criteria.AddCondition(“objectid”, ConditionOperator.In, new object[] { g1, g2 });
q.Criteria.AddCondition(“objectid”, ConditionOperator.In, g1, g2);

12 Ways to become a better CRM Developer

Now and again I get asked how to become a better CRM Developer, so I thought I would create a blog to point people towards and here it is.

1.  Decide you want become a better Developer

Improving and becoming a better CRM Developer is a state of mind/attitude, you have to want to get better, you have to strive to be better every day.

It’s like trying to get someone to read a book you like, you can’t make them read that book no matter how good you say it is, it’s only when the person wants to read it.

 

2.  Make a plan

A plan is like a map, if you don’t use a map it’s very difficult to get to where you want to go.  A plan is the same for careers and learning skills, you need to identify the skills you want to learn and make a plan to learn them

What areas do you need to improve in?

  • Plugins
  • Javascript
  • CRM 2013 new features
  • CRM 2015 new features
  • WCF webservices
  • Dialogs
  • Certifications
  • programming
  • reports (Bids and SSRS)
  • Data import (Scribe, SSRS)

Make a plan to start learning and getting experience with the above areas.

3.  Read Blogs

I believe all CRM developers should have a selection of blogs on CRM.  These links have some great blogs

Top 25 Dynamics CRM Sites – featured on Dynamics 101

Blogs featured on Microsoft dynamics blog list

Twitter is also a great way to find interesting CRM blogs.

CRM blogs provide technical knowledge and examples of new functionality and CRM development usually written by a CRM expert.

4.  Write blog posts about CRM Development

A great way to learn CRM Development is to write blogs and teach others CRM functionality.  This will not only increase your profile and brand in the Microsoft Dynamics CRM community but you will also understand the functionality better by explaining it.

Clearly explaining how functionality and technical ideas will involve you understanding the topic in greater detail and analyising it before expressing those ideas on your blog.

As an added bonus you will easily be able to find your notes on the subject, I often search my blog solutions to problems and quite often find articles/solutions I forgotten I had written.

Writing about CRM Development reinforces the knowledge, increases understanding of what didn’t work and what did work.

5.  Create Customizations – Write Code

You cannot learn CRM development purely by reading, you have to get your hands dirty and do the development yourself.

One reason practical experience is so useful is getting things to work is a major hurdle in development and until you do you can’t be sure you can or how difficult it is.  The process of getting code to work is usually going through many iterations of the code not working and you learning from your mistakes until you get it working.

Understanding how code doesn’t work gives you a great understanding of how CRM code does work.

The experience of getting an example to work will give you confidence and a working example when it comes to using the functionality in a CRM project.

6.  Learn from your colleagues

All CRM developers have individual areas of expertise their colleagues do not have and you can learn new techniques and skills from your colleagues.   CRM Development and coding is a world where there are millions of classes, methods and functions which it’s impossible to know about all of them, good developers will sniff out the really useful ones but often someone will tell you a technique/method you have never heard of which could make your life loads easier.

You can learn from

  • Peer reviews
  • Reading code written by your colleagues
  • Talking about CRM development

7.  Never stop learning

Becoming a great CRM Developer is a journey which never ends.  There is always

  • New functionality to learn
  • Better techniques
  • New tools
  • New technologies
  • Teaching others
  • Learning from your mistakes
  • Learning from your successes
  • Loads of other things I haven’t mentioned or don’t even know about yet

 

8.  Stop to think – analyse what you have done

An important step in CRM Development is making sure you stop and think about the CRM development/customizations you have done.

A good time to think about things you have worked on is during a lunch time walk.  Think about how you could have done things differently, the good and bad points.

Analysing your development can help you identify weaknesses in your code and understand why.

For every bad line of code you avoid writing the increased chance of a good line of code taking its place.

Sometimes getting better is not making as many mistakes as the project before.

9.  Don’t take the easy option

If you want to get better you have to constantly push yourself to be a better CRM developer.  This means getting involved in difficult projects and tricky customizations.

Keep up to date with the new functionality in Microsoft Dynamics CRM and try to work on projects which are delivering the latest releases.

Don’t let your standards drop and don’t check in bad code with a promise to refactor it later.

10.  Create free tools – Give yourself a project

Not only will you create something useful for yourself and others, hopefully more useful than this

Hosk’s CRM 2013 Guid Getter

You will learn skills, overcome many problems, get some great experience and learn new skills.

If you are not sure what tool/solution to create then think if there are any things which could be automated in your company or if there something which could be automated or improved in CRM.

It could be Access Team template import/exporter to solve the problem I discussed in the blog post CRM 2013 – Why are access teams marooned?

11.  Read Books

When I say read books, I don’t mean just read CRM or Developer books but you should read all types of books.  Great ideas can come from all areas of life and reading books are a great way to switch off from CRM and focus on something different, you will get ideas/thoughts which will enable you too look at CRM from a different view point.

Some good developer books, which aren’t really about Development I talk about here

Recommended Reading for Developers

The coding horror list is a great list of books, most of them focus on people and processes rather than writing code, which is logical because you will spend as much time interacting with people as you will writing code

Coding Horror – Recommended Reading list for Developers

If you don’t like reading then I would suggest listening to some audio books during your commute or when you are doing the cleaning.

On a personal note, I love science fiction books and have been working my way through the SF Masterworks list

12.  Have other hobbies

Remember, there is more to life than CRM Development so make sure you are spending time with your family and loves ones and get yourself a hobby or a sport, you have to switch off and get your life in balance.

Finally

CRM development is great fun, don’t forget to enjoy yourself.

 

 

 

 

 

Is Microsoft Listening to the Dynamics CRM Community?

istock_000017297547small

I read this great blog post recently

 Listen to Your Community, But Don’t Let Them Tell You What to Do

The article makes a number of good points but these two grabbed my attention

1.  90% of all community feedback is crap.

Let’s get this out of the way immediately. Sturgeon’s Law can’t be denied by any man, woman, child … or community, for that matter. Meta community, I love you to death, so let’s be honest with each other: most of the feedback and feature requests you give us are just not, uh, er … actionable, for a zillion different reasons.

But take heart: this means 10% of the community feedback you’ll get is awesome! I guarantee you’ll find ten posts that are pure gold, that have the potential to make the site clearly better for everyone … provided you have the intestinal fortitude to look at a hundred posts to get there. Be prepared to spend a lot of time, and I mean a whole freaking lot of time, mining through community feedback to extract those rare gems. I believe every community has users savvy enough to produce them in some quantity, and they’re often startlingly wonderful.

  1. Be honest about what you won’t do.

It always depressed me to see bug trackers and feedback forums with thousands of items languishing there in no man’s land with no status at all. That’s a sign of a neglected community, and worse, a dishonest relationship with the community. It is sadly all too typical. Don’t do this!

I’m not saying you should tell your community that their feedback sucks, even when it frequently does. That’d be mean. But don’t be shy about politely declining requests when you feel they don’t make sense, or if you can’t see any way they could be reasonably implemented. (You should always reserve the right to change your mind in the future, of course.) Sure, it hurts to be rejected – but it hurts far more to be ignored. I believe very, very strongly that if you’re honest with your community, they will ultimately respect you more for that.

All relationships are predicated on honesty. If you’re not willing to be honest with your community, how can you possibly expect them to respect you … or continue the relationship?

It got me thinking how does Microsoft deal with Dynamics CRM community feedback?

The Dynamics CRM Community is awesome

I am constantly amazed at all the great tools/blogs/books/videos/articles created by the dynamics CRM community.  I really enjoy being part of and interacting with the Microsoft Dynamics CRM community and some of the positives that spring to mind

It’s a friendly place

people in the CRM community are always willing to help each, add useful comments

Innovative

I learn loads from tools and blog posts people create.  The content I really enjoy is where people find unexpected workarounds and solutions to problems

Enjoyable

I enjoy being part of the Dynamics CRM community, the more you put in, the more you get out of it.

Positive

The majority of the Dynamics CRM community is a positive group.  Most of the Community energy is diverted to positive endeavors rather than complaining.  I am a great believer in being positive because being positive you create ideas/solutions, but being negative you create nothing but hot air.

Proactive

When the Dynamics CRM community comes up against a problem, it usually find a solution to it pretty fast.  I have found most people who stick around in the Dynamics CRM community are proactive, self motivated people, which you need to be to keep up with the new functionality Microsoft are creating and the speed they are creating it.

Below are some of the activities the CRM community and Microsoft contribute to make up the Microsoft Dynamics Community.

Tools and Solutions

Fantastic Codeplex tools for Microsoft Dynamics CRM

You can read my reviews on my CRM 2013 Tool List

There are great tools not featured on Codeplex, like the great Ribbon workbench (a must have) from CRM MVP Scott Durow

Blogs

Top 25 Dynamics CRM Sites – featured on Dynamics 101

Blogs featured on Microsoft dynamics blog list

Community

CRMUG (I have written a blog post What is CRMUG? Should you join? if you want to learn more about CRMUG)

Dynamics CRM Community 

CRM Forums

Facebook

Twitter – @MSFTDynamics

Conferences

The many Dynamics CRM conferences (convergence etc)

Microsoft

Microsoft have CRM SDK, Technet, MSDN articles, whitepapers (link to all CRM 2013 whitepapers here)

The interaction between the CRM Community and Microsoft I think is pretty good, Microsoft creating lots of great material and the platforms for the Microsoft Dynamics CRM community to collobrate, interact and create great content.

CRM MVP’s

There are 62 CRM MVP’s and they are involved in all areas of the Microsoft Dynamics Community mentioned above.  The CRM MVP’s are a bridge between the CRM community and Microsoft but they are also part of the CRM community.

The concept of CRM MVP’s is a great one.  Fantastic CRM content creators are then able to get sneak peaks and previews of up and coming features in CRM, which they can then feedback to the CRM community.

 

How do you give feedback to Microsoft

I want to focus on how the Dynamics community gives feedback to Microsoft on the Microsoft Dynamics CRM product itself.  This is a vital area for the direction and growth of the CRM product.  The dynamic community is giving feedback generated from their own needs and the needs of their customers.

Why am I writing about Connect Site

Recently I wrote the blog post – CRM 2013 – Why are access teams marooned? where access team functionality was added to CRM 2013 but there is no way to add access team templates to a solution, which makes it difficult to use because you have to create each access team template on each CRM environment.

There was also this post from CRM MVP Leon Tribe – Fixing Lead Conversion in CRM 2013

I remember CRM 2013 and not being able to find the advanced find, so much that somebody made a tool, with just the advanced find button in

https://crmadvancedfind2013.codeplex.com/

Combined with the coding horror post and these I thought I would look into the process of creating product/functionality enhancements for Microsoft Dynamics CRM.

To give this feedback to Microsoft you use the Connect site

https://connect.microsoft.com/dynamicssuggestions

When answering questions on the forum, sometimes people find bugs and sometimes people want functionality which doesn’t exist.  So you have to ether

  • Raise bugs with Microsoft support
  • raise feature enhancements on Microsoft Connect

Raise a Bug

To raise a bug you have to go to Microsoft support and raise a ticket,which I think you do via the CRM Customer Center where you might find the solution before raising a support call.

New Product Suggestion

If you have an enhancement rather than a bug, then you need to use the Connect site to create a new product suggestion but before you do that you should search the list of current Product suggestions because someone might have already created it.

product suggestion

You can either vote on a current new product suggestion or you can create a new product suggestion.  Once a product suggestion has been created people can vote it up.

What do votes means ….? Prices

In theory the more votes you get, the more likely it is to be added to a future release of Microsoft Dynamics CRM.

In the FAQ this is what happens to Product suggestions

Q. What happens to my product suggestions?

A. Your suggestion is delivered directly to the appropriate product development team based on the product line you specify. This process ensures that customers and partners can help shape how future versions of our software will work. During the planning phase, each product development team considers suggestions as possible new features for the next release.

Q. Why hasn’t anyone from Microsoft responded to my suggestion?

A. Microsoft Dynamics product development teams strive to respond to your suggestion within approximately one month of submission*. If you have not received a response on your suggestion within one month of submissions, please email mbsdynps@microsoft.com. *Note: Service level agreement only applicable to suggestions entered into Microsoft Connect

How does the product suggestion process work?

My honest answer would be, ok but could be a lot better.  The process of raising an enhancment works fine but the next stage of the product suggestions going into the product takes a very long time.

What I don’t like about the connect site and new product process

Before we go anywhere I will say this is my personal opinion and it’s based on my experiences and my discussions with fellow CRM developers on connect site.  I appreciate this is a very small, possibly biased selection of people and the experience for the majority could be very different.

The connect site

The connect site feels and looks at least 5 years old, the site is not intuitive or easy to use.  Searching and finding proposed new product suggestions can be clunky, slow and confusing.

This process should be as easy as possible to encourage more people to use the site.

You scroll down to the end of the page and then the washing machine wait icon appears, I can only view 8 items on a page.

Most Voted

There are some links for you to use, you go to most voted and then see a list of resolved items, which were most voted and included.

Vote on resolved items

You can still vote on resolved items, why?

Slow

I often mention to people on CRM forums to raise their enhancements on the connect site but I’m not sure I believe their suggestions have much chance of being added to the product, so why bother.  The reason for this is, it often seems people put enhancements on and then nothing….. very little feedback from Microsoft, not much voting.  Maybe the user gets feedback directly but what about people using the connect site, it just looks like the suggestions are sitting there with nothing really happening.

What’s happening

I wrote a blog post recently CRM 2013 – Why are access teams marooned?, this explains there is no way to add access team templates to solutions.  A product suggestion was added on 27/11/2014

Access Team Template in CRM Solution

It has had 13 votes and Microsoft have a month to respond but after the response it’s difficult to understand what is happening with each suggestion.

Is it resolved?

I see this issue CRM 2013: Adding the “Advanced Find” to the global menu this has been marked as resolved and with the status resolved as tracking.  Which when click on tracking says the product team are tracking this.  How is that resolved?  It’s resolved in CRM 2015.

This item

Ability to set default entity for lookup fields – by Donna Edwards create 01/03/2012

https://connect.microsoft.com/dynamicssuggestions/Feedback/Details/727766

this is set to resolved as tracking, but what does this mean, how is it resolved, surely it’s only resolved once it’s in the Microsoft Dynamics CRM product.

Time of response

It can take a very long time for things to go through the site and onto the Microsoft Dynamics Product.  Adding Field Level security to out of the box fields was added 09/03/2011 and has only just made it into the product for CRM 2015.  Why has this taken so long

 

What I like

There are positives about the Connect site

There is a method to raise product suggestions

It’s good Microsoft have a public process for people to add product suggestions and the voting mechanism is a great for the CRM Community to show support for particular suggestions

It does work

If you look at the list of the most popular suggestions they have mostly been implemented into Microsoft Dynamics CRM.

One of the greatest suggestions was by CRM MVP Neil Benson is

All Dynamics CRM training course materials should be free for everyone to download

It might not be a product suggestion, but this is such a good idea, which has helped lots of people study for the CRM certifications.  It makes sense to encourage and make it easier to study for the CRM certifications so there are more people knowledgeable about the CRM product.  This shows when the connect site works it can be awesome.

Microsoft do comment

I have seen lots of product suggestions with comments from the Microsoft team.  So they are giving some feedback.

Why is this important

I think CRM is an awesome product and I enjoy creating solutions using it.  I appreciate it has some quirks, a few bugs here and there but all products do.

At the moment I think Microsoft is missing getting some great feedback.  I know they have CRM MVP’s who they have a close relationship with but there are thousands  of CRM users/Developers and Microsoft could be using this group a lot better by being more interactive with CRM community regarding enhancements.

The coding horror blog post makes a great point, 90 percent of the enhancements will be rubbish, ridiculous, not workable, not worthwhile but 10 percent could be glorious.

I send people off to the Connect site regularly, this is the correct thing to do but I don’t feel at the moment it’s a very effective thing to do.

In my opinion usage of the connect site would be improved if these points were improved

  • It takes ages for enhancements to make it into CRM
  • Not enough people use the connect site due to lack of feedback or action from Microsoft
  • Make the connect site easier to use

What about the future

What struck me most about CRM 2015 was the fact some of the long standing connect enhancement requests were added to the CRM product and Microsoft in general seem a lot more reactive to opinion under Satya (e.g. Start button coming back in Windows, Microsoft Office for Android etc)

In CRM 2015 some of the new functionality

  1. Field level security on Out of the box fields
  2. Rollup fields
  3. improved business rules
  4. improved searching conditions
  5. Custom help

At the moment I feel Microsoft are listening, but the Dynamics CRM community has too shout really loudly to be heard.

The way the connect site works is a bit of mystery and the lack of feedback from Microsoft adds to the feeling that nothing is happening with the suggestions.  This I believe is reducing the number of people using the connect site, which ultimately will lead to few product suggestions.

 

Summary

I’m probably missing out important aspects from this discussion and hopefully people will comment and correct me, but I feel Microsoft could do better in this area and if they did focus on this Microsoft Dynamics CRM can only get better and it would encourage the CRM community to be more active.

There is scope for Microsoft to utilize the Microsoft Dynamics Community more effectively to help shape the future of Microsoft Dynamics CRM with feedback and suggestions from users.

My experience with the Connect site is it’s not easy to use, the statuses seem confusing and it takes too long for good suggestions to make it into the product.

The conversations I have had with people about the Connect site is people do not really use it because the suggestions take too long and the lack of feedback means it’s not something they can use to pacify customers (e.g. Microsoft is looking into it).

I appreciate Microsoft are a big tanker and it takes time to turn the ship and they are busy adding new functionality, but this type of feedback from the Microsoft dynamics CRM community is extremely valuable, those 10 percent of fantastic ideas are based on people who use the CRM product every day and based on hours/days of project experience.

There seems to be an improvement in CRM 2015 with Microsoft is more responsive to user feedback, if this could continue to the connect site I believe it would lead to greater participation from the CRM community.

Why Code Readability is important

If you struggle to read the code, how the hell are you meant to fix it – Hosk

Code readability is one of the most important qualities of good code, like the art of writing code it’s a subjective topic which varies between developers.

If code is easy to read, it will be easy to understand which makes it easy to debug, maintain and extend.  Writing readable code is easier said than done, making complicated code easy to read and understand is a very difficult skill.

Learning to make code readable/understandable is difficult for inexperienced developers to not only do but understand because it can be difficult to quantify the differences between readable code and un-readable code.

It often easy to spot good code and even (often) easier to spot bad code but when asked to explain why some code is good and other code is bad a lot of developers will shrug there shoulders and just say “Because it is”.  Similar to when you know something isn’t right, it doesn’t feel right but you are not sure why.

Why is code readability important?

When a developer initially writes the code their knowledge of the system is very detailed because usually they have worked on the project for some time, read requirement/technical specs.  They know the code/related code, they know the system, everything is in harmony.

6 months or a year later no one is going to know the system that well again, so you have to understand how the code works by reading it.

Poorly written code can make this very difficult, code with poor readability is

  • Difficult to understand
  • Longer to debug
  • hard to maintain
  • tricky to extend

Code Readability in Dynamics CRM

I have seen a lot of CRM plugin code, I have come to realise when you see some good code you are excited because there is a lot of plugin code which is smelly (code smells)

Some of the reasons/excuses is because CRM plugins can be written quickly, a lot of CRM developers do write them quickly and create one big method in the plugin which does everything.  This creates plugins which 100’s  of lines long, do retrieves, calculations, make a cup of tea.  These plugins are hide to read, difficult to debug and a nightmare to change/extend.

If you don’t or didn’t do code reviews, code which works can be added and the unreadable code lurks in the system until a bug appears.

The classic scenario will usually involve the writer of the code no longer working at the company, someone else having to find and fix the bug.  This is when you will be confronted by code which is not only difficult to read but damn right confusing, making fixing the bug 10 times harder and 10 times longer.

There is rarely time made to go back to refactor projects so the best way to avoid this problem is to get it right first time and create readable code.

So what makes code readable?

Comments

So people might think the way to make your code readable is put loads of comments in it.  Some well placed comments will certainly help when you get to a tricky bit but most code should be self commenting by using well named variables, functions, classes etc.

More comments does not equal better readability and in some cases extra comments can just clutter up the code.

Well structured code/Good Design

Well structured code is split up into logical/well named classes and methods.  The structure of the code is linked to the design, classes and methods should have a clear separation of responsibility (and decoupled)

When thinking about the structure of your code remember this line

Code should have a clear purpose

The line above means is all the classes and methods should have a clear and easily understood purpose and if you are having trouble naming classes and methods it’s probably because they are doing lots of different things.

Consistency 

Code in all the plugins and Javascript should be consistent, even when different developers have written it.  I find it frustrating when you work on a CRM project and the code can change in style, shape, naming conventions and structure.

The structure of the code should be the same between plugins, so when you are debugging and reading those plugins you can instinctively look in the same areas each time.

These should be consistent

  • Code Formatting
  • Braces
  • naming (classes, methods and variables)
  • folder structure

Small is beautiful

Methods and classes should not be to long, if they are the code is doing too much.  Methods should do one thing and decoupled (which will allow for reuse)

No Magic numbers

Instead of assigning a field the value 2, create a constant which explains what the value 2 is.  This will not only help others understand the code but in 6 months time you will find it will help yourself understand what 2 is.

No One line wonders

Some developers believe the smaller number of lines written the better the code.  This isn’t the case if some of your lines keep going and going and going and going, so the developer has to scroll across to read it.  Split the code into a few lines and make it easier for people to read and understand.

Get rid of duplicate code

If code is being duplicated or very similar code is created, then create a modular function and use it.  This makes it easy to read because its only one class/function and you will soon learn what it’s doing. It’s also less code to read.

Duplicated code is a sign of lazy programmers who can’t be bothered to create reusable code, this should be a warning sign that poor code is being written and standards are dropping.

Why am I talking about Readability

I had a bug today and 3 developers (one of them me) had no idea what or how the code was working.  We have a grid in CRM, which is a fantastic looking grid, it has icons in and to the user it’s magnificant.  It’s referred to as the magic grid.  It’s called the magic grid because it’s magic (as in good) and because no one really knows how it works apart from the developer who created who has now left.

People try to avoid making changes to the magic grid because the code is complex and does not score high on the readability scale.

The magic grid was automatically selecting some items, why?

I finally tracked down one part which was making the items in the grid automatically selectable, it was changing month13 to either the value 2 or 3.

       //Deal with present
        //Overdue
        if (nextService != null) {
            if (nextServiceYear < visitDateYear || overDue) {
                var month = "month13";
                gridItems[index][month] = "3";
            }
            if ((nextServiceYear === visitDateYear && nextServiceMonth < visitDateMonth) || overDue) {
                var month = "month13";
                gridItems[index][month] = "3";
            }
                //Due Today
            else if (nextServiceMonth === visitDateMonth && nextServiceYear === visitDateYear && !overDue) {
                 var month = "month13";
                gridItems[index][month] = "2";
            }
        }
        else {
            var month = "month13";
            gridItems[index][month] = "0";
        }

Then later when drawing the grid

else if ((item.month13 == "2" || item.month13 == "3" ) && item.manuallyAdapted != true) {
//Next, reevaluate the grid selected values so overdue/due now items are selected
 item. select = "true";

 

Then later when drawing the grid

else if ((item.month13 == "2" || item.month13 == "3" ) && item.manuallyAdapted != true) {

//Next, reevaluate the grid selected values so overdue/due now items are selected

item. select = "true";

Month13 was a weird extra month, which was being used to hold values used in the functionality but no where was the number 2, 3, 0, 4 explained as to what they meant.  It literally was magic!

Something extra smelly for you

If you want something else interesting in this error, try Code Smells

CRM 2013 – When should you create a custom activity entity?

Carefully consider the security consequences of choosing to create a custom activity, if you get it wrong, you will have to do it all again and move the data – The Hosk

recently I blogged about entity ownership – CRM Entity ownership – How do you decide? and today I will continue my adventure with entities and look at activities and custom activities.

What are activity entities

Before you we talk about custom activities we need to understand what activity entities are in Dynamics CRM.  Activity entities are activities and tasks people can perform in CRM, out of the box we have there are

  • Phone Call
  • EMail
  • Letter
  • Appointment
  • Fax

Activities share a some common fields related to time (spent on the activity)

  • Start time
  • Stop time
  • due date
  • duration
  • description
  • subject

Activities have 3 states

  • Opened
  • Canceled
  • Completed

Activities are created and then completed (email sent, phone call made, meeting attended) or cancelled.

Activities can Party

There is a complex and mysterious force in the CRM world called ActivityParty.  I’m not going to go into in detail but it’s a complex type which can be a person or group associated with an activity.  It’s used when you select multiple email addresses, multiple resources in.

if you want to learn more about ActivityParty entity click here

This blog post from the CRM legend Richard Knudson explains about ActivityParty in the blog post Dynamics CRM Activity Parties, msdn have a great resource on ActivityParty here

Pictures can explain easier than words and this picture is great and it’s from the msdn post on Activity Entities

 

Custom Activities

We understand what activities are in CRM and they seem pretty useful and the good news is in CRM 2011 onwards you can now create custom activities.

Like many things in CRM, just because you can doesn’t mean you should, you need to think long and hard before you press the button – The Hosk

What is a custom activity?

When you create a new entity you can make a standard custom entity or a custom activity.  Custom activity which will appear in the same options where the current out of the box activities appear (If Display in Activity Menus is checked)

Custom activities like OTB activities are usually activities and have time aspects, examples I can think of our

  • Meetings
  • Project Work
  • Task time
  • Jobs
  • product released
  • Milestones

How do you create a Custom Activity

When you create a new entity, there is a check box

Define as an Activity Entity

if you tick this checkbox you new custom entity will be a new custom activity

custom activity

 Important facts to remember when creating Custom Activities

  • Custom Entities when created by default are not viewable/usable to any users apart from System Administrator and System customizer roles. Other security roles will have to add the entity (don’t forget)
  • IF an entity is selected as an activity this cannot be undone
  • Custom activity entities are available to users who have access to other activity entities

This blog from PowerObjects walks you through creating a custom activity, what’s particularly useful is how it shows you the custom activities sitting with the system activities, it gives you a good idea how useful the functionality can be.

When should you create a custom activity

You should consider creating a custom activity if the entity is an action or the activity

  • Is it an action?
  • Is there time related aspect like duration, start time, end time?
  • Activities are you usually completed/closed (like attending an appointment, sending an email, making a phone call)
  • Is it an activity, do you need to record how long you spent on it
  • There is NO security requirements now or in the future (e.g. all users can see activities)

 

Security Considerations

Security is a vital consideration you must take into account if you are thinking of creating a custom activity, the reason for this is a custom activity will not have any security, all users will be able to see it.

Why is this?

You won’t be able to configure the security roles to allow certain users to see your custom activity because it will come under activities in security privileges.  The ability to group activities together is a benefit and a disadvantage.

Group activities is great when you want to see all activities together

Grouping activities comes at a cost, all activities come under the same security privilege (if I’m wrong CRM MVP Adam Vero will be sure to correct me :-))

If you only want to allow a certain security role to see activities, this would mean the other users wouldn’t be able to see any of the out of box activities (phone, email, appointment etc) as well as your new custom activity.

99 percent of the time you will want all users to see activities, which means you can’t hide your custom activity from any users.

This has caused me a lot of pain in previous projects where suddenly a customer decided we needed to apply security to a custom activity.  The solution to this is you have to create a normal custom entity (Which you can apply security to), copy all the data into your new entity and then delete the custom activity.

It’s a painful process, so think long and hard before creating a custom activity.

An additional reason you should think carefully before pulling the trigger and creating a custom activity is you cannot change to a custom entity if you change your mind, there is no turning back or switching.  This is a delete and start again decision and every time you delete an entity, you will have to rescue the data by exporting it before you delete the entity (if you want to keep it of course)

This isn’t the same but like my blog on CRM Entity ownership – How do you decide? you can change your mind later, so you have to try and make the right decision.

CRM MVP Gonzalo Ruiz has written a great blog

Custom Entity or Custom Activity in CRM 2011?

The blog runs through the differences between creating a custom entity or custom activity and makes some very good points.  The blog was written for CRM 2011 but most of the points are relevant for CRM 2013 and CRM 2015.

If you want to read a bit more about Gonzalo, read his Hosk CRM MVP questions and answers

 

 

Business Process Flow Facts, Functionality and Limitations

What are Business Process Flows?

Business process flows are new functionality added in CRM 2013, they provide a guided business process which can span multiple entities.  Business process flows are role based allowing you users with different security roles to use different process flows

Business process flows work Mobile (tablets), Outlook and browsers.

Business process flows provide a step by step guide through processes which can be split into distinct stages.  When the user is in a Business process flow the user can add data to fields in a process bar, which shows the key fields for each stage.

The Lead to Invoice business process flow is created in the out of the box CRM 2013.  There are 3 business process flows activated by default.

Field level security is applied to the fields in the business process control but if a field is required to be filled in but the user doesn’t have the correct field level security permissions, the business process flow will act as if it has a value.  This ensures users cannot get stuck in a business process flow due to lack of field level security privileges.

For a quick introduction to Business Process Flow I recommend reading this blog

A Quick Introduction to Business Process Flows in Microsoft Dynamics CRM 2013

Practical considerations

I have listed the details and limitations of how Business process flows work in the Hosk notes below but here are a few key points

You can only run one business process per record.  This means you can switch business process flows if you security role allows but you do this by quitting the current business process flow.

You can stop a user from moving on a stage by making a field required

Stats – each entity can have 10 business process flows! A business process flow can have 30 stages.

All fields on an entity can be used in a business process flow, even fields which are not held on the form.

 

MB2-703 Resources

For those studying for the CRM 2013 Customization and Configuration exam, there is plenty of material I have created with various notes, explanations, videos and practise quesitons

MB2-703 – CRM 2013 Customization and Configuration Certification

 Hosk’s Business Process Flow Notes

  • Business process flows do not run but provide a means of added data to various entities/fields for those entities in the business process flow
  • Business Process Flows cannot be disabled once enabled
  • 29 entities have been updated in CRM 2013 to use the new form style which also means that they can use the new Business Process Flows and Business Rules
  • Entities with the navigation bar and left hand menu (CRM 2011 style) cannot use business process flows.  To enable these forms you would need to merge or recreate them in CRM 2013 GUI style
  • Business process flows are not started but will begin automatically on the creation of an entity
  • Users can switch between business processes manually (cannot happen automatically)
  • You can switch between business process flow programmatically using That could be done through JavaScript or plugin. https://deepakexploring.wordpress.com/tag/updating-process-id-in-crm-2013/
  • Business processes do not have any conditional or branching logic. They run in a linear, staged process.
  • Business processes cannot be exited or abandoned, the user can come back
  • Each entity can have no more than 10 activated business process flows
  • Each process flow has a maximum of 30 stages
  • Multi-entity process can use no more than five entities.
  • You can only run one business flow for each record
  • Current process and stage is a unique identifier. This allows the user to return to the process at a later time.

business process flow

  • Stage gating is making field required before a user can move to the next stage
  • Business process flows can be associated with security roles, so only users with specific security roles will see the business rules.
  • If you create an entity and the entity and your security roles have multiple business process flows available, the user will be presentation with a choice.
  • If you switch processes, it will start at the first stage of the process.
  • To enable a custom entity for a business process flow, you check Business Processs flows checkbox, this cannot be unticked and will create some fields on the entity.
  • Only entities which used the CRM 2013 – updated forms can use business process flows.
  • Business process flows are linear, there is no branching or logic
  • Business process flow have required steps the user must go through
  • When you enable business process flow on an entity and publish, two fields of type unique Identifier are added to the entity called ProcessId and StageId
  • 25 system entities can be enabled for business process flows
  • All custom entities can be enabled for business process flows
  • It’s possible to have up to 10 active business processes per entity
  • A business rule process can have 30 stages over up to 5 entities
  • All entity fields can be used within a stage, even fields not on the entity form.
  • If the field is on the main form, the value will sync as soon as the user sets the focus onto another field
  • When a field is updated in the business process flow it will trigger related business rules and javascript
  • Field level security is applied to fields in the process control
  • You can peak at other stages in business process by pressing the arrow buttons (But it won’t move the current step they are on), unless a stage involves creating an entity where the arrow will be padlocked
  • Security roles are applied to business process rules, this limits access like forms.
  • By default system administrator and customizer have access to business process flows
  • If there are multiple business process flows and the user has access to them, the user can user can switch between process flows for the same type of entity (e.g.  other contact business process flows)
  • You can copy a business process flow regardless of the business process status
  • To copy a business process flow, open the business process flow and choose Save As
  • When a business process flow is copied it exists in the default solution not a company solution.
  • Only deactivated business process flows can be edited.
  • Business process flows have stages, each stage can have many steps
  • Different entities used must have a N:1 relationship to the previous entity
  • To use an entity used in a previous stage you select the Close Process Cycle option
  • You can apply a different field label to fields in the process control
  • Javascript or business rules triggered by changing a field value, if they hide a field on the form, the field will also be hidden on the business process flow control.
  • Fields changed to read only by Javascript or business rules are not read only in the business process flow control.
  • Fields requirement setting is the same on the form as the business process flow control.
  • If a user doesn’t have the correct field level security and the field is a required field in the business process, it will treated as if the field has a value and the user can continue the business process flow