CRM 2015 – Tips on passing MB2-707 customization and config exam

This blog post gives tips on passing the MB2-707 certification, the real value of the certification isn’t the certification itself but what you learn to get it.

I created this blog post for the CRM 2013 customization and config certification

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

I recommend you read the blog post above, this post will concentrate on CRM 2015 version.

Why should you take the certification

I have written about why you should get Microsoft Dynamics CRM certifications before

Here are a few points

  • It’s a great method to learn the out of the box/inbuilt functionality in Microsoft Dynamics CRM.  The first tool a CRM developer should use to deliver request features is out of the box Dynamics CRM functionality.  The out of the box functionality works and has been thoroughly tested by Microsoft (most of the time).
  • Out of the box functionality is quicker to create and is easier to maintain.
  • Study for customization and config certification is a great way to learn new functionality added in the Microsoft Dynamics CRM
  • Certification gives you a deadline to motivate you to learn
  • MONEY, a certification is something to take into your yearly review.

Understand the new functionality

I have taken the Microsoft Dynamics CRM customization and config certification for

  • CRM 4
  • CRM 2011
  • CRM 2013
  • CRM 2015

The exams historically have many questions on the new functionality added in each release.  The major new features added into CRM 2015 are

  • Rollup and calculated fields
  • Business Process flows
  • Business Rules (enhanced)
  • Hierarchy Visualization
  • Search multiple entities
  • Enhanced Mobile

This blog Dynamics CRM 2015 / 2013 New Feature Summary has a quick list of new features

This doesn’t mean you should ignore older functionality, you need to study all the areas in the certification criteria

MB2-707 – Microsoft Dynamics CRM Customization and Configuration

Study Material

If you work for a company who has PartnerSource I would recommend you use the study material provided by Microsoft which is free for PartnerSource members.  I found a link here

Course 80665: Customization and Configuration in Microsoft Dynamics CRM Online and On Premise [eLearning]

The eLearning provided by Microsoft is the best study resource because it’s focused on the customization and config certification.

I created  articles, questions and videos I have created for the CRM 2013 customization and configuration certification

MB2-703 – CRM 2013 Customization and Configuration Certification Information

MB2-703 – CRM 2013 Customization and Configuration Hosk study notes

Most of the content is still relevant for CRM 2015 – MB2-707 exam, you will need to make notes on the new functionality added into CRM 2015.

Make notes and use Microsoft Dynamics CRM

Don’t just read information for the exam, make notes and use a free CRM trial to try out the new functionality.

  • This helps you learn how the functionality works.  It will help you remember it for the exam.
  • My trying the functionality you get practical knowledge, not just theoretical

When I study for CRM certifications I make bullet point lists of what the functionality can do. I use the list to revise and create YES/NO questions and multiple choice to help me study.

Here are my security exam cram notes

CRM 2013 – MB2-703 – Security Exam Cram Notes

A different method is to go through the skills measured in the certification criteria and highlight the functionality you need to study.  Find blogs, articles and white papers and make notes.  I did this but got bored

The Free MB2-703 Study Guide

Other Blogs information

There isn’t much information but here are a few blogs

Good luck to anybody taking the exam

 

CRM 2015 – The benefits of Access Teams

Access teams are an underused feature in Microsoft Dynamics CRM because the benefits of access teams are not clearly understood by many CRM professionals.  

When I have asked fellow CRM professionals about Access teams most had only heard of Access team and none had ever used them.

This post will explain
  • What are Access Teams
  • The benefits of Access Teams
  • When to use Access Teams
This week a new plugin was added to the XrmToolbox to XrmToolBox plugin for moving access team templates, which prompted me to investigate Access teams.

What are Access Teams?

I learnt about Access teams because it’s on the CRM 2013 customization exam.  Study for certifications are a good method to learn new functionality added to Microsoft Dynamics CRM.

Here is some information to help study for Microsoft Dynamics CRM customization certification and this post explains the benefits of acquiring Microsoft Dynamics CRM certifications 

To get an introduction to Access teams read

CRM 2013 – MB2-703 – Access Teams and Access Team Templates how to use them and key facts

There is a great white paper on access teams 

The purpose of access teams is a dynamic way to share records with users without using the default sharing functionality in CRM or security roles.

Access teams are enabled on an entity basis.  When Access teams are enabled for an entity, a grid will appear on the record.  Any user record you add to the grid will have permissions (controlled by a template) to the record.

Access teams are a quick way to share records to an ad hoc team, an example is people working on an opportunity record.  Instead of using security roles/teams/business units to give access or sharing the record you can add the users to the access team.

A key fact to remember is Access teams don’t have security roles.  Because Access teams don’t have security roles this prohibits them from owning records because they cannot be granted the privilege to own a record.

Team confusion

Confusion understanding the purpose of Access teams is because team functionality exists in CRM, users aren’t clear how Access teams are different.

The table compares Access Teams and Owner Teams.

  Access Team Owner Team
Can own records No Yes
Team can be assigned security records No Yes
Manually created and managed No Yes
Displayed in Team views No Yes
Cached by CRM Server when user logs on No Yes
Use Team template to define security priviledges Yes No

Access teams remind me of field level security (how to setup field level security) because the template specifies a simple security permissions

Access teams share record permissions without the overhead of using the full CRM security model, avoiding the sharing overhead which can occur with a complex security model.

The benefits of access teams

A benefit of studying for the CRM customization certification is learning how Access teams work, it doesn’t teach you how and why you when you should use them

reminds me of this quote

Some men learn all they know from books; others from life.  both kinds are narrow.  The first are all theory; the second are all practice.

It’s the fellow who knows enough about practice to test his theories for blow-holes that gives the world a shove a head, and finds a fair margin of profit in shoving it.

George Lorimer, Letters from a Self-Made Merchant to His Son

Two great resources for learning the benefits of Access Teams

Reduced sharing overhead

Sharing records in CRM can cause the POA table to grow in size.  A large POA table can affect the performance of your CRM system.  Access teams offer a way to share permissions to records to individuals but using CRM managed access teams

The performance benefit of Access teams is it shares using teams is more efficient than sharing to individuals.

Adam Vero corrected when I mistakenly put Access Teams don’t use the POA table, this is false, Access teams write records to the POA, it uses a team rather than an individual users.

Quick and ad hoc

If your need is to share records to groups or individuals, not in teams, Access teams is great for sharing permissions to unrelated individuals quickly and easily.

Manage sharing

Managing shared records in Microsoft Dynamics CRM can be difficult (can you remember how to see what records are shared with whom?).  Using Access teams it’s easy to see who the record is shared with and add/remove users.

Improved performance

Read Adam Vero‘s section on Performance Improvements because he explains it better than me.

Access team facts

  • When records are deactivated, access team permissions are not effected
  • Access teams don’t have security roles
  • Access teams can’t own records
  • Access teams are created and managed by CRM
  • An access team is created when you have added the first user
  • Access teams are not visible in default team views
  • Sharing records via access teams isn’t displaying in the sharing screen
  • Access teams can’t be used in resource scheduling
  • Multiple access teams can be linked to a single record

Understanding Access Teams

We understand Access teams,  how they work and the benefits but when should you use Access teams?

If you are sharing lots of records, investigate an alternative method of sharing records which does not grow the POA table.  Sharing records are difficult to manage to individuals, you should use teams.

When to use Access teams

When you need to grant permissions on individual records.  Access teams are great if you need to grant permissions to different individuals and not teams.  A good example is granting permission on an opportunity to users from different areas, sales, marketing, support who are creating a proposal/demo.

If the group of people who need to access a record will change often, Access teams offer a way to add/remove users who can access the record.

Access teams are great for quick/ad hoc sharing

When not to use Access Teams

If security is important it’s better to use the default CRM security model.  Access team members can add/remove other users which might compromise the security of the record. Default security is more powerful and nuanced, Access teams have 5 levels of permission.
When teams are static it’s better to use Owner teams to manage access to records.
If the volume of records being shared/view is high, managing permissions through Access teams will take too long.

The problem with access teams

Microsoft added Access teams into CRM 2013 but then forgot to add any functionality to export/import Access team templates between CRM instances.

This topic is explained CRM 2013 – Why are access teams marooned?

With Access teams not included in the CRM solution it means Access team templates need to be manually recreated in all your CRM environments, this massive overhead, almost makes Access teams unusable.

Access teams have a connect request Access Team Template in CRM Solution

This request is active, created on 11/27/2014, it has 68 votes but as yet Microsoft have not responded.  Is Microsoft Listening to the Dynamics CRM Community?

I understand Microsoft are working on updating the connect platform, this will be a welcome change but I would like to see more responses from Microsoft.  The most disappointing part of the Microsoft Connect experience isn’t the poor user interface its the fact Microsoft doesn’t seem to be listening to the suggestions of the CRM community.

Access Team templates tool

The CRM community is awesome and Lucas Alexander has created a plugin for the XrmToolbox to move Access team templates.

XrmToolBox plugin for moving access team templates

The tool allows you to easily export and import Access team templates between CRM organisations

Try Access Teams

If you haven’t used Access teams, open a CRM trial and try them out.  Access teams are  a great way to share individual records to individuals without impacting the POA table.

Now you understand how Access teams work, the benefits and when to use them.   You can see where it might be appropriate to use them or advise your customers the functionality Access teams provide.

CRM 2015/2013 – All you need to know about Database Encryption

There are two types of encryption: one that will prevent your sister from reading your diary and one that will prevent your government.

Bruce Schneier

 

Encryption problems don’t occur because Microsoft Dynamics CRM encrypts password fields. Problem’s occur if you don’t realise CRM 2013/2015 database are encrypted and encryption keys need to be looked after.

CRM 2013/2015 and future versions automatically creates a default encryption key and encrypts data in CRM.

Understand how database encryption works to ensure they don’t lose the encryption key or create a situation where they don’t know where the original encryption key came from.  Retrieving encrypted data isn’t possible with the encryption key, deletion and recreation will be your available options.

Along came an SQL Encryption error

In a CRM 2013 dev organisations clicking on mailboxes would bring up an SQL encryption error

No one turned on database encryption, so this raised questions

  1. Why were SQL encryption errors appearing?
  2. Why in one of our dev organisations?

Database encryption was introduced in CRM 2013, automatically enabled and encrypts email password fields.

Developers won’t notice database encryption in a new CRM organization because an encryption key is created for you, all functionality works and mailbox passwords encrypted.

It wasn’t until we created a DEV environments from a copy of a CRM 2013 org and restored it, SQL encryption errors appeared.

If you attempt to look at the database encryption settings on an http on-premise organisation you will get an SSL error.

Data encyption - no https

It’s not uncommon to find the CRM developer bashing head on desk whilst pulling out his hair.

When you work out how to turn the SSL check,  you then get presented with a blank certification field with a helpful place to past the encryption key? Erm……what, where, who is the encryption key (repeat head banging).

If you are lucky the encryption key is in the original database, Other scenarios could be the original database is deleted or you can’t remember what CRM org was the original.

Why it’s important for Developers to know

Database Encryption gets turned on automatically, if you backup/copy and restore a CRM organisation the copy database won’t have database encryption key.  It’s easy to copy the database encryption key once you know where to look, it’s important to plan because encryption keys can change or get lost.

What won’t work if you don’t have your database encryption key?

  • Server side Sync
  • Mailboxes (opening)
  • Cannot update user email addresses
  • Cannot update mailbox emails

If server side sync doesn’t work workflows sending emails might not work

You cannot change emails of users and mailboxes.

The biggest problem I experienced was the loss of time.  Time investigating the problem and understanding database encryption.  The investigation stopped development on areas which needed email functionality using server side sync.

The forum title below captures the feeling

HELP! My data is encrypted and I didn’t do it!

It’s important for CRM developers to understand database encryption in Microsoft Dynamics CRM is because it’s automatically turned on and cannot be disabled.

If you restore a CRM database the database encryption won’t be activated, encrypted data isn’t available to your CRM instance, certain email functionality won’t work, throwing SQL encryption errors.

Restoring databases can happen when creating new development environments, QA, TEST, PREPROD environments.

If you create a new CRM organisations for each environment, each CRM database is automatically encrypted with its own key.

If you copy and restore CRM organisations you MUST copy the database encryption key from the original CRM database and activate the database encryption.  CRM developers need to be proactive and mange the encryption keys, to avoid ending up in a mess.

Why doesn’t the encryption key copy

The data encryption key is stored in the MSCRM config database and not in the instance CRM database.  So when the bak file is imported into a new CRM org it doesn’t know how to get the key because the key isn’t in the bak file.

It can’t get it from the MSCRM_config because by creating a new org you will create new /different data in the MSCRM_config.  Each CRM database will have its own encryption key.

What is Data encryption

Always start with the CRM SDK

The CRM SDK has two articles on database encryption, The first describes what SQL field level encryption is and does.

Field-level data encryption

Microsoft Dynamics CRM uses standard Microsoft SQL Server cell level encryption for a set of default entity attributes that contain sensitive information, such as user names and email passwords. This feature can help organizations meet FIPS 140-2 compliance.

 

This article explains changing and copying your encryption key.

Data encryption 

A 5 minute video to explain the basics of database encryption

Microsoft Dynamics CRM 2013 Setup and Upgrade New Features – Data Encryption

The video states Yammer tokens are encrypted, I’m not sure what this means or if Yammer won’t work on a database which isn’t encrypted,

What is encrypted?

Passwords for email are encrypted but what does this mean?

The article describes what is encrypted

Entity Attribute
EmailServerProfile IncomingPassword
EmailServerProfile OutgoingPassword
Mailbox Password
Queue EmailPassword
UserSettings EmailPassword

I found the answer on this page, If you lost your encryption key

Entities

  • Mailbox
  • Email Server Profile

If you do an advanced find and use the entity of Mailbox.

You will get a list of mailboxes, if you click on one, on an encrypted database where you have lost the encryption key you will get this message

Data encyption 2

If you are wondering where the mailboxes are used, each user has a queue and each queue has an Emailbox

Why is data encrypted

Understanding the purpose of functionality, makes it easier to comprehend the logic driving the functionality.

The purpose of encrypting user and password fields in CRM is to hide this information from CRM developers/CRM Admins.

Data encrypted is around email functionality is because Microsoft Dynamics CRM has no email functionality.  Email functionality is outsourced to

  • Email Router
  • Server side sync
  • CRM users Outlook

To use external email services, it passes credentials to the other services, to make things secure CRM encrypts this data.

CRM Encryption Facts

Is database encryption is automatically turned on?

YES!

Whilst writing this article I get confused whether database encryption was turned on on or not

This paragraph in Field-level data encryption confused me

The encryption key is required to activate data encryption when you import an organization database into a new deployment or into a deployment that has had the configuration database (MSCRM_CONFIG) recreated after the organization was encrypted.

The paragraph is saying (and the cause of problems I experienced) selected fields are encrypted, its turned on but not activated on imported databases.  You will need to activate encryption by copying the correct encryption key, which you can find on original database.

Database encryption facts

  • When doing a retrieve on an encrypted field value, a null is returned
  • Encrypted fields cannot be indexed
  • Database encryption is automatically turned on for any CRM versions of CRM 2013 and higher.
  • You cannot turn database encryption off
  • You can set and retrieve the database encryption key using the CRM SDK see here
  • The SSL check is automatically turned on but can be turned off by updating the field on the mscrm_config database
  • Users with the Microsoft Administrator role can change the CRM encryption key
  • All the encrypted fields are password fields
  • Default encryption key setup during setup
  • All new and upgraded (which means all) CRM version will have data encryption enabled
  • You can’t audit or customize the encrypted fields

Common Database Encryption questions

Database encryption is likely to interest CRM developers when things have gone and you have restored a CRM database.  I will cover the common scenario’s and give  links to the answers

Can you change the database encryption key?

Yes, but you have activate database encryption.  If the database encryption key field is blank you need to copy a the key from the original database.

I can’t check the database encryption because of the SSL check?

Microsoft turned on the SSL check by default, all on-premise CRM installations which are not SSL enabled cannot open the data encryption screen.

Data encyption - no https

To view the data encryption details you need to disable the SSL check

Go to Settings –> Data –> Database

Data encyption

You cannot check the Data encryption key on a database if CRM is not SSL (HTTPS).  This is because the Microsoft config database MSCRM has a field to stop CRM

You need to connect via SQL manager to view and change the database field on the MSCRM_Config database DisableSSLCheckForEncryption

I don’t recommend changing a CRM database,  particularly the MSCRM_CONFIG because this is unsupported by Microsoft

Why you shouldn’t put unsupported customizations in Microsoft Dynamics CRM

The only time you can access the database is when Microsoft say you can on this page

When the Microsoft Dynamics CRM (on-premises) website is not configured for HTTPS/SSL, the Data Encryption dialog box will not be displayed. For a more secure deployment, we recommend that you configure the website for HTTPS/SSL. However, if the website is not configured for HTTPS/SSL, use a tool that can be used to modify CRM database tables, such as Microsoft SQL Server Management Studio or the Deployment Web Service, open the configuration database (MSCRM_CONFIG), and in the DeploymentProperties table, set DisableSSLCheckForEncryption to 1.

We have permission, here is the SQL

This views the data

SELECT [ColumnName], [BitColumn]

FROM [MSCRM_CONFIG]. [dbo].[DeploymentProperties]

WHERE ColumnName= 'DisableSSLCheckForEncryption'

This updates it

UPDATE [MSCRM_CONFIG].[dbo].[DeploymentProperties]
                SET [BitColumn]=1

                WHERE ColumnName='DisableSSLCheckForEncryption'

You need to do an IISReset after changing the database value, until you do you won’t be able to access the database encryption screen.

You can set the field back after you have got the database encryption key if you wish.

Set by step instructions here

My Database has no encryption key

If you have turned off the SSL check and there is no database encryption key, it means you have a restored database.  You need to find the original database and copy the database encryption key

This article will help

Data encryption errors after restoring CRM database

Best practices – Backup your key

Microsoft recommends changing the database key once a year, the article below describes how to backup your encryption key

What if you lose your key

You are in a pickle!

I read this blog post – Tip of the day if you lost your encryption key

It states you can add a new encryption key if you delete the encrypted data.  Deleting the data is difficult because mailboxes are linked to User and Queues, which means they are Dependant.

You cannot delete the data using the UI, I tried using the CRM SDK but got the same dependency errors.

This forum post suggests you can null but I’m not sure this would work (make sure you backup the DB)

HELP! My data is encrypted and I didn’t do it!

One solution is to create a new CRM organization and import your solution files.  This works because the a new database is automatically encrypted, so you don’t need to recover the database encryption key.

Good articles on CRM and database encryption

CRM 2013 and SQL encryption

 

 

Hosk’s Top CRM Articles of the week – 26th October

One day you go into work, the work is difficult and boring.

The next day you can go into work and continue working on the same piece of work and it’s interesting, exciting and enjoyable.

The work stayed the same the difference was you and your approach to work.

This lead me to watch , a small pale blue dot from Carl Sagan

Quotes of the week

that IS the question: whether to float with the tide, or to swim for a goal. It is a choice we must all make consciously or unconsciously at one time in our lives.

Hunter S Thompson featured on Farnam Street blog

You can’t change the CRM SDK, you must change to use the CRM SDK to develop suitable customizations for the customers requirements – Hosk Quotes

“Drama is anticipation mingled with uncertainty.”

― William Archer

 

Article of the week

Getting started with CRM development

A great list of resources to get started with CRM development.  There is a wealth of information available for CRM developers and this blog rounds up the Microsoft offerings.

I would add the list of top 25 CRM blogs to the list and the Microsoft Dynamic CRM forums

Not forgetting Hosk’s CRM Developer Articles

CRM

Why Should You Always Debug with the Plugin Registration Tool

I agree developers should use the plugin registration tool because it doesn’t stop any other developers on the system.  There are other reason, read the article to find out

CRM Implementation and Deployment Best Practices

Interesting list of deployment best practices

Calculated and Rollup field limitation

A classic CRM gotcha you need to know about regarding calculated and rollup fields.

CRM Deployment Best Practices

Technet outline for further articles,  provides a good framework for things you should have already thought about.

New Knowledge Management in Microsoft Dynamics CRM 2016 release

Good new features, why has it taken so long?

Data Loader Service: Preview Feature for Microsoft Dynamics CRM Online

Getting data into your CRM online instance can be pain.  You should also read How to create realistic Test Data for your CRM Project and why you should

How to Integrate Microsoft Dynamics CRM

At the heart of CRM is data but what’s the best tool to use to import it

A Classic CRM debate – To use leads or not to use leads, that is the questions

I have had many a discussion with customers about leads, don’t discuss it

The pains of setting up a new CRM dev environment

Setting up CRM dev environments is something which has to be done

Dynamics CRM 2015 Workflow Tools

Useful free tools

CRM 2013 – using Entity.GetAttributeValue instead of Entity.Contains

Get rid of your if (entity.field != null) and use Entity.contains

A record count tool

counting records can be useful in scenarios of counting records.

Business Rules – Your Key to Programming Knowledge in MS Dynamics CRM

A great tool for non coders to create JavaScript like actions on your CRM forms.

Getting the CRM Developer toolkit working with Visual Studio 2013

With a few edits here and there you can get CRM Dev toolkit working with visual studio 2013 whilst we wait for Microsoft to make an official version

Javascript to set the current date and time

Set the current data and time using JavaScript.

{Customization and Scripting Tip} Workaround for showing some number fields without comma in Dynamics CRM

Good tip

Programmatically create folders and upload files in SharePoint Server 2013 through Plug-in/Workflow

Useful to have an example, SharePoint code needs a different way of thinking

programming

Javascript goes async

Satya Nadella Explains Why Microsoft Still Makes Hardware

An Ex-Microsoft Engineer’s Advice to Programmers: Learn How to Write

other

9 Learnings from 9 Years of Brain Pickings

How to tell a great story, visualized

The 8 causes of Plateaus

Tesla’s batteries to power two dozen Calif. office buildings

Hunter S. Thompson on Living versus Existing

Previous top picks

Hosk’s Top CRM Articles of the week – 13th October

Useful Hosk Links

Hosk list Of CRM 2013 Tools

A list and review of CRM 2013 tools, this will probably work in CRM 2015 as well

Hosk’s CRM Developer Articles

A collection of my favourite CRM Developer articles I have written

MB2-703 – CRM 2013 Customization and Configuration Certification Information

All the CRM 2013 content to help you pass the exam

HoskWisdom – Hosk Developer Quotes

 Words of Wisdom from the Hosk.  I have written over 900 articles, surely I should have said a few memorable things

Oi Hosk, Why the lack of blog posts

Be grateful for what you have and stop complaining – it bores everybody else, does you no good, and doesn’t solve any problems.

Zig Ziglar

 

Some blog readers have complained (in a nice way) about the lack of blog posts from the Hosk.

One person said, why don’t you write a blog about not writing blog posts, which would help fix the lack of blog posts.

My first reaction was to say

  • I have been busy
  • I haven’t had time
  • I was ill

Often my instinctive reaction to a question is often defensive and a justification to myself.

Defensive answers are not useful because they don’t tackle the true cause deflect the question from being answered.

The truth is, I haven’t prioritised writing my Hosk CRM blog.  If you really want to do something you make time to do it.  

Quality not Quantity

When writing the blog post Tips on how to become a CRM MVP from CRM MVP’S, which summarises CRM MVP Q&A

I have been trying to increase the quality of posts, by spending more time constructing blog posts (this one excluded) by

  • Make notes on the subject
  • Design the subheadings
  • Write
  • Edit (about time many readers will be saying)

The goal of writing better quality posts is to create posts with more Hosk thoughts and insights (I do have a page of quotes!).  Do create posts with deeper insights you need to spend more time thinking about a subject.

The Hosk blog grows

I have been blogging for 5 years and have written over 1000 posts on CRM.  The early posts were quiet basic often involving linking to other good blog posts.  In the early blog days what I lacked in skill and original thought I made up for in number of posts.

The early blog posts I viewed the blog as a tool to help share great content on CRM 2011.

As my knowledge and expertease in Microsoft Dynamics CRM grew so has the length, detail and insight in my blog posts.

The Hosk CRM blog has grown in numbers over and this year has already had 50000 more views than last year and for the first time I have clocked up over 500000 views in a year.

CRM MVP – Failed

An initial goal of the blog was to help me achieve CRM MVP status, I learnt like many others, it’s extremely difficult to become a CRM MVP.

A general rule of thumb with regards to becoming a CRM MVP (which I have been told many times)

Those who really want to become a CRM MVP, seldom do

 

After 10 nominations (2 and half years)  I believe you can’t become a CRM MVP by just writing a blog.   If you think who are the thought leaders in the Microsoft Dynamics CRM community, the currently nominated CRM MVP’s offer great advice, insights and best practices for Microsoft Dynamics CRM.

My motivation has changed to focus on creating quality blog posts.  A goal which I stated in New Year Hosk CRM Resolutions

Everyone should write a CRM blog

I believe everyone should write a CRM blog, for these reasons

  • To help others in the CRM community
  • To learn more about CRM
  • Social media content is your professional brand
  • A place to store your CRM knowledge

Writing the Hosk Dynamics CRM blog has been great and I have referred to it as my online CRM Brain in this blog post CRM 2015 – How to diagnose plugin errors.  If I have a CRM error, I usually search the Hosk CRM blog for answers (or google which usually takes me to the Hosk CRM blog).

Writing the blog has created a Hosk CRM brand and most CRM developers I meet have read my blog, which is cool.  It’s useful when going for interviews and in one situation someone went was asking me questions featured on my blog

The pain of setting up CRM Dev environments

“To see what is in front of one’s nose needs a constant struggle.”

George Orwell

Whilst creating a console app to create email records in CRM I find my CRM dev environment working against me rather than assisting me.

Setting up a CRM environment tasks

  • Restore a copy of a CRM organisation
  • Configure the custom project data
  • Configure CRM settings
  • Setting up web service’s (web.config, copying dll‘s)
  • Import data (How to create realistic Test Data for your CRM Project and why you should)
  • setting up users + security
  • testing everything is working

Configuring the data involves having both systems side by side and ensuring environment-specific settings are setup correctly.

Setting up environments is done in copying mode and not thinking mode, which can lead to mistakes.

The frustrating part is I’m not testing but spending time on creating my environment to enable me to test.

Copying and changing data can be done with no need to think.

Create a plan

You were born to win, but to be a winner, you must plan to win, prepare to win, and expect to win.

When creating a test environment, get a piece of paper and create a list of all the items you need to create/import/setup in order for your new Dev environment to be created successfully.

If you don’t create a list, it’s easy to miss important steps.  Not having a plan is trying to get to a destination without having a map, you will end up wandering around not knowing how near or far you are.

A common scenario is developers end up, installing and setting up lots of different parts of a new DEV system, not keeping track of what they have done.  When the new CRM dev environment doesn’t work they are not sure of the cause because they have changed numerous variables.

If you don’t create a new Dev organization systematically on creation, you will need to work systematically when trying to diagnose the problems.

It will be less frustrating to set up the Dev organisation systematically.

What if it still isn’t working?

Don’t Assume, Know

The above line is a mantra I use when diagnosing problems, which I discuss in this blog post

CRM 2015 – How to diagnose plugin errors

Make a list of the common problems with setting up your CRM system, check them and tick them off the list.

In this example I found a web service wasn’t working.  I tried checking lots of things, before finding the password for the web service app pool user had expired!

I would have found this problem sooner if I hadn’t assumed it was working

As I mention in Sherlock Hosk and the case of the annoying bug you need to work through potential causes, tick them off and narrow the list of potential problems

When debugging, eliminate what isn’t causing the problem and whatever code or customization is left must be the culprit.  – Sherlock Hosk

Be a finisher

Don’t give up. Every problem you fix is a step nearer to having a new working Dev environment.

Step back from the task and have a break.  This allows you to view problems from a different perspective, giving fresh insights, providing new solutions.

It’s amazing how an impossible problem late one day, is obvious when you start with a fresh mind the next day.

Problems are often solved with clear thinking and not brute force and continued bashing away.  It’s easy to get involved in setting up an environment/instance,  using effort instead of brains.

Difficult tasks is like navigating a maze, sometimes you need to stop, refocus and realise you have gone down a wrong path.

Don’t suffer in silence

Some developers suffer in silence, other suffer loudly with plenty of swear words :)

If you get stuck and can’t resolve the problems then try explaining them to a cardboard developer.

This works by explaining the problem to yourself/cardboard developer you are analysing and thinking logically.  You are giving your brain time and space to think about the problem.

If you are not making progress then it’s time to ask for help.

Most developers don’t mind helping a fellow developer if they can see the developer has tried lots of solutions but is still stuck.  Developers are not so willing to help a lazy developer.

Suffering in silence helps no one, you get frustrated, and the task doesn’t get done.

Part of the job

Setting up new instances or dev environments is a task which isn’t fun or exciting but it has to be done.

It’s in the list with importing solutions to different environments.

It’s better to leave these more manual, less creative tasks to the afternoon when you have depleted your energy, enthusiasm and will power levels.

Visual Studio 2013 Intellisense stopped working

I just installed Visual Studio 2013 and annoying the IntelliSense wasn’t working.

Initially I found this slightly annoying, after 5 minutes of not having IntelliSense this became a big issue.

I knew an answer couldn’t be too far away but where because what developer can survive without IntelliSense

IntelliSense worked if I pressed

CTRL + SPACE

Long 20 minutes

It was a long 20 minutes without IntelliSense but I finally found the solution.

Options –> Text Editor –> All Languages

intellisenes

You need to make sure Auto List Members and Parameter information are selected.

They were ticked, but I unticked/ticked the options and hey presto Intellisense was working again.

Useful links

http://www.dirkstrauss.com/coderush-stops-intellisense-working-for-visual-studio-2013/#.VgzwG4VVikr

http://stackoverflow.com/questions/8420303/visual-studio-c-sharp-intellisense-not-automatically-displaying

 

 

 

Hosk’s Top CRM Articles of the week – 13th October

I have been writing performance test scripts for Microsoft Dynamics CRM 2013 over the last week.  I now realise the reason for the lack of blogs posts and information on performance testing with Dynamics CRM.  I am using Visual Studio 2013 ultimate Web Performance and load tests and its frustrating, slow, difficult.

The main difficulties arise from the number of guids used in CRM.  To move the scripts from one CRM organisation to another, all guids need to be parameterised.

The CRM WRPC token stops scripts rerunning.  I took the easy option and turned off the token, instead of parameterising the token.  Read more here – What is the WRPC Token?

Microsoft released the CRM Performance toolkit, backwards compatible with CRM 2013.  The performance toolkit tests the default entities in CRM.  The good news is its a free performance testing tool, the bad news is its complex, making it difficult to change it to test your custom entities

CRM-Performance-Toolkit for CRM 2013/CRM2015 is released

CRM professional for hire

Hosk CRM Blog reader and CRM Professional Zsolt Zömbik is available for work now.

Why you should Zsolt

  • He reads Hosk’s Dynamic CRM blog
  • His name score extremely highly in scrabble
  • He has beaten Chuck Norris in an arm wrestle
  • When he runs over puddles, it doesn’t even ripple
  • He aims to be the first Microsoft Dynamics CRM professional to do a CRM deployment on Mars!

 One final point, he is ace at CRM.

Quote(s) of the week

The problem with troubleshooting is that trouble shoots back.” – Author Unknown
“Everything is theoretically impossible, until it is done.” – Robert A. Heinlein

People are born; leaders are made.
General Stanley McChrystal

Hosk Wisdom

People are born, CRM developers are made through knowledge of the CRM SDK and CRM project experience – Hosk

Article the week

become a CRM master 

Great concise blog with good advice to improve your CRM developers skills

Best of the Rest

How to create realistic Test Data for your CRM Project and why you should

Creating realistic test data for you project is great.  Create once, use many times.

Bad data can cause bugs

Good data can find bugs

XRM Strikes Back

Good article from CRM MPV Jukka about XRM

CRM Dialog and Custom Workflow example

An example of with a Dialog working with a Custom Workflow

Real time workflow or plugins

Scott Durow explains how Real time workflows work, comparing them to plugin performance

CRM 2013 – Why wasn’t an updated Custom workflow used by CRM?

I deployed a Custom Workflow but CRM wasn’t using it, find out why

How to remove dependencies to CRM Developer Toolkit

How to extract your customizations from the steel ninja grip of the CRM developer toolkit

Upgrading to Microsoft Dynamics CRM 2015? Here’s What You Should Consider

Things not to miss when deciding to upgrade to CRM 2015, things like, has your CRM become a beast!

Dynamics CRM How to access a QuickForm component via Jscript in Turbo Forms

I’m not sure why you would but here’s how

CRM 2013 – What is the WRPC Token and resolving INVALID_WRPC_TOKEN errors

WRPC token is generated every 24 hours to stop cross-site scripting, I bet you didn’t know that.

Using Actions in Microsoft Dynamics CRM 2015

I’m still not convinced by Actions in CRM. I keep reading articles thinking this time it will make sense

Read why Microsoft brought Adxstudio and why it’s good news

CRM 2013 – Understanding Solutions and how they work

Solutions in Microsoft Dynamics CRM give with one hand and bash you over the head with the other

Microsoft Social Engagement 2015 Update 1.2 is ready!

Social engagement continues to improve (which it needed to), check out the new functionality

Don’t just test the happy path

Developers should test the happy path, alternative path and the exception path otherwise you are giving bugs a place to hide

Case study featuring Unified Service Desk

The Unified Service Desk is awesome, why don’t more companies use it?

CRM-Performance-Toolkit for CRM 2013/CRM2015 is released

How to find Javascript files used in Microsoft Dynamics Forms

Find those pesky Javascript files

Get next case functionality for Dynamics CRM

Interesting read

Programming

how to be awesome part 1

Document integration – part 1: some ideas…

A Toolbox of Software Architecture Review Techniques. Part 1: The simplest thing you can do

What Led Amazon to its Own Microservices Architecture

other

morning pages – how to write them

Why you should write morning pages

How Con Artists Exploit Human Behaviour

16 Great Quotes For Software Testers

Shut Up, Sit Down, and Type

Previous top picks

Hosk’s Top CRM Articles of the week – 28th September

Useful Hosk Links

Hosk list Of CRM 2013 Tools

A list and review of CRM 2013 tools, this will probably work in CRM 2015 as well

Hosk’s CRM Developer Articles

A collection of my favourite CRM Developer articles I have written

MB2-703 – CRM 2013 Customization and Configuration Certification Information

All the CRM 2013 content to help you pass the exam

HoskWisdom – Hosk Developer Quotes

 Words of Wisdom from the Hosk.  I have written over 900 articles, surely I should have said a few memorable things

CRM 2013 – Why wasn’t an updated Custom workflow used by CRM?

You must be the change you wish to see in the world.

A custom workflow was published, but CRM continued to use the old custom workflow.  This error frustrated the developer for a while before diagnosing the problem.

CRM developers must understand the CRM architecture and CRM SDK, the alternative is fixing problems using trial and error.

trial-and-error method of find solutions is a lottery, sometimes you find the solution quickly, other times you try many alternatives.

The CRM SDK is a map showing boundaries and location of major CRM SDK landmarks.  Developers navigate the CRM landscape creating suitable customizations for customer requirements.  CRM developers who don’t consult the CRM SDK (map) can get lost and not know how to get back on course.

The Problem

A CRM developer updated a Custom workflow, published the custom workflow, but the old custom workflow was still running.

Experienced CRM developers will nod their head at this rite of passage.

The quick answer

Recycling the CRM app pool refreshed the custom workflow, doing an IISRESET resolve the problem.

Be careful recycling the CRM app pool or doing an IISRESET on production systems, it will disrupt users sessions.  IISRESETS and CRM app pool recycle should be done out of hours where possible.

The reason this worked is the custom workflow had changed the parameters passed in.

Detailed explanation

Thinking is the hardest work there is, which is probably the reason why so few engage in it.

Learning how the CRM works, helps diagnose future problems and avoid making similar mistakes.  The CRM developer centre is a great resource to help navigate the CRM SDK.

CRM developers benefit from learning the CRM SDK and CRM Developers should always start with the CRM SDK, understanding how it works and its quirks.

The better you understand how CRM works the fewer error/mistakes and dead ends you will make.  Dead ends can waste time because

  • Create a customization
  • find it doesn’t work
  • Remove customization
  • Have to create another customization

CRM is the framework sitting on top of languages JavaScript and .NET,  you need to learn CRM as well the programming languages.  This explains why .NET developers struggle with CRM development

Custom workflows and developer fear

CRM developers can fear custom workflows if they have never created one.  Custom workflows share many characteristics of plugins but have some fundamental differences.

One of the main differences is how the Custom Workflow variables are passed in but the key difference is plugins must run within 2 minutes or the plugin times out, throws an error and rolls back any changes.

Custom workflows are often used for long running process.

Here is an example of linking a dialog and a custom workflow

The blog below is common Custom Workflow question

CRM 2013 – How to get guid of initiating record in CustomWorkflow

Before you have created a customization, there is a doubt you can successfully create the customization.  The developer often has theoretical knowledge but not the practical experience.

The best method to remove this developer fear is to do it, it’s often not as difficult as your mind tells you it MIGHT be.

Why didn’t the Custom Workflow seem to publish

I remember this topic from a previous blog post

A Custom workflow is Asynchronous, running after the plugin execution pipeline has finished.  Async processes (System Jobs) are managed by the Async Queue Manager which decides what System job runs next.

The Async processes can never guarantee when they will run because the Async Queue manager decides what is run. It could be 3 seconds or it could be 2 days (unlikely but possible).

Microsoft have a great page – Asynchronous service in Microsoft Dynamics CRM, all CRM developers should be made to read this.

To refresh my knowledge on Async plugins blog posts

Async process are

  • Async plugins
  • Custom Workflows
  • Workflows
  • Bulk Delete jobs
  • System Jobs
  • Bulk Import

The CRM Asynchronous Service runs on the CRM server services (it could be on the back end server)

Recycling the app pool/doing an IISRESET resolved the problem but why?.  I looked towards the effects of IISRESET’s on plugins.

If you deploy plugins to the CRM database you should not need to restart the CRM async services or do an IISRESET.

To understand the effects of an IISREST read this post and the section What can you restart and how does it affect plugins.

In my example, I needed to to recycle the app pool/IISRESET, I found the answer article

Do we really need IIS Reset and Async Services restart when we deploy plug-in or custom workflow – CRM 2011

There is one other scenario when you need to recycle the CrmAppPool application pool. If you modify the parameters that are available for a Custom Workflow Activity, then CRM will not make any new parameters available when editing the workflow until after recycling the application pool.

I think the reason the custom workflow wasn’t updating was because the parameter values might have changed.

Interesting facts on Custom Workflows

A great article on using versioning your Plugins and Custom Workflows

assembly versioning

If you use versioning you will need to select the new version because both versions will now be deployed.

Some best practices/gotcha here – Asynchronous service in Microsoft Dynamics CRM

You should stop the asynchronous service before you unregister a plug-in that was registered to execute asynchronously. Stopping the service prevents a situation where an asynchronous registered plug-in has been queued for execution but for which there is no plug-in assembly currently registered. For example, consider the situation in which a plug-in has been registered to execute asynchronously and the related event has fired. After the asynchronous operation has been queued by the queue manager, you then unregister (delete) the plug-in assembly from the Microsoft Dynamics CRM database. In this case, an error occurs when the asynchronous service tries to execute the queued asynchronous operation but the plug-in assembly no longer exists.

 

How to create realistic Test Data for your CRM Project and why you should

True happiness comes from the joy of deeds well done, the zest of creating things new.

Poor quality and inconsistent data in your CRM database = bugs and odd behaviour out of CRM customizations and CRM demo’s – Hosk

Test data which doesn’t replicate live data in your CRM environment can cause bugs and create havoc in demo’s but few CRM developers or companies have realistic dummy data available to import.

Have you been in these situations

Whilst showing new functionality, unexplained errors disrupt the demo

or

Setting up a new CRM environment, finding the process is bottle necked by bad data (which always takes longer than you think to import and get right)

Create good data once and import many times

Being able to import dummy data into different CRM organisations and different CRM projects is a valuable resource, making it worth the effort to create your dummy data files.

Useful  and reusable data is contacts, accounts, tasks, phone calls, emails, Address, Text

Developers and Data

All CRM systems need data to use it. without data your beautiful CRM solution is like a car without petrol, it won’t do anything. – Hosk

CRM developers don’t like dealing with data requirements for a project (because it’s a task which isn’t coding).

Getting your data in a format which can be imported into a CRM organisation is great because often during CRM projects you will need to setup and move data between lots of different CRM environments e.g.

  • Dev
  • Test
  • Customer Test
  • Pre-Production
  • Production

Characteristics of good CRM project are well structured, organised and all aspects are planned and prepared.  Data preparation and importing between environments should be easy with minimal effort required by the developers.

Avoid data technical debt by ensuring data files are kept up to date and stored in source control, all developers should no the location and the steps to import the data.  Don’t burden one developer with importing the data, it’s not pleasurable for the developer and the project can become dependent on the developer, which can cause problems.

On a chaotic CRM project the data import/export process will be ad hoc, not defined and a confusing and time consuming process, prone to missing chunks of data.

The time spent on creating and updating the data to move between CRM organisations is time well spent.  In the long term it will make a unpopular tasks manageable and will save you time (particular with bugs caused by bad data)

Importing data is simple

Microsoft Dynamics CRM comes with an easy to use Data Import Wizard for import small to medium amounts of data.  Below is a guide how to use the Data import wizard.

CRM 2013 – Importing users using the Data Import Wizard

The data import wizard is a great tool for importing small amounts of data quickly.   The data enrich functionality when used with the advanced find is a great way to bulk edit

  • Select records
  • Update records (could be a non CRM user)
  • Import and update those records

The enrichment process is explained in my blog post Why the advanced find is a CRM Developers best friend.

CRM 2016 may has some new functionality called  the Bulk Data loader, which might offer an alternative for importing data. You can read about the new CRM 2016 features in the blog post – What’s new in CRM 2016 and why you should read the preview guide

Sample data in CRM

Microsoft includes sample data and you can add and remove it by going into

Settings –> Data Management — Sample Data

sample data

Click on the Sample data you can install\uninstall the data.

Step by step instructions can be found here

Adding and Removing Sample Data in Dynamics CRM 2013

before you can import data you need to create some.

Why create realistic dummy data?

Good data in CRM database can help find bugs, bad data can help create bugs – Hosk

Setting up environments and data importing are often unpopular jobs for CRM developers (Developers favourite activity is coding and any other activities get in the way!)

In most projects you will need to create accounts, contacts and maybe some records.  Consider it’s likely you will need to set-up lots of different environments so you want to get on top of your data requirements.

What is developer/test data?

If I use the term bad data I am referring to what I call developer data.  Developer data is data created by developers or testers which doesn’t accurately replicate the data created in production or the data which will exist in the production environment.

You could create lots of data with Test e.g Test1, Test2, Test3, perhaps with a number counter appended.  The problems I have found with poor test data

  • Not testing your customization’s with realistic data, can delay finding bugs until you hit the live system with real data
  • Test data can make understanding and using the system confusing
  • It can give a bad impression to the customer (similar to the broken window theory)
  • https://en.wikipedia.org/wiki/Broken_windows_theory
  • Bad data can cause bugs
  • Good data can find bugs

Realistic data or random data can help find bugs in your system.  Developers will put simple data into a system (usually as fast as they can), this allows bugs to not found.  This is one cause of bugs being uncovered in the live system, when real data is imported into the system you can find errors appearing

  • The code doesn’t like comma’s, hyphens or quotes
  • length or size errors
  • null errors
  • unexpected types of data

Data imported into a CRM organisation stretches, pushes and pulls the system to see if it brakes.

Why do developers create developer data

Developers do not and often don’t need to know how the end users will use a feature.  In many situations developers will be given a technical specification document with a list of required features to implement.  A developer will learn enough about the customization to create it but will lack the detailed knowledge of the business analyst who captured the requirements and wrote the functional specification.

If a developer isn’t clear how the functionality will be used it’s difficult for the developer to put in realistic data, instead developers input data in the correct format (e.g. string, number).

A developers goal when developing is to test the code navigates through the various paths of code, read my blog post to learn more about this – Don’t just test the happy path

  • Happy path (when it works)
  • Alternative path (other routes through the code/customization)
  • Exception path (when things go wrong)

The developers goal is to put in as small amount of data to be able to test the different code/customization paths.

The unrealistic data used by developers and developers use of System Administrator security role highlight why companies should test functionality with testers in a different CRM environment from the developers CRM environment.

Don’t let bugs get into production environments

Benefits of realistic data

The benefits of creating realistic dummy data is the ability to import data into your existing CRM project and future projects.

  • Contacts and Account data are reusable
  • You do the effort once, reap the rewards of your efforts many times over
  • Customer safe data ready to important
  • Save time and effort creating the data for every project
  • Ease of use

I found contact data import data I created for a project using the the website Mockaroo.  I got the files and imported them into my test system, first go without problems.

boom 500 contacts with realistic names, phone numbers and email addresses which imported straight into CRM.

Make sure you import the data and fix all the errors.

Good data should import with out errors.

Tools to create Test data

I have found three websites to create test data, please leave other good sites in the comments.  I looked at free websites to create the data

Database Test Data

A basic website with an easy to use interface.   It’s not as complex as the other two does have a lot of useful functions.  The biggest plus for this site is there is no limit on records created.

  • Auto-increment
  • Username
  • Create words, sentences and paragraphs
  • Email, Phone Number, Address
  • DataTime, Date, Time

link – Database Test Data

Pro’s

  • Easy and quick to use
  • Export file in JSON, CSV, XML
  • No Limit on data exported
  • You can save recipe (columns and data structure)

Con’s

  • 3 export choices
  • Smaller choice of columns

Mockeroo

Url – Mockaroo

Mockaroo is a great site with a lot of functionality to create common columns in data import.  The preview function is handy.  The is a limit of 1000 rows of data unless you would like to sign up for a data plan which starts at $50 dollars a year.

Mockaroo organises the fields you can add into various section, the location field creation functionality has the options below

Mockaroo

The IT has useful fields

Mockaroo 2

Mockaroo 3

Pro’s

  • Easy to use
  • Export file in CSV, JSON, SQL, and Excel formats.
  • You can save recipe (columns and data structure)

Con’s

  • Limit to 1000 rows

GenerateData

http://www.generatedata.com/

Generatedata offers some excellent functionality to create complex fields based on custom lists of data.

The main problem with GenerateData is it limits the export to 100 rows unless you donate.

Below shows an example of contact export I did, you can see fields using custom lists

Prospect Standard – Gold, Silver, Bronze.

Generate Data

Pro’s

  • Easy to use
  • can create complex data
  • lots of export types

Con’s

  • Limit to 100 rows

Summary of tools

Database test data is great for creating a lots of data but is limited to basic contact, account type of data.

GenerateData is great but the limit of 100 rows means you are only likely to use it for data with lots of complex fields.

Mockaroo sits nicely between the two websites above, it has complexity and 1000 rows is decent size.

Don’t forget you can run the tools many times to generate more data.

You can always do some Excel manipulation to create extra fields and use the exported data as the core.