Saturday, December 29, 2012

As I have been around to a couple of different companies using CRM, some of which have been implemented before I started working with them and some I have been with from the start there are some things that can be said of the address management in CRM 2011. My general recommendation being to not use it as it is but to do some minor changes to make it work for you.

To start off, I would like to go into some detail of how the address handling is actually done in CRM.

There is, as you probably have seen, a field with the default display name "Address Name". This can be hard for normal users to understand without instructive training. What it should be used for is to specify what the name of the address or that customer is as an internal name for that address, like "Main office in Berlin". Due to the ambiguity of the field, I have seen different ways of putting data into it, one is repeating the company name, where the notion is that it is to be the first row of the address when mailing, in essence being the "name to which the address is going". This field is also a requirement for some logic in CRM, in particular the different address lookups you can find for instance in the Order or Contract. For an address to show up in this lookup it has to have an "Address name". This is also the main selection data in this lookup (by default anyway), why a descriptive name is useful, for instance "Main office in Berlin" and "Postal address".

So, why this requirement on address name, you might wonder? Well, behind the scenes this logic is a bit more complicated. When entering an address into address1 or address2 in an account or contact, it will actually sync this to a replicated instance of the customeraddress entity in the background (created when the account/contact is created, with addressnumber 1 and 2). This is the same entity that you are looking at when looking at the "More addresses" in the contextual navigation menu within account or contact. CRM then maintains sync between the data in the account/contact and the customeraddress. These two customeraddresses are, however, filtered out from the list shown in "More addresses" but you will find them if you check the SDK or the database.

Hence there is need for some good data in the field "Address Names" so that it can be used in the lookups but it is also hard to intuitivly understand what to put into this field with the current caption.

Hence my general recommendaton for this field would be to either change its caption so that it is more instructive or have some automated logic set it by default.

An interesting fact is that the no address names field have been set by in the sample data provided by Microsoft that can be installed from within CRM. So if you want to demo the address lookups, make sure to set some fitting address names first, otherwise the address lookups will be glaringly empty. Let's hope this changes soon.

The second field that is interesting is the drop down with the default display name of "Address Type". It contains several values indicating which type of address this is. I have not seen any built in logic that uses this data. As there is some very significant correlation between this drop-down field and the "address name" I would recommend either linking these with logic or removing the "Address Type" field from the form.

Which fields are used for the specific address is usually country dependent. For instance the field address1_line3 and address1_region is almost never used in Sweden but is more commonly used in countries like Germany or USA. I will not go into which field are to be used for the address due to this reason. My general recommendation being to keep it as simple as possible. For multi-country implementations, try finding the lowest common denominator.

An additional interesting point is the Outlook syncronization of contacts. This syncronization will use the first address and as the address in Outlook for a contact, is syncronzed to the back-end mail server (usually Exchange) and then on to the Windows Phone (or similar inferior device). From the phone, the most usable address is the visiting address, as that is usually what you are looking for when you are checking the contact in you phone. There is also a default mapping of address1 in account to address1 in contact for contacts created from the account. Based on this, I generally recommend defining address1 as the Visiting address for both account and contact as this will harmonize best with the mobile way of using this data.

As for different ways of implementing the logic, I have seen a couple of different ways.

The first version that you will encounter is the standard way of handling addresses based on the logic of the field described above. This will in general confuse the users with the two fields with correlated information without logic to tie them together, the other is what I mentioned above, that the ambiguity of the caption "Address name" makes things confusion. The fact that the address type field also exists on both addresses, especially on address one, means that contacts created from an account will with the default mapping have different address types showing up in Outlook and in the mobile devices. And I for one, do not believe that the invoice address is all that interesting to have in the mobile device. I would not recommend using it without some customizations.

There is also a problem with using the "Address Type" field as this will mean that there is no simple way of knowing which address is the postal address, the address type always has to be checked. This really complicates things when doing integrations to other systems as well, as they usually don't work this way. It also makes analysis based on this data more complex, and in particular makes it too complex for normal users trying to do some ad-hoc reporting with charts, advanced find and excel.

Another way of using addresses that I have seen is to change the caption of address1_line1 to be "Postal Address" and then address1_line2 to be "Visiting Address". Some of the people I have discussed this with like it because it makes life easier for them (they don't have to enter two addresses). This means that the other fields will be shared between the two addresses like the field "address1_city". They also argue that for most customers these are the same. However, for group of customers, usually larger, that have different visiting and postal addresses also on a city level, this makes things problematic as it is very useful to have the City also on the visiting address, for instance when navigating to the customer with a GPS, and you don't want to be stuck at a PO-box.

This way of sharing data for different addresses with an address in CRM will also break the logic described above with the address lookups in for instance Order and Contract. The address name has to be set to "Postal Address" and there will be no way of for instance setting the delivery address of an order to the "Visiting Address". As for the argument of it being easier, that can be solved with a couple of lines of javascript code that default the data from address1 to address2 if it is empty.

The way I like to set the address management up in CRM starts of by defining the two addresses to usually Visting address for address1 and Postal address for address2 for both account and contact.

I trim the address fields and remove the address type field.

Next I create a javascript that sets the "Address name" fields to "Visiting Address" and "Postal Address" and then disables and force submits the fields.

In some cases I also create an additional script that will copy the address from address1 to address2 if the latter is empty.

I try to make sure that the address fields in Account, Contact, Customer Address, Quote, Order, Invoice, Contract and related entities are similar.

Monday, November 12, 2012

A few days ago, I was part of the key note at the Microsoft Partner Day in Sweden. Together with Malin Dandenell at Learning Point, my colleague Rickard Norström and Atefeh Sebdani at Microsoft we demoed a realistic business scenario with all the new great technology (and some more common). The scenario was that I was a salesperson and got the oppotunity to get a business if I managed to get the proposal to the customer within 5 hours. The only problem was that I was out of office my self, only with a tablet, the tech-presale (Rickard) was at the Gran Canaria, without his computer on a vacation and my boss (Malin) was home taking care of sick children.

We showed that this was totally doable with the use of modern tablets that are more than just large Angry-Birds-play-machines, but actually very slim and fully fletched windows computers than with the use of a blue-tooth keyboad and mouse are turned into a normal computer. I used a Samsung Windows 8 Pro and the only thing holding me back is that I really would want a Surface Pro but the release plan for that in Sweden has not been set yet (it can be ordered from France or the UK though).

Rickard used a Win2Go and and old Vista computer to quickl get his Windows 8 machine with built in Direct Access and all the modern applicatons he needed to quickly get up and running to be able to help me with the quote. The amazing thing was that the Win2Go actually booted quicker than Vista was to shut down.

We also used Lync for Video conferencing, word co-authoring and the Lync feature of letting someone control a program in your computer. Finally I presented the quote to the customer using Word Present Online.

We actually did use CRM aswell :), I started off with doing the meeting in tablet mode using the great Resco Mobile CRM client. I got a lot of great feedback from that, seems that many people don't know about it. I had originally planned to use Dynamics CRM a bit more than that but the demo was really tight at <20 big="big" darlings="darlings" favor="favor" for="for" have="have" in="in" kill="kill" minutes="minutes" nbsp="nbsp" p="p" picture.="picture." so="so" the="the" to="to" you="you" your="your">
My overall impression is that the new stack of products from Microsoft are not only cool but can give you a real edge on the competition by shortingen the OODA-loop. So try not to be left behind!

Sunday, November 11, 2012

As many of you know Microsoft Dynamics CRM 2011 has a built in integration with SharePoint. As a former SharePoint consultant I have reviewed it to see how it looks, not only from a CRM perspective but also from a SharePoint perspective and there are some major issues from this perspective that one needs to take into consideration. For those of you who attended my presentaton at SharePoint Exchange Forum 2012 22-23 of october this year this is more or less what I presented.

When this is done, you simply go into Settings-Document Management and click on the "Settings for Document Management"-button. This will start a wizard that will let you configure the integration.

It will default which entities are to be used for the integration and you are also asked for the base site URL. This site will contain all CRM documents
unless you do some manual configuring (as described below) so I generally recommend that you create an empty site. It will also create one document library per entity that you have selected in this site.

The result will look something like the following:

Document libraries created in SharePoint (left) will match the entities selected in the document management settings in CRM (right)

For now, let's refrain from the ranting and just note that this is how it will look.

If further entities requrie document management, these can be added later by re-running the wizard.

After you have selected which entities you would like to use document management for, the wizad will show you the following query:

Folder Structure selection

This query is very important to the structure of documents in SharePoint. If you chose to use a folder structure based on an account or contact (my recommendation is generally to use Account here if this is your primary customer entity and only use contact for strict B2C).

If you choose the structure based on account, a folder structure will be created in the SharePoint Document Library as follows:
﻿﻿﻿﻿

Folder structure if based on account for an account with sub-opportunities and quotes

Do note the folders called Opportunity and Quote that have been created. Rant below.﻿

If, instead the structure is selected that is not based on an entity, a flatter structure will be created.
﻿﻿﻿

Folder structure created if not based on an entity

The folder structure is a lot flatter, but note the difficulty of trying to identify the quote folders for the opportunity "CRM Online for A Store". As no hierarchy is used, the only way of distinguisishing sub-objects is to use descriptive names as I have done with the opportunities in this case to indicated that all your bases are belong to us.

To be total just, no object specific document folders are actually created in this step. This is something that is done the first time you open the documents tab for the object (ex. the account "A Store").

So to give a quick review, the following can be concluded:
- Hierarchical structure is to be selected if documents are to be navigated to with SharePoint as the flat structure makes it very hard to understand which folder belongs to which place.
- When you reparent something in CRM, for instance if the opportunity was created towards the wrong company in a corporate hierachy and you reparent the opportunity. This will not trigger any changes in SharePoint which is ok if the flat structure is used but not so good if the hierarchical structure is used as the opportunity documents will be stored under the wrong account.
- The flat structure gives a clearer division of document types. For instance all Quote documents will be stored in a separate document library and all documents related directly to accounts in another.
- With the hierarchical structure, most documents will be stored in the account document library which for larger installations would incurr large amounts of documents. This will make it more diffucult to use.

You can also connect your CRM objects manually to a specific folder/document library, this enables you to create a more logical structure in SharePoin, like one site per customer, and then manually connect each of these site's document libraries to the corresponding account in CRM. The problem with this is that you have to follow the following steps to do it (example for a customer setup)

Create the account in CRM

Create the customer site in SharePoint

Copy the right part of the URL from the document library in SharePoint.

Add a new document connecion in CRM and past the document library from (3) into the field.

This will not work in normal CRM implementations as the tasks are too complicated for normal users, and especially salespeople to do.

Another perspective that is important to remember that the security (privilages) for the document libraries are not replicated from CRM to SharePoint. SharePoint has a more traditional top-to-bottom security architecture and the security architecture of CRM is a lot more complicated and it is very complicated to try to replicate the privilages for a specific object in CRM to the corresponding folder in SharePoint. This is due to the fact that the CRM security architeture is dependent on both owner (user or team) and sharing that have been made. For instance adding or removing a person from a team would requrie you to check all ownerships and sharings for that team in order to mimic the security settings. The recommended way of handling this is to allow all people in a group to have access to all documents in SharePoint and then remove access (inheritance) for the folders that require special permissions. It requires special handling and would be very cumbersome for large organizations.

My final conclusions are hence that the use of SharePoint as a document storage tool for CRM greatly enhances the document management funtionality of Dynamics CRM but it has not been designed to enable logical use of the documents from a SharePoint perspective. The security aspect is also somethnig that will reduce the way it can be used. I would also recommend that the documents are to be accessed mainly from CRM and only in very special cases from SharePoint.

I am not aware of any third party addon that increases this functionality, if you do, please leave a comment!

Thursday, November 01, 2012

Getting users, especially salespeople, to really use the CRM system is one of the most important parts of implementing a CRM system for an organization. There are numerous examples of CRM systems with lots of great features that just have not been used by sales people which causes the data in the CRM system to be incomplete and hence not very usable.

I am a big fan of computer games, currently Battlefield 3, and one thing many computer games excel in are that they are really good at user adoption, it is really the basis of it all. Without it, they just wouldn't sell. There are ongoing trends in the business to "gameify" business applications to make them more fun to use and hence makes user adoption a lot better since you are makeing users really want to use the CRM-system.

One of my fellow MVP:s, Pablo Peralta, has been part of bringing forth a great new product, called CRM Gamified which brings some of the principles used in computer gaming to Microsoft Dynamics CRM. Let your sales people compete in getting point for different task in the CRM system and have dashboards showing the leaderboard. So, do have a long a deep look at this addon. It could litteraly change the way you do CRM.

Wednesday, October 24, 2012

As I mentioned earlier, we had a CRM Techie AW at an hotel in Stockholm. It is now time again, so if you are a programmer, application consultant, architect or in some other manner work with Dynamics CRM from a technical perspective, do attend.

Last time we had some very interesting discussions regarding managed and unmanaged solutions. This time we are going to discuss supported and unsupported customizations and solutions. Which is a subject that I feel is very interersting and that there are many aspects of it that can be discussed. I previously this year wrote a posting on the subject, which you can find here: http://gustafwesterlund.blogspot.se/2012/06/unsupported-customizations.html

It will be located at the same hotel as last time, in other words Hotel Anglais next to Stureplan in Central Stockholm.

Monday, October 22, 2012

I really love CRM but as with all things you love, there are also areas where there are areas of improvement. One of these areas concerning Dynamics CRM is the functionality to create quotes by sending CRM data to a word document by using the mail merge functionality of word. Until Microsoft have fixed this, there are a few good options.

The basic functionality really consists of two parts. The first part is being able to create a document without being a programmer. The built in functionality of Dynamics CRM requires you to open the document press Alt-F9 to see the "backend" of the document and then be really savvy with Word template programming to make it work for you. The basic problem with it is handling subtables, like quote rows in a quote. As the data being sent from CRM to word is a large table with one row for each of the detail rows. The problems with this are:
- You cannot have two sub-tables
- As the word for-each functionality works in such a way that it loops through all the rows and when the cursor points to the row after the last, it will leave the for-each-loop. The header data is copies as fields to all rows. This means that you cannot, using the normal logic of a template, have a template that first shows all quote rows and then the total after the table, as the latter comes from the quote header. Microsoft have solved this by some rather intricate programming of the template that makes it almost unmodifiable for normal user and programmers not used to advanced word template programming.

I have tried one product and know of another that I have not had the chance to try yet, that try to rectify this.

The first one is DocuementCorePack from MSCRM-Addons in Austria. It has a very CRM-like addon to Word where you easily can insert the fields you like from the entities and related entities. It also has special logic for handling sub-tables and to save the document back to CRM or SharePoint. The installation program is also exemplary! It is very easy to install. They also have some additional tools that jack into to this program like the AutoMerge. The company behind it is a very stable company that has been making addons to Dynamics CRM since version 1 and they have even helped me make special adaptations to the program when I have had customers requesting this.

The second one is QuickBix Document Suite from the Swedish company QuickBix. I havn't had the chance to try it yet but they have shown it to me and it has some very good features. They also have some impressive customer references. I have tried once to install it which I was sad to say was unsuccessful. This might however have been fixed or I might just have been unlucky. The people behind the company are very friendly and are always eager to help.

The prices vary for these products and I suggest going to their web sites or send them an email to find out the details.

In conclusion I never demo the built in functionality for generating quotes to word in CRM and I really hope Microsoft will fix this as it is rather fundamental to sales force automation (SFA). Until that time, and maybe also after, there are some very good alternatives at reasonable prices so do check them out!

Wednesday, October 17, 2012

Today I received my two copies of the CRM Field Guide! A real monster book written by no less than 19 of my fellow CRM MVP:s. It is truly a great book with indepth chapters regarding many of the areas you touch when working as a consultant with Dynamics CRM. It is also very personal with lot of tips and tricks by some people who really know what they are talking about. If you havn't already gotten a copy, hardcopy or e-book, head over to their site and buy one right now. http://crmfieldguide.com/. The e-book is a real help in the field, when the brick-sized hardcopy might be a bit cumbersome, but nothing meets the feel of a real book. (yes, I was once a publishing editor and have a real fetish for real books :)

Friday, September 28, 2012

Creating a CRM community in Sweden has long been a goal of mine why I am very happy to report that we the first community meeting finally has taken place. In hotel Anglais next to Stureplan in Stockholm, we had a CRM Techie After Work.

I was, together with Peter Björkmarker and Allan Varcoe responsible for the content of this first meeting. Peter and Allan took opposing sides in the use of managed solutions in customer projects (not ISV-solutions) and after the inital walkthrough there was a general discussion on the subject which I had the privilage of moderating. Microsoft backed up the event by the presence of Fredrik Wolbe.

I found the discussions very interesting and most of all liked the open attitude of sharing the experience and knowledge that we all have.

We also had some discussions on what to discuss next time we meet, and Fredrik Wolbe mentioned that he might get some product specialists to show us the new HTML5 GUI that most of us have only seen in screen shots. This was liked by most so Fredrik promised to try to make it happen.

The event was attended by about 20 people from different companies. Let's hope there is even more people attending next time! I will be sure to post some info as soon as it has been decided.

Tuesday, September 25, 2012

There are many bloggers in the CRM community and in just the latest few months, several new CRM blogs have been started here in Sweden. I think this is great as experience sharing will make us all wealthier in knowledge and increase our edge on the competition from other inferior CRM-systems (none mentioned, especially not SF).

However, there are also several shady companies around that instead of creating their own content, blatently steal content from others. Probably because they do not have the competence themselves to write anything original. I think this is sad and it makes me angry as many of the bloggers around share their knowledge in their free time without any profit interest. This kind of behavior does risk some of these people to stop sharing which would be bad for us all, but great for the competition.

Some of these content theives, are not only lazy, they are also rather dim why a fellow blogger Jukka Niiranen, who was victim of one of these leeches, decided to play them a little prank. Do read about it and laugh!

By the way, I write all my content my self, and if I am copy-pasting anything I always try to be very strict with the original source. If you have any comments on this, or feel that I have not given you enough credit for your work, please contact me.

Thursday, September 13, 2012

Today I was helping a customer out that have experienced rather bad performance of the CRM system.

They described the performance as being bad in Europe (the server being hosted in Sweden), it was quite obvious that the problems do not originate from network latency, which can be an issue if performacne problems are experienced from the other side of the world (ex. from New Zealand with servers in Europe).

One of the most common problems with performance in CRM systems is bad SQL performance. In large installations, this is usually due to bad SAN (Storage Area Network) configurations from a SQL perspective. As CRM is meta-data driven, it is quite database heavy since it cannot be fully database optimized like custom made ASP.NET applications. Hence good database performance is vital to a rapid CRM.

A very good tool to use for benchmarking the disk performance on a server is SQLIO which can be downloaded for free at Microsofts site.

The two parameters to look for are IO and throughput. Do bare in mind that many SAN:s have caching which can make results strange, so it can be a good idea to try to increase the test file size. Also make sure to put the file on the drive which you wish to test.

SSD performance in this case blows the roof off the RAID and the loss of performance is rather substantial inside the VPC, but the read performance is still 5-7 times that of the RAID.

An interesting aspect of this is the GW LAB, our development machine run on RAID, it has almost 3 to 4 times the IO and throughput in writes compared to reads, which is not the fact for the SSD-based disks. This is probably due to some write caching functionality of the RAID.

My recommendation based on this is that if you need high performance on you CRM, use SSD:s in your setup. Do use server-grade SSD:s and used at least RAID:s with 2 disks redundancy, but it will give your CRM a rather large performance boost compared to normal grade SAN.

Saturday, September 01, 2012

There seems to be a nice trend of lot of new CRM bloggers here in Sweden. I think this is great, mercantilism always has to give way to free trade! Even more so in the information era.

Alan Varcoe, a Dynamics CRM veteran and architect, who some of you might have noticed has left some comments here from time to time, has now started his own blog. He has written an interesting post managed and unmanaged solutions. Do check it out!

Let's hope this discussion results in some new features from Microsoft in this area, as that would be greatly appreciated!

The recent
updates from november 2011 added some social functionality, namely the wall
functionality in CRM and also the ability to leverage hash-tags to some extent.

Microsoft’s
focus is, as they usually do, on productivity in the sense that you should
spend more time closing business and less in computer systems, and this has
also been the guiding star when developing these new CRM features.

He also
talked about the new update coming in the end of the year with functionality to
enrich your data based on social intelligence. Brought in technology from
Inside View (http://www.insideview.com/)
to bring in data from social systems and
enrich the CRM data. Inside Views offer is to assemble social data from over 25 000
news sources and social media directly to the CRM system to give salespeople an
edge over competitors by knowing more about the customer.

They are
also adding integrations with LinkedIn which will add functionalities that
allow users to see the relationships that exists to contacts in the system. Ex A
salesperson can see that another salesperson has a connection to a potential
customer.

Also social
customer care, grab comment or similar in social media like twitter and make
cases of it.

Looking at
social from the perspective of three different categories

-Managed
– internal social channels like for instance discussions in SharePoint

-Semi-managed
– external social channels with a distinct precense, like SharePoint sites hosted
by a customer

-Independent
channels like Facebook or Twitter where you mainly listen to what is going on.

Important
part of this is to be able to know what is happening so that the strategy of
the company’s marketing etc. can be adapted to this.

I look forward to seeing social media integrations in
CRM, some of it has been available in Outlook for some time now using the
Outlook social connector so from my perspective I have expected this for some
time.

How CRM
will be using Inside View is also interesting. I do now know if Microsoft have
bought full rights to their software to enable it in Dynamics CRM without extra
licensing or if it will be made available as some add-on license. Another
interesting aspect of this is how extensible it will be or if it will be a more
or less static functionality. I am personally hoping it will be very extensible
since I would expect many customers to appreciate this functionality but probably
ask for adaptions to it.

The integration
of the social media data, from Twitter and Facebook to CRM will also be
interesting. Since the amount of data available in these sites is no less than
vast and stored in databases that are not SQL-based there might be interesting
performance issues that might arise if the filtering of this functionality is
not set correctly. I also hope that this functionality will be extensible as I
would expect many customers to look for extensions or changes to this. Being a
bit cynical, I don’t expect there will be though.

The three
different categorizations of social channels seem logical, however, he didn’t
really mention anything on how they were to manage the first two in CRM, if at
all. Perhaps that would signal that there would be some adaptable functionality
where you can plug-in any social adapter of your choice where you could also
develop your own. But that is pure speculation, so we will have to see.

In general
I welcome all of these new functions as they do bring really good value to the
customers and let us just hope that our competitors are a few steps behind.

Friday, July 06, 2012

My colleague Rickard Norström, who is a very skilled Dynamics CRM developer and consultant has finally started his own blog. Make sure you add it as he has many interesting perspectives on Dynamics CRM and consultancy around it.

Rickard Norström is my closest colleague and is involved with some of the more major installations of Dynamics CRM as well as iScala CRM implementations. He has worked with Dynamics CRM for about 2 years now in a variety of versions and has also held several courses, both for end uses, powerusers and other CRM consultants. He is very skilled in development, installations and configurations of Dynamics CRM, for instance he is currenlty working with an upgrade of a webfarm based CRM system that has some interesting issues. Make sure not to miss what he is writing!

Sunday, July 01, 2012

Today I was awarded the MVP status for Dynamics CRM! I am very grateful for this award and it is thanks to all of you who read my blog and value what I write that this was at all possible. So first of all, I want to give you all a this recognition.

I also hope this will give me further contacts and insights into what is going on within Microsoft despite the fact that some facts received in the MVP program are under strict NDA.

Monday, June 25, 2012

Migrations are often complicated and not very sexy, all the work you put into it, configuration, scripts and code will be more or less useless after the migration has been done. However, choosing the right strategy is essential for a good CRM implementation. I will go through some of the strategies that are common and discuss some of the advantages and disadvantages.

Greenfield
Greenfield migrations are not really migrations, but rather the lack of migration. This means that the system will be set up without any migrated data, no accounts, no contacts etc. The idea is then that all the users will create data in the new system as the feel the need for it.

This is often used for start-ups when there is no or very little data. It can also be used when the data quality is very bad and trying to filter out the "good" data is just to complicated. Normal problems can be large numbers of duplicates, errors in the data itself, like "." and "," being inserted instead of real data just to make the forms savable.

Advantages of Greenfield migrations is that the system will be up and running in no time. Migrations might otherwise take considerable amounts of time. This also mean that the cost of Greenfield migrations are very low. Do note however, that there is need for some general system configuration, like creating users, setting up queues.

The disadvantage is that the users do not feel that the new system is helping them out and they have to reinsert a lot of data which can create considerable amounts of annoyance with the new system. This can in the long term increase the bad-will towards the system, lowering usage which can jeopardize the entire CRM investment.

Standard importThe standard import functionality of Dynamics CRM is reasonably powerful and can usually be used for importing simpler data. It is based on data being stored in csv-files or excel as xml-files. The first of these being a bit problematic as it is rather old and dependant on the regional setting. For instance, the value separator in Sweden is semicolon ";" but in USA comma ",". It is also common that the csv-files contain data that risk messing up the file syntax, breaking the imports. In general the excel-as-xml format is to be preferred as it also contains field names and proper matching.

This functionality has greatly been enhanced in CRM 2011 compared to CRM 4. For instance, it now support uploading of zip-files containing xml-data files with relations between the files. It can even handle multiple relations that otherwise would take three import runs, all in one go. For instance if you have data with accounts containing primary contact and all contacts also contain parent customer.

The limitations of standard import is that it cannot really handle large amounts of data as the maximum upload size is 8 MB (can be changed in an onpremise installation). Complicated data structures are also hard to handle and it is rather time consuming to run it as there is no scripting capabilities. The lack of scripting also makes the ordering of the different imports in a zip more or less impossible. There is also no support for logic like "If the contacts email adress exists, update the data of that contact, otherwise create a new contact" which is often very useful when importing data from multiple sources. It is also hard to do testruns of the migration without a lot of manual steps involved. There is some error handling but it is very rudimentary and cannot handle more complex logic.

The advantages of standard import is mainly that it requires no extra software and it is relativly easy as the options are limited.

Third party products
One of the more powerful options when doing migrations, is using third party products, like Scribe, Import Manager. These include lots of options that the standard import doesn't like:

ODBC/OLE DB connections to a data source

Logic to handle update or create

Scripting - custom logic to handle some of the data conversions

Run as service - ability to be run in the background as a service

Reuse for integrations - these tools can also be used for integrations why the effort invested can at least partly be reused.

Support for custom addons

More powerful - has support for multi threading and large data sources

Easier to do test migrations as all steps can be set up in a run-script, less manual labour.

Can handle more complex data

Better error handling

Not all products support all of these features.

The main drawbacks are the licensing fees required. Do note that some of these companies have special migration licenses which are not the same as the full license used for integrations. These products are also a bit more complicated due to the larger sets of options available. Hence it also takes some time to learn the product why my recommendation is to choose one and stick with it.

Custom migration program
The most advanced for of migrations need to be done by using custom code. There are really very few limitations to what can be done when writing custom programs that migrated data, it is more up to the skills of the developer and the time available.

Some of the advantages:

Limitations only in skills and available time and money

Easy to do test runs

Complicated error handling logic can be created

The main disadvantages are:

Demands developers

Time consuming - from around 100 hours to several thousand hours

General recommendations
Migrations are often complex and it is not until you have worked with the data a bit that you start to get a feel for how problematic it is going to be. Hence I usually never give fixed prices on migrations as it would either be inflated or put me at risk. It is also often the case that customers do not realize the complexity of migrations, especially smaller customers it is therefor essential to involve them a lot in the work.

De-scoping the migration is also very important. Usually not all data is required, especially if the old system can be maintained with read-only access. Try to de-scope in width (which entities are really required) and in depth (how old data is required).

Data quality can also be a problem so try to evaluate this early on. Examples are names being stored both as "First name Last name" and "Last name, First name" or fill-in data like ".", "," or "-" that has been entered into required fields to make the forms savable.

Large migrations might required delta migrations, when migrations are run in two steps, first the major migration, then after it has been completed, a smaller to migrate the data that was changed during the main migration. This will put additional demands on migration scripts and/or code so try to avoid it if possible.

Sometimes the new system required data that doesn't exist and hence has to be created. I usually refer to this as migration of non-existent data. It is easy to forget if your perspective is to map the data from the old system without looking at which data is required in the new.

Migrations between two systems that with very different data models is theoretically complicated. There might, for instance exist data in several places that need to fit into one. Data might need to be restructured in complex ways. In depth knowledge of source and target data model is essential and the proper skills required to understand complex data modelling is also a strong recommendation.

I hope I have shed some light on this subject which can be discussed at length.

Thursday, June 21, 2012

Unsupported customizations are certain customizations that fall outside of what is supported by Microsoft when developing and customizing for Dynamics CRM. Several aspects of this subject can be discussed in depth and I will try to touch base on some of them.

When creating Microsoft Dynamics CRM, Microsoft realized something very important, the system will need to be customized by partners to fully fit the needs of the customers. However, customizations need to be upgradable and support update rollups and hotfixes. Previously, all upgrades would require rather large efforts in re-writing lot of the code that was custom built for the customer. However, the definition of supported and unsupported customizations and the promise from Microsoft that all supported customizations will be upgradable and updatable at least to the next version, is something that is very good and will ensure a better return of investment of the custom development made for customer and also improve partner-customer relations since paying for upgrades of already made customizations seldom improves the partner-customer relationship.

We have worked with many systems where other consultants and developers have created solutions and here are some of the more common unsupported customizations, why they will cause problems and alterntive solutions:

HTML DOM addressing and modifications
Addressing HTML DOM components directly using document.getElementById and replacing parts of the normal HTML DOM with custom components. For instance, addressing an isv-button in CRM 4.0 and disabling or removing it with javascript. Another example is replacing lookups with dropdows, for instance letting the user select contact for an opportunity.

This is very common i CRM 4.0 but is also quite common in CRM 2011. The problem with this unsupported customization is that when upgrading the system the names of the elements in the HTML DOM will probably change. This is obvious in the case of isv button addressing in CRM 4.0 since the ribbon HTML DOM element names are different. The code will hence break after an upgrade.

Developers doing these kinds of unsupported customizations are usually web developers that are used to being able to modify webpages with javascripts anyway they like and they are not familiar with the SDK and do not forsee the consequences of these unsupported customizations.

Alternative solutions are to strictly use the object model described in the SDK and only use the documented methods. Note that the SDK in CRM 2011 has been improved a lot in this perspective. It is also possible to enable and disable buttons in the ribbon with ribbon customizations. It is also possible to use small iframes with aspx-pages behind (or virtual pages created with javascript) that show custom logic and work with the CRM form using cross-frame scripting. Do note that the hosting application and the cross-framed page need to be in the same security zone in IE for it to allow this. Preferably place them on the same server.

Database modifications
Modifications to the CRM database are also some of the more common unsupported customizations that I have experienced. It can be anything from custom views to new stored procedures or even modifications to the existing procedures. Do note that creating indexes in the database is supported but not upgradable.

Developers making these kinds of customizations usually do not realize the effects that they have and might be used to and very familiar with writing T-SQL. Modifications to the existing tables and views are very hazardous since CRM is a metadata driven application meaning that the database contains metainformation on how the database looks. If the metainformation gets out of sync with the real database, you will have a very nasty problem on your hands.

Additions to the database, without any modifications, will usually work with updates to the system. However, when upgrading or redeploying the system these usually cause quite a lot of problems. It is also a general recommendation to try to keep all business logic in the same layer of the application and to not mix them between the database and higher layers (like plugins). This can sometimes not be avoided however.

So, if you do need to create some custom views or similar, create a database next to the CRM database with hosts these and use cross database addressing to work with the data.

Modifications to CRM files or additions to the CRM installation directory
As the aspx-files of CRM can be found in the CRMweb directory (or inetpub for port 80 installation) it can be tempting to modify these. In CRM 4.0, when there was no support for javascript includes, modification to the file global.js was also quite common. I have also seen systems where entire IIS virtual directories have been set up in the assembly directory of CRM. This is also unsupported.

The reason these customizations should be avoided is that any update rollup that is installed might overwrite these files and you customization might be lost. With upgrades the customization will most certainly be lost or stop working.

There are no good alternatives to these kind of modifications. Try working with Iframed custom pages using cross-frame scripting if possible. Modifications to the global.js are very hazardous since it is not very uncommon for it to be updated in normal update rollups, making any customizations to it rather hard to maintain. This is not necessary in CRM 2011 as the web resource-functionality allows for better reuse of javascript code.

Unsupported customizations are necessary anyway
If the requirement still demands unsupported customizations, and there is no good way around it, I recommned having a discussion with the customer on the effects of creating unsupported customizations in regards to upgrades and increased maintainance costs. If the still feel it is required, I recommend you getting their formal signature on a document describing it as an unsupported customzation and that the customer understands that the function might not be upgradable and that upgradecosts will be fully charged to the customer. It might feel a bit formal, but trust me, when the customer wants to upgrade, you will be happy you have the document.

Another important aspect that you need to remember when creating unsupported customizations, is that you need to take this fact into account. For instance, if addressing an HTML DOM element, make sure to handle the fact that it might not exist, and have some resonable fallback from this.

It is also essential to document each unsupported customization with extra care. I recommend a special document for this. It should include some of the following topics:

Description of requirement

Technical desciption of the solution

Why it has to be made with unsupported customizations - This is important as newer versions of CRM might enable you to rewrite this in a supported manner.

Tuesday, June 05, 2012

My colleague Rickard and I are working with one of our customers who have gotten managed to get themselves into a rather big mess with huge numbers of attributes on the account entity that should not really be there. If any of you ever wondered what the limitation for number of attributes in Dynamics CRM is, it is around 700 and it is not recommended to use since the system becomes very hard to work with. Proper data modelling with experienced architects is usually a good idea that pays off tenfold later, so that you do not get your self into this situation.

However, the production system at hand has several hundred attributes that were erroneous in a managed solution, and something had to be done.

The first thing you might think of trying is just to remove the attributes from the development environment, packaging a new version of the managed solution and overwriting the production environments managed solution with this new reduced solution. This will, however, not work, as solutions cannot remove attributes (they contain the state of the CRM-system, not the transactions).

After a few more ideas had been tried, we finally registered a support case with Microsoft where a very helpful technician assisted us with a solution to this, based on this very good blog posting by Gonzalo Ruiz. The latest news on this is that it seems to be working, although neither Rickard nor myself is doing the actual work.

This has also caused us to have a very in-depth discussion on if managed solutions are suitable for normal project production systems or not. I had a discussion with former Microsoft employee Peter Björkmarker who is a very skilled architect, and we came to the conclusion that managed solutions are really best suited for ISV-packages, and not so much for normal customer projects where unmanaged solution are easier to work with. This is, however, something I would be more than happy to discuss, so if you have any opinion on the subject, please leave a comment!

Wednesday, May 16, 2012

When creating Silverlight applications the normal method of retrieving the url for the CRM server that will be used to connect to the REST endpoint is usually based on the CRM url that is stored in the CRM config database and retrieved based on Xrm.Page.context.getServerUrl().

There can often be problems with using this address, for instance in development environments or similar, as the address returned might not be the address used in Internet Explorer. When this happens, Internet Explorer will block the connection to the REST endpoint since it does not connect to the same URL as the webpage that hosts the Silverlight application.

During the latest course I held for some CRM consultants at Evry, we discussed this and one of the attendees, Klas Adolfsson at Evry, was very quick and wrote an alternative to the getServerUrl()-method that bases the url on the hosting browser url instead of the url context variable from CRM.

Thursday, April 19, 2012

Today I am working with a customer who has used other CRM consultants previously. It is always interesting. In this case the QA/testing environment was not up to date and wasn't acutally working at all. All changes had been made directly in production, not really my cup of coffe, as I like things to be a bit more controlled. Just for the record, it is a CRM 4 system, but the I do believe the same issue applies to CRM 2011 aswell.

So, I wanted to get the QA-environement up to date with the production environment and started by exporting all customizations from production and attempted to import them into the QA-environment. (Backing up that enviroments customizatons first of course). Well, that didn't actually work, and I didn't get a very good error message, just some non-descript error. When looking in the event viewer I got a ASP.NET error saying that "Post size exceeded allowed limits." which of course go me thinking about the size of the customization file. Checking it, I found that it was almost 9 MB, which is above the set 8 MB ceiling. After some pondering about which parts of the customizations might be the issue, I found that the Templates part was about 7.9 MB. So, my suggestion is to keep this in mind especially when exporting customizations/solutions from production systems that Templates can be very large and might brake the maximum transfer size of 8 MB. This maximum size can be changed, but that is another issue.

Wednesday, April 04, 2012

There is currently rather a lot of media in Sweden about a computer system hosted by a larger Software Integrator outsourced by the Swedish IRS. This system was hacked and about 9000 client accounts were compromised. The discussion in the media is if this a government agency really can delegate this kind of responsibility to a third party or if there will always be some fundamental responsiblity for maintaining the security at the government agency? The security experts and even the Swedish Secretary of IT, Anna-Karin Hatt, indicated that this kind of responsibility could not be delegated.

This question is very relevant in the case of CRM systems in general and Microsoft Dynamics CRM in particular. It would then seem more or less impossible from an government agency CIO perspective to use any kind of cloud based service for line of business systems like CRM/xRM as this would imply that it is impossible to fully maintain the control required over the information in the system. This is no problem for us working with Dynamics CRM as it can be deployed on-premise, but bad news for anyone looking to work with SalesForce.com or any other pure cloud based service as they cannot be used in such conditions.

Custom workflow activities are one of my favorite extension points of CRM. The power workflows gives the customers are great as they can easily change the content of outgoing emails, todos etc. With the ability of custom workflows I can connect the workflow engine to anything in the world, from credit rating checks, integrations to other systems or just adding a bit more complex logic than what the standard activites include.

One of the major drawbacks of the current version of CRM-Online (as of march 2012) in comparisson to On-premise is from my perspective that custom workflow activies cannot be deployed in CRM-Online. I asked developer evangelist at Microsoft Sweden, André Henriksson about this and his comment was that it was probably due to the fact that the workflow foundation team didn't support sandboxing of custom workflow activities. At SharePoint Exchange Forum I had the oppotunity to discuss this with SharePoint MVP Eric Shupps and he mentioned that in SharePoint there was full support for custom workflows. This made me a bit puzzled since this implied that the SharePoint team had managed to create a workaround for the lack of isolation for custom workflow activities that the CRM team hadn't.

However, in the upcoming R8, release for Dynamics CRM 2011, Microsoft have annonced (http://crmpublish.blob.core.windows.net/docs/ReleasePreviewGuide.pdf) that there will be support for custom workflow activities in CRM Online. This is great news, but as the functionality will be based on sandboxing there might still be limitations to what can be done within the sandbox, for instance on which external connections are allowed. This remains to be seen, but the news of support custom workflow activities in CRM Online is still something I have waited for a long time!

Thursday, March 01, 2012

I had a discussion today with a potential customer regarding a part of the functionality of advanced find that I thought I might share as it is not so obvious.

In Dynamics CRM 4, it is not possible, with advanced find to use the "related" entities functionality of advanced find to search for objects that are on the other side of the N:N relationship.

However, in CRM 2011 this is possible. For instance, if a new relationship N:N is created between account and contact, it is possible to use advanced find to find all contacts that are connected to a certain company.

It is not, however, possible to show column data from the related entities through an N:N relationship, it is only possible to pick columns through N:1 relationships (in that direction).

Friday, February 10, 2012

The dynamic Excel export functionality of Dynamics CRM is a real killer functionality. I often get standing ovations from users, especially managers, when showing dynamic pivot table functions of CRM, partly due to the fact that many users don't actually know what pivot tables are and find them rahter magical.
I was working with a demo environment today and had some issues getting the dynamic excel to load data from CRM properly. I got the error message: "Connection failed". This was a lab environment with a separate Windows 7 virtual machine in an on-premise installation. This is important, because in IFD or CRM-online, dynamic excel data is tunneled through the outlook addon, but not when using the on-premise installation when it communicates directly with the server.

I started by trying to do the obvious thing by opening the TCP port 1433, the SQL communication port in the firewall. This did not help. According to some of the participants of the thread, this KB article by Microsoft might help: http://support.microsoft.com/kb/968872 - it does more or less the same thing, opens 1433 and some additional ports in the firewall all related to SQL. However, it did not help either.

One of the participants of the thread mentioned that he had opened the TCP port 53021, something I found very strange if it was to work, since ports this high are not supposed to be used as incoming ports but are ephemeral ports. I tried opening this port as well, but it didn't work either. The port number seemd sort of random so it might be that my deployment just used some other high port number.

A colleague of mine working at Hermelin IT-Partner, Anders Jildestrand, then joined me in the hunt for the mysterious TCP port. With his assistance and netstat we got the following result:

And if you are sharp eyed, you might spot it, as we had the SQL-server on the CRM server, and the TCP-SYN was sent but never answered, it is of course the last row, hence the TCP port 63831.

After opening this port in the firewall, the dynamic Excel worked just like it should.

The question now remains. Why this port?

We also had a discussion on which program, CRM or SQL Server that is actually answering this call, and it seems that it is actually SQL Server since the ODBC connectionstring in the Excel-file is directed to the SQL-server, not the CRM-server. But I think we could probably investigate this further with fiddler. If you have any interesting input, please leave a comment!

Thursday, February 09, 2012

Running Microsofts CRM Demo VPC (Available on Partnersource) on Windows 7 is a bit problematic but can be done. I found a good blog that showed how it can be done using VirtualBox but there were some extra things that needed to be done to make it work.
As many of you probably are aware, from Windows Server 2008, only 64 bit versions of the server operating systems are available which isn't very strange since the 32 bit versions of Windows only support up to 3.5 GB of memory which is really enough for even a small server.

Hence the Virtual Machine that Microsoft have released with a demo environment of CRM 2011 is based on this 64 bit environment. Since Windows Virtual PC, the Virtualization Technology for Windows 7 does not support 64 bit guest operating systems, it has been created on Hyper-V and is meant to be run on this virtualization technology. However, this is not really what you average CRM salesperson is running in his or her Lenovo X11 for many obvious reasons, power management probably being one of the most striking.

So, it is it just not possible to run the demo environment on a Windows 7 machine? Yes, it is. On the blog Leon's CRM Musings there is a very informative posting on how to make the virtual harddrive work in the VirtualBox virtualization technology. I was quite amazed when I saw this working as this is quite similar to installing an operating system on a computer, ripping out the harddrive and screwing it into a completely different computer and hoping it will work. However, the Hyper-V virtualization and VirtualBox virtualization must be very similar from the guest operating system perspective, otherwise the operatingsystem would have given a lot of errors.

Do note the part in the posting that the demo image does not support being run as a SATA drive but must be run as an IDE harddrive.

There are some comments that both SharePoint and CRM are installed on port 80. This is in part true, but they are installed on different websites separated by different host headers.

However, the sharepoint site did not work when I tried running it, hence the document manangement from CRM did not work either. After checking the IIS website bindings and the host-file (C:\system32\drivers\etc\hosts) I noticed that the host headers for the SharePoint site and some other sites were pointed at the IP 192.169.100.1 and a quick check with ipconfig showed that this was not the ip of the current computer. Hence I just changed the mapping to be 127.0.0.1 (always means "this" computer).

I then closed all IE-windows, flushed the DNS (ipconfig /flushdns) just to be sure, then tried the sharepoint site, and it worked. As did the document management in CRM.

I saw some people in Leon's blog commenting on the networking issues of making the exchange server communicate with the CRM-server. This can be done be setting the networkadapter in VirtualBox to "Internal Network" on the Exchange machine and using two adapters on the CRM machine, one with NAT (external) and one internal using the "Internal Network". Both the internal networks adapaters need to be configured manually, but the external one can have a dynamic IP. If anyone doesn't know how, please leave a comment and I will tell you how.

Regarding optimization of speed I strongly recommend upgrading your computers memory to at least 8 GB so that you can give the virtual machine between 4-6 GB. Try to give it even multiples of 512 MB as that will make for better memory management.

Another well known fact regarding VPC:s is disk access. It is highly recommended that you use a separate disc on a high speed controller (i.e. USB 3.0/eSATA/internal SATA).

As for processor power, it is not as essential, eventhough it is always nice. Try to allocate at least 2 cores to it. One for the SQL-server and one for IIS/GUI.

The recommendation that Leon gives to reduce the memory for the SQL server I am not so sure that is a good idea as CRM is very SQL heavy due to its meta data driven nature. However, if you only have 4 GB:s of memory and you have to make this VPC work, then you might have to try it. Kingston memory modules are very cheap now, 2x4 GB for a T410 is less than €100 last time I checked.

I have several computers, my "sales computer" is a Lenovo T410s Corei5 8Gb with 2 SSD HD. I use one of the harddrive for my host operating system and one for the virtual machines. I have removed the DVD-drive since I never use it, and the extra drive is a lot better use of the space.

Last of all, cudos to Leon for a great solution with VirtualBox for the VPC!

Update:An additional thing to do is to convert the VHD to the Virtualbox native VDI-format for virtual harddrive using the media Media manager in VirtualBox. This is probably a more optimized format for Virtualbox and hence a bit Quicker. (I have not tested it, it is just a thought)I have also tried to run the VPC on an external USB SSD, both USB 2.0 and USB 3.0 with 2 GB of RAM with 2 Cores on my Core i5 with the converted disk and it works fine. The SSD gives it a lot of extra speed.

Monday, February 06, 2012

Today Dennis Michalis, General Manager of Dynamics CRM at Microsoft announced that in Q2 2012 a service update of Microsoft Dynamics CRM 2011 will include cross browser functionality to allow users on a multitude of browsers and operting systems to finally be able to use all the great functionality of Dynamics CRM without having to use workarounds like virtualization or terminal services.

The cross browser functionality is something many of my customers have been waiting for a long time and I really look forward to seeing it. My colleague Rickard noted that no Unix/Linux based systems were mentioned in the matrix which is notable. According to what they previously have mentioned the mutlibrowser version will be based on HTML5 there might hence be two reasons for it not being included. Either it is not tested or there might be parts of the system that required Silverlight or some other component that only exist on Windows and Mac operating systems.

The other notable thing is that the mobile client will be big drawback for companies like Resco, TenDigits and CWR Mobile who have very competent mobile clients. This is always a risk for companies working with products close to Microsofts since Microsoft always need to expand and grow. So, if you are a company looking to invest in a mobile solution, think twice, it might be a good idea to wait a month or two and have a look at the Microsoft version of the product. It will require an extra cost so there will still be room for the other mobile clients but as others have previously noted, it is always hard to compete with Microsoft. Their mobile products do still have several upper hands on Microsoft Dynamics CRM Mobile in this early version for example, it does not support offline functionality and I would presume the mobile API is not as extensive as that of Resco or CWR Mobile (I do not have any experience of TenDigits).

Friday, January 20, 2012

My colleague Rickard had an interesting problem yesterday when working with a client of ours. They had a prototype upgrade and now wanted the production upgrade. However, they wanted both of these organizations to be available (yes, will required an Enterprise license or separate SPLA licensing if it is a hosting environment). The prototype upgrade they want to be available as "orgname-old" and the normal upgrade just as "orgname".

An interesting issue arose when Rickard tried to import the CRM 4.0 database into the CRM 2011 environment he receive an error message saying that a CRM 4.0 database can only be imported once into a CRM 2011 deployment. This might be noted somewhere but it is not something that I or my colleague Rickard have ever seen when working with CRM and we didn't find to much about it googling the issue either.

The problem seems to be that Microsoft seems to have cut a corner when upgrading a CRM 4.0 database in comparison to normal redeployment as it does not give the organization a new GUID. Hence you cannot import two organizations twice.

The workaround is, however, quite simple, upgrade the first database, disable it and remove it from deployment manager (do not delete it from the SQL-database).

Upgrade the second database into CRM 2011. As there is no organization with this GUID now, this is no problem.

Now, import the first database (redeployment) that you previously disabled and removed from deployment manager. You can now give it a new name if you like. As this is a redeployment, it will give this a organization a new Guid and the two organizations will not conflict.

If you are creative you can probably think of you own solution using similar techniques.

Gustaf (@crmgustaf)

About Me

MVP, owner and Principal Consultant at CRM-Konsulterna AB
A consulting company with 100% focus on Microsoft Dynamics 365 Customer Engagement and related technology.
You can reach me at my "firstname.lastname"@crmkonsulterna.se