Dedicated to Microsoft Dynamics CRM- tips observations and the occasional insight in to MS CRM
Monday, 13 June 2016
Google Maps in CRM
Not one of mine, but well worth re-blogging.
Take a look at this article by Pauline Magno of SMS
Embed Google Maps in Dynamics CRM
It gives an excellent starting point to building Google map integration with CRM.
In a later blog I'll show you how to extend this concept and use pin drops to identify Contacts or Accounts on the map. The next logical stage will be to build a mechanism to allow the user to select a number of records (Contacts or accounts for example) either by advance find or manually, and then creating a 'drive route' between them.
Monday, 6 June 2016
Security Roles
When you are working with CRM and trying to evaluate if the security roles are compliant with the security policy currently in place, It can be a bit of a pain going from role to role to check each one. An even bigger pain if you need to take periodic snapshots of the roles. Yeah you can write yourself an nice little SSRS style report, or a console app that talks to the web services, or even buy a tool like CRM audit, but there is an easier way !
There is a great little tool called RoleSheetExporter by Johninfant on codeplex that you can download and use to do the job for you.
Basically it is a standalone app that you point at your CRM system. It produces an Excel workbook with a sheet for each security role, see example screen grab. Because it creates an Excel document, you can then apply whatever fonts and formatting you want to make it stand out, e.g. you can use a conditional format on the delete column to highlight any value that is not 'NONE'.
A great, simple to use tool that can save you hours of effort, I highly recommend it.
There is a great little tool called RoleSheetExporter by Johninfant on codeplex that you can download and use to do the job for you.
Basically it is a standalone app that you point at your CRM system. It produces an Excel workbook with a sheet for each security role, see example screen grab. Because it creates an Excel document, you can then apply whatever fonts and formatting you want to make it stand out, e.g. you can use a conditional format on the delete column to highlight any value that is not 'NONE'.
A great, simple to use tool that can save you hours of effort, I highly recommend it.
Monday, 30 May 2016
What use is Visual Hierarchy?
We are all familiar with Organisation charts, and some of us find them useful. Well you can now build them in CRM (since CRM2015). I'm not going to write and tell you how, instead I'll just point you to Sonoma Partners blog 'Dynamics CRM 2015 Hierarchy Visualizations' for that, it's clear and easy to follow (as is all of their stuff).
The answer to this really depends on what you do and how you use CRM. Here are some examples that I've come across:
As a management tool you can leverage it by modifying the information displayed. For example, if you are running a helpdesk you can model your client hierarchy so that the number of help requests is displayed on the Organisation and rolled up to the parent Organisation (you'll need to do a bit of scripting for that). When you view the organization hierarchy you'll see the number of requests coming in from that particular Organisation, if it is above expectations you can simply drill down to the child Organisation until you see where the bulk of the requests are coming from (think national support desk for a large Organisation like Telstra stores, for example) and you can quickly see sibling comparisons before having to switch to the actual helpdesk module.
As a sales tool, you can use it to model the client contacts to build your own Organisation chart allowing you to see where that contact fits in to the overall structure of your client organisation. It can help in identifying the decision makers, the influencers and the decenters.
How can we make use of them?
The answer to this really depends on what you do and how you use CRM. Here are some examples that I've come across:
- A manufacturer mapping outlets to distribution depots
- A software provider mapping modules to a suite
- Mapping customer organisations (Accounts) to show buying centres (think national retail chains buying products locally for each state or region)
- mapping the users to the company org chart
What do I get from it?
It's not a silver bullet, it doesn't solve everything, but for visual oriented people (like me) it can be a very quick and simple way to navigate between entities.As a management tool you can leverage it by modifying the information displayed. For example, if you are running a helpdesk you can model your client hierarchy so that the number of help requests is displayed on the Organisation and rolled up to the parent Organisation (you'll need to do a bit of scripting for that). When you view the organization hierarchy you'll see the number of requests coming in from that particular Organisation, if it is above expectations you can simply drill down to the child Organisation until you see where the bulk of the requests are coming from (think national support desk for a large Organisation like Telstra stores, for example) and you can quickly see sibling comparisons before having to switch to the actual helpdesk module.
As a sales tool, you can use it to model the client contacts to build your own Organisation chart allowing you to see where that contact fits in to the overall structure of your client organisation. It can help in identifying the decision makers, the influencers and the decenters.
what can't it do?
Well, it only works on 1 to many relationships where each end of the relationship is of the same (entity) type. So you can't mix Accounts and Contacts for example. You are also limited by the amount of information you can display on the card (in the hierarchy), so if you want to display 20 fields on each card, this won't work for you. Overall, it's only handy if you have a use for it. There's no point creating a hierarchy because you like it or to make yourself look cool, this feature should be part of your tool kit to solve specific requests, This feature just makes it a whole lot easier.Thursday, 19 May 2016
Creating a Global Option set from a spreadsheet
You may have come across this before. A user wants you to create an option set that can be used across multiple entities, and they give you a spreadsheet with a 1000 rows in it! Don’t despair, you can create a global option set with them in. Just not in a single step. Here’s how you do it:
- Create a field of type option set on your required form
- Add a column to your spreadsheet so that you can easily Identify the new records you are about to create.
- Import the data in the CRM system using your spreadsheet. The Identifier should be the primary key field for your record (i.e. last Name for contacts)
- When mapping the to the option set, set it to create missing options
- Import
- Now you should have all the rows added as new items to your option set
- Locate all the records you just imported and delete them
- Your option set will still be there and still have all the imported values.
- Now use a tool to convert the local option set to a global option set, here are two:
Wednesday, 18 May 2016
Knowing what to charge
When it comes to charging clients for work done, there is (well sometimes at least) a bit of a feeling from the client that you've overcharged them. Giveaway phrases include " What, Really? it only took you 12 minutes!". I personally have fallen foul of this over the years and have given far too much of my time away for free, much to the annoyance of my business partners or bosses. As a very highly qualified and experienced individual, it still takes a certain belief to stand behind your fees.
I recently read a short story that helped me get my head around just how much my time is worth, and it has nothing to do with $ per hour. The story went something like:
A large shipping company had one of it's ships in doc for an engine repair. The cost of keeping it out of the water, as you can imagine is somewhat high. Their mechanics and technicians, although well trained and well qualified, could get the engine to run. They ordered the engine removed so that they could work on it further. Despite their combined knowledge, they still could not get it to run. Finally, they called for help.
Albert, a 70 year veteran mechanic turned up, walked around the engine (remember they had already taken it out of the ship), tapped it gently a few times with his glasses, smiled, walked over to his tool bag, pulled out a hammer, gave the engine an almighty bang, and asked them to try again. It ran, they tested it, ran up, ran it down, stopped it, started it. It worked fine. Albert sent his Invoice in to be paid. The next day he received a phone call from the boss of the shipping company. "$20,000? you were only on site for 10 minutes! Send me an itemized bill". Albert, without getting in to an argument agreed. The next day, the boss received the itemised invoice it read
Hitting engine with hammer $10
Knowing where to hit $19,990
He got paid!
The moral of the story, customers rarely don't pay because of the cost, it's because they don't understand the value. Your job is to help them see the value, that starts with seeing your own value!
I recently read a short story that helped me get my head around just how much my time is worth, and it has nothing to do with $ per hour. The story went something like:
A large shipping company had one of it's ships in doc for an engine repair. The cost of keeping it out of the water, as you can imagine is somewhat high. Their mechanics and technicians, although well trained and well qualified, could get the engine to run. They ordered the engine removed so that they could work on it further. Despite their combined knowledge, they still could not get it to run. Finally, they called for help.
Albert, a 70 year veteran mechanic turned up, walked around the engine (remember they had already taken it out of the ship), tapped it gently a few times with his glasses, smiled, walked over to his tool bag, pulled out a hammer, gave the engine an almighty bang, and asked them to try again. It ran, they tested it, ran up, ran it down, stopped it, started it. It worked fine. Albert sent his Invoice in to be paid. The next day he received a phone call from the boss of the shipping company. "$20,000? you were only on site for 10 minutes! Send me an itemized bill". Albert, without getting in to an argument agreed. The next day, the boss received the itemised invoice it read
Hitting engine with hammer $10
Knowing where to hit $19,990
He got paid!
The moral of the story, customers rarely don't pay because of the cost, it's because they don't understand the value. Your job is to help them see the value, that starts with seeing your own value!
Tuesday, 17 May 2016
Alphanumeric string generator
#CodeSnippet #CSharp #theMazeRunner #CRM
How to create an alphanumeric string for use as a password or an Account Number
On many occasions you may need to create a unique password or identifier string. There are already
methods out there to create random strings of a given or variable length. I have taken the concept and
modified it to suit my own need. Basically I create an array of characters and an array of numbers
(removing any that may be easy to confuse). I then pass a parameter to determine how long the string
will be. Finally I use a combination of the char string and a string of numbers to create my desired
length output string (consisting in this case of 3 letters followed by 3 numbers followed by 3 letters).
This particular code snippet is C# and is used to generate my web service. You can adapt it to
other languages or make it part of your existing C# Library.
[pre class="brush:csharp" title="Alphanumeric string generator"]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace utilLib
{
public class AccNumGen
{
// what's available; I have removed the Letters 'I' and 'O'
public static string possibleChars = "ABCDEFGHJKLMNPQRSTUVWXYZ";
// to help readability I have also removed 0 and 1
public static string possibleNums = "23456789";
// optimized (?) what's available
public static char[] possibleCharsArray = possibleChars.ToCharArray();
public static char[] possibleNumsArray = possibleNums.ToCharArray();
// optimized (precalculated) count
public static int possibleCharsAvailable = possibleChars.Length;
public static int possibleNumsAvailable = possibleNums.Length;
// shared randomization thingy
public static Random random = new Random();
public string getRandomChars(int num)
{
/*
use the random method to select a char and repeat
* for the numbe of times passed in as a parameter
*/
var result = new char[num];
while (num-- > 0)
{
result[num] = possibleCharsArray[random.Next(possibleCharsAvailable)];
}
return new string(result);
}
public string getRandomNums(int num)
{
var result = new char[num];
while (num-- > 0)
{
result[num] = possibleNumsArray[random.Next(possibleNumsAvailable)];
}
return new string(result);
}
public string createAccNum()
{
// build the desired pattern using combination of chars and numbers
// in this case I have 3 Chars then 3 numbers then 3 chars
var AccNum = getRandomChars(3) + getRandomNums(3) + getRandomChars(3);
return AccNum;
}
}
}
[/pre]
The Maze Runner?

Why 'The Maze Runner"? After working exclusively with Dynamics CRM since 2005, I still come across situations, be it, building a new custom form and workflows, building a new JavaScript or updating a C# Web Service library, I still occasionally hit a brick wall and have to back track a while and try a different approach. Always working under pressure to meet a deadline I sometimes feel like I’m running through a maze of possibilities – hence..
The Maze Runner
#TheMazeRunner #DynamicsCRM
Subscribe to:
Comments (Atom)


