Tag Archives: CRM 2011

TK Dialogs vs. Microsoft CRM Dialogs

Here is a quick run through on Team Knowledge’s TK Dialogs product and a comparison between TK Dialogs and the out-of-the-box Microsoft CRM 2011 Dialog feature.



Microsoft CRM 2011 ships with a Dialog feature at no additional cost, TK Dialogs is a 3rd party ISV product / add-on for Microsoft CRM that you need to pay for.



The out-of-the-box (OOTB) Dialog feature is installed with and is part of the CRM server application.  It is not installed separately, it is not identifiable as a separate component. 

TK Dialogs has server components that host and run the Dialogs, that provide SMTP integration and supply TK Dialogs with the CRM Meta Data.  The main component here is the Dialog Player which is a web app that you host in IIS.  In addition, there is a client component – the Dialog Builder – which is the authoring application:




    As I compare the 2 products and look for something that the OOTB Dialog feature has which TK Dialogs is missing I find nothing significant jumping out at me.   The advantage of the OOTB Dialog feature is it is free, it is 100% integrated and it is not 3rd party.  So this product comparison really boils down to what additional functionality do you get for your money with TK Dialogs.

    Here are the additional TK Dialog features which stand out:

    • Drag & Drop Dialog Designer
    • Flow Chart View
    • Mail Merge Word & PDF
    • Email Recipient can Resume Dialog
    • Upload Files
    • External Users
    • Redirect to/from External Apps
    • Save and Resume

    Drag & Drop Dialog Designer and Flow Chart View – these 2 features are less about additional capabilities and more about a richer authoring experience.  Alone these do not warrant the additional cost of licensing TK Dialogs but they are features that your Dialog authors will enjoy:


    The ability to move components is a feature I miss in the OOTB Dialog designer in Microsoft CRM, it is not uncommon to find yourself having to delete components and recreate them at another level. The flow chart view is nice in TK Dialogs but I’ve always been happy enough with the indented tree view approach that Microsoft’s took with their OOTB Dialog designer.  The flow chart look and feel would certainly demo better.

    Mail Merge Word & PDF – TK Dialogs provides functionality for generating Word and PDF documents during a Dialog session, using pre-defined Word templates.  TK Dialogs help with the template creation as well, providing a utility that will automatically create a template for a specific Dialog, generating a Word document with data slugs for each field referenced within the Dialog:


    You can then add your hardcoded text and any formatting and images required:


    Within your TK Dialogs you can generate a Word or PDF document and then attach the document to a CRM record or attach it to an email and send.

    Email Recipient can Resume Dialog – Both the OOTB Dialog feature and TK Dialogs can send emails.  Those emails can contain links to CRM records to direct the email recipient into CRM to take some action – e.g. to approve a transaction.  An advantage TK Dialogs has is it can include a link in the email that directs the user into an in-progress Dialog.  This keeps them out of CRM and directs them to the exact action required of them, rather than just to a CRM form.  

    This opens up some interesting possibilities around licensing and user experience.  Think of a scenario where you have a large number of users who need to either initiate requests and/or provide responses / approvals at certain stages of business processes.  If these users don’t require full CRM functionality then you could potentially save yourself some licensing costs and have these users use TK Dialogs instead of Microsoft CRM.   The would initiate requests through TK Dialogs and when their input/approval is required they could be sent an email with a Resume Dialog link that would take would pop the relevant Dialog prompting them for the information/decision required.  Once their input is provided the Dialog could send focus back to the back office worker to complete the business process.

    Upload Files – TK Dialogs take the Prompt and Response capabilities one step further allowing the response to be a file which the user browses for on their desktop and then uploads into the Dialog process.  The Dialog can then store, email or attach the document to a CRM record.

    External Users – This is perhaps the most important distinction between the OOTB Dialog feature and TK Dialogs.  CRM Dialogs are available only to CRM users.  TK Dialogs however, sit outside CRM, the Dialog Player is a separate web application with a separate licensing model and authentication model.  Yes, you can create TK Dialogs for your CRM users, leveraging the additional functionality TK Dialogs has to offer, but where TK Dialogs adds the most value is those scenarios where you want to put Dialogs in front of non-CRM users, here the scope of your CRM system suddenly increases dramatically.  Here’s an example server configuration showing what this would look like if your non-CRM users were external to your organisation:



    Redirect to/from External Apps – TK Dialogs can be integrated with external applications such that part way through a Dialog process the user can redirected to an external web application and then upon completing some steps there get redirected back to the Dialog.  Variables can be passed between the applications to default values and provide responses.  This form of integration is useful for online credit card payments.

    Save and Resume – This feature is noticeably absent from the OOTB Dialog feature in Microsoft CRM.  I guess because the OOTB feature is aimed at internal users it is a less of requirement then in those scenarios where you have internal or external customers completing self service dialogs for the likes of visa applications.  The feature works well in TK Dialogs, the user requests to Save and is provided with a URL and pin so they can resume at a later time.


    When would I propose TK Dialogs?

    For Dialog requirements, I won’t always be proposing TK Dialogs to every customer.  The OOTB Dialogs feature in CRM 2011 is pretty good and does the job in a lot of scenarios.  The scenarios which would have me looking over at TK Dialogs are:

    • When a self service web-based Dialog experience needs to be rolled out to internal or external customers – e.g. to provide an online visa application process to the general public or for a service request system for internal staff
    • When email based approvals are required
    • When the ability to mail merge documents is required
    • When Dialogs are core to the solution and the richness of the Dialog designer is key

    Please share your experiences with TK Dialogs and any key features you have found valuable.


    MyCRM add-ons for Microsoft CRM 2011

    A few months ago I received an invitation from Alistair Dickinson at MyCRM to review his add-ons for Microsoft CRM.  Today felt like a good day to shake that tree…

    Today I will run through: 

    • ePDF – generate report to PDF from CRM forms
    • eSpell – spell checker for CRM forms
    • ePurchasing – purchasing module for CRM
    • eNumber – unique ID assignment for CRM records
    • eView – cross-entity customer search and custom 360 view
    • eAddress – keeps Account and Contact addresses in synch
    • ePicture – embed a picture on a Form or store an image library against a record

    To try these yourself simply register on the MyCRM website and download their License Manager app.  Their installer guides you through connecting to your CRM system to deploy License Manager:


    Once License Manager is installed you can deploy MyCRM’s various add-ons from within the Microsoft CRM UI:


    This installation experience looks fairly slick, but I did find the apps wouldn’t work straight away.  It seemed I had to navigate away from the License Manager app and then go back to it in order to bump something into the right spot.  Not a big deal, a one time thing.  I reported the issue to guys and I’m sure they will address it (they’ve been very responsive to emails thus far).



    MyCRM’s ePDF product is all about improving the user experience when generating CRM reports from CRM forms, it’s all about saving clicks.  It will have a home in scenarios where you want users to be able to print a Case Summary report from a Case record, or print a Quote from the Quote form, etc.  In these scenarios out-of-the-box CRM allows you to generate a report and then save it as PDF and then you can go and attach that PDF to an email or save it back into CRM as an attachment.  But that process is a bit clunky.  ePDF improves on that.  Here’s what it looks like:

    Button added to CRM form: image

    Pick a CRM report, and then the action you want to perform:


    My initial thought was why aren’t they just launching the PDF for me in Acrobat Reader.  But it is logical that if you are wanting to generate the report in PDF then you either intend to save it somewhere or email it so the MyCRM approach makes sense.

    The solution supports 8 of CRM’s common entities.  At first I was concerned the solution only supported these 8 entities but a quick email exchange with Alistair revealed that the button can be replicated simply enough onto other entity forms they just don’t have instructions for this on their web site.  If you are familiar with customising the CRM Ribbon XML or with Erik Pool’s Ribbon Editor then you will find this process easy enough, otherwise the MyCRM guys will happily help you.  Took me under 5 minutes to add the ePDF button to the Case form using Erik’s Ribbon editor.

    I think this solution has value, it represents a significant improvement to the user experience and it looks to be well made.  However, I expect there are scenarios where an even more streamlined solution would be preferable – e.g. on the CRM Quote form having a Generate Quote button that immediately popped a PDF of the Quote report or a CRM email with the quote attached (i.e. no pop up screen and additional clicks there).  However, as soon as you want to offer your users more than 1 Quote format to pick from or the ability to save vs. email then ePDF makes sense.

    Custom building something like this yourself is not out of the question, CRM reports can be generated by web service calls.  I expect licensing ePDF would be the cheaper way to go, but then like with any add-on you become dependent upon their release cycle for future upgrades.  Depends somewhat on your taste for build vs. buy.  Pricing starts at £750 (< 10 users).



    MyCRM’s eSpell product adds ‘on request’ spell checking to common CRM forms.  You get a Spell Check button added to the likes of the Email, KB Article, Contact and Account forms:


    The Spell Check executes for the field / text block that currently has focus, returning potential errors for you to change or ignore:


    You can pick your default dictionary, any corrections you make in the spell check dialog are pushed back to the CRM form and the whole user experience is fairly intuitive.

    Again, the solution deploys to a predefined list of entities but again you can replicate the button and add to any CRM form.

    A big limitation of eSpell is the spell check is an ‘on demand’ service only, it cannot, for example, be configured to run on save/send, which I think is pretty important for spell check.   Neither does it alert you of spelling errors as you type.

    Pricing starts at £250 (< 10 users).

    An alternative to eSpell is the Speckie add-on for Internet Explorer by Versoworks.  Speckie adds spell check capabilities to Internet Explorer, so you gain the functionality in Microsoft CRM when you use IE as your browser.  Speckie is free to trial and free to use in a non-commercial setting so feel free to give it a go.  Speckie highlights spelling errors across the entire web page and offers a right-click menu for making corrections:


    Sorry MyCRM, I prefer Speckie.  Speckie has sliding scale pricing, e.g. 10 users will cost you $16.5USD per user,  1000 users will cost cost $5.50 per user.   Enterprise customers however may be uncomfortable with deploying an Internet Explorer add-on (they seem to be uncomfortable with most things!).  eSpell has the advantage of not requiring a client installation.



    MyCRM’s ePurchasing product extends Microsoft CRM’s distribution capabilities to include the purchasing function. 

    Purchasing is typically the domain of ERP systems but CRM is known to impeach on ERP territory from time to time (quotes and orders are good examples of this). 

    It is also not uncommon for a business to license only a small number of users for ERP access but for there to be a collection of ERP functions that should ideally be made accessible to a broader user base and not all ERP systems have a good license model to support this.  Good examples of such functions are Customer Enquiry, New Project Registration and Raising Purchase Orders.   This is where CRM, which is typically licensed to a broader user base, can be of value – providing a licensing alternative and more user friendly UI.  If that broader user base is already using CRM then it can make sense to roll out this functionality through CRM.

    MyCRM’s Purchasing module appears as a new Menu Area in CRM:


    The out-of-the-box user experience of entering a Purchase Order is very similar to entering an Opportunity or Quote with Product details.  You enter the header information:


    And then add Product Line Items:



    Products can be selected using a Lookup or you can write in products.  CRM’s product entity is used except Products can now be parented by a Supplier to give you filtered lookups when selecting products on a Purchase Order.

    I give points to MyCRM for building out a consistent user experience here, but I also penalise them for it , because Microsoft’s out-of-the-box user experience is sub par in this area.   But then the beauty of MyCRM’s solution is it is a Microsoft CRM solution configuration that we can re-configure as required.  Certainly if I was to demo their Purchase Order screen I would place the PO Details grid on the Purchase Order form – or more likely – swap it out all together for an editable grid.  That leaves me wondering, why buy this add-on, why not just configure up my own Purchase Order and PO Detail entity.  I think you need to do that analyse.  It becomes a gap analysis, how much of a gap is there between the ePurchasing out-of-the-box solution and what you need?  If you are happy to largely go along with the out-of-the-box then cool, buy it.  If you want to change things up a fair bit and are confident in your CRM configuration/customisation abilities then you are probably best pocketing those licensing dollars. 

    There’s more to the Purchasing solution such as Purchasing Budgets, integration to MyCRM’s eTax and ePDF solutions, and an Approval process.  So if you are in the market for a Purchasing solution for Microsoft CRM do have a good look at it.  Pricing starts at £950 (< 10 users). 



    MyCRM’s eNumber product adds auto-number and auto-field capabilities to Microsoft CRM.  This doesn’t excite me too much, adding auto-number to a CRM entity requires only a simple plug-in and I often write simple workflows to set fields automatically.  I think this is the first time I have seen a single solution that handles both auto-number and auto-field.  I’ll quickly run you through MyCRM’s features:

    The configuration screen is added under the CRM Settings module:


    You click the New button and a CRM form pops up.  Interestingly, they don’t use CRM form fields though, instead the CRM form hosts a Silverlight form:


    You select the CRM entity and specific CRM text field you wish to have auto-populated (it has to be a text field).  You can then just setting a starting number and be done with it:


    Or you can define separate “Name Parts” (segments) of your field – e.g. you might like to have a Lead ID that has the text “LEAD” hardcoded as the first 4 characters followed by an incrementing number:


    Or you might like to merge a value from the CRM record into the ID.  Here, I define a Case ID that will use the value of the Case Origin field as a prefix:


    Which results in this:


    Now, existing records are not automatically assigned an ID when you define the rule, but they will get assigned one the first time they are updated (if you enable the Always Update option).  You can do a bulk edit or Excel export/import to ‘bump’ existing records and get them all assigned an ID.

    Here’s another you might use this app.  I often hit the scenario where I have a custom entity with no good value for the entity’s primary attribute and I don’t want to make the user populate it.  Normally, I pick some values on the record that describe it and concatenate them together into the primary attribute field via workflow.  With this app I can configure a rule instead.  e.g. I have a “Case Contacts” entity attached to the Case entity which allows me to associate multiple Contacts to a Case:


    I can configure a rule like the below that will populate the “Name” field based on the Contact + Role values:


    Giving me:


    Because the app is implemented as a plugin this field is populated as part of the Save and appears immediately to the user.  This is an improvement over the workflow approach where the update happens asynchronously. 

    You do need to consider other scenarios though like what happens when a user changes the Role on this record – you might still want a workflow to trap that to keep the Name field in synch.   Even then, there are scenarios that workflow can’t handle such as when the surname of the Contact changes. 

    Overall, I think this is a nice solution for auto-numbering.  I’m not sure it has a place on my projects as I have other solutions I can use but I might use it when I am prototyping.  But for customers who don’t have ready access to CRM developers or who prefer to avoid customisations then this should appeal.  Pricing starts at £500 (< 10 users).



    MyCRM’s eView product is primarily a “360 degree view” product – aiming to improve upon Microsoft CRM’s out-of-the-box customer form in terms of displaying more data about the customer in a more accessible manner.   It has a supplementary feature as well in that the search box for eView searches across Contact, Account, Lead and Opportunity – so you also get a cross-entity search.  That alone can be of value.

    Here’s what it looks like:


    You enter your search string at the top and results are returned (no need for wildcard characters):


    As you change focus between the search result the 360 view refreshes.  You see Related records, Activities and Notes.  I quite like how Activities and Notes are split apart and they’ve made good use of the screen real estate – you have good visibility of everything, certainly better than what you get on the CRM form.

    The solution is configurable too.  The installer pops a Configuration screen under the Settings menu area.  An “Everyone” definition is created for you which you can edit or you can create customised definitions for specific users, teams or roles:


    The eView configurations, like security settings in CRM, are cumulative so all users with access to eView will have the Everyone eView.  If you then create a user-specific eView that includes additional related record types then that user’s eView will include those related records but other users’ eViews will not.   Defining which related record types should appear is a nice ‘point and click’ user experience, you can define the view columns as well:


    Functionality is a little limited here I am afraid.  You cannot specify the sort order, column widths or any filtering.   Unfortunately these are significant limitations in my opinion, but perhaps something you can live with in the short term.

    Another nice feature is the eView can be enabled on each entity form.  The screenshot below shows eView on the Account form.  I do like this.  Often I will demo a “360 view” to a prospect by opening up the Account form and clicking through the various nav links and scrolling down the form – I think clicking once on this link would produce a sharper demo:


    Pricing starts at £950 (< 10 users).



    MyCRM’s eAddress product suits scenarios where you need to store Business and Personal addresses on Contact records.  eAddress provides two enhancements in this scenario.  Firstly, the Business address on the Contact record is set to be read only and  automatically kept in synch with the Account address so you only have to make business address changes at the Account level. 

    Secondly, and more importantly, on the Contact record you designate whether the Contact’s Business address or Personal address should be set as the Contact’s Mailing address.   eAddress then ensures the designated Mailing address is replicated into CRM’s Address 1 fields for ease of Mail Merge in the future.

    Now eAddress won’t suit everyone, it fits a very specific scenario, and a scenario I haven’t come across before.  I worry a little about the synchronisation of Account address down to Contact address as it assumes all Contacts under an Account share the same business address which may not be true – depends upon how you structure your Account records in CRM.   I do like how they control the population of the Contact Address1 fields though – makes good sense.

    There’s not a lot to eAddress.  I think if I hit a similar scenario I would be inclined to just write jscript or a plugin to address it.  Pricing starts at just £100 (< 10 users) so they are not asking much for this, I guess that’s the motivation to buy rather than build!



    MyCRM’s ePicture add-on is quite cool.  I’m a fan.  Once installed you get a configuration screen where you can chose which entities to enabled for Image Libraries:


    When enabling an Entity you can chose whether the Image Library should be accessed via a navigation link or as a tab on the form, and you chose which Form(s) to make the change to:


    They’ve done an excellent job here.   The end result looks like this:


    Adding Images is simple and intuitive, you simply browse out and select the images (or can use an integrated web cam):


    And the Image Library has nice viewing options as you would expect:


    If you want to be able to store images against CRM records and easily view them then this to me is a no brainer, ePicture works a treat.

    The other main feature of the ePicture add-on is the ability to embed a single image on a CRM form – e.g. a Contact photo.   This is achieved by adding to the CRM form the PrimaryImageViewer.xap Web Resource that MyCRM provide:


    The entity involved needs to have been enabled for Image Libraries and your particular record will need to have an image in its library.   The first picture you upload to an Image Library will be marked as primary and it is this image that the Web Resource will display on the CRM form.  Of course, you can set a different picture as primary at any time.  

    The end result looks pretty good:


    There are a few different options for enabling images in CRM, I’ve seen some sample code floating around my workplace which we have leveraged before.   I like ePicture though, I will certainly make use of it in demos (when appropriate) and will be happy to propose it on projects.  I’m also thinking about portal scenarios where you use CRM as the back end to the portal and drive the content from CRM.  I think ePicture could fit in here as a means of providing image content to the portal.  I’m going to ponder that a bit more.

    Pricing starts at £950 (< 10 users).


    That’s me for today.  I do want to point our that the MyCRM guys have a couple of other apps available that I haven’t covered: 

    eUser – bulk set end user personal options (quite handy)

    eTax – adds tax calculations to sales processes in CRM

    eWorkflow – additional workflow actions you can enable in CRM workflow designer

    eCampaign – an email marketing add-on for bulk email (this one is a full sized product)


    I hope someone finds this introduction and analysis useful.  Please share any experiences you have had with these products.


    SMS and Fax Integration for Microsoft CRM 2011

    Recently my colleagues and I have been experimenting with different integration approaches for enabling the SMS and Fax channels for communications from Microsoft CRM.   Here’s a run down on  some of the approaches we explored.


    SMS Integration


    A very common request in RFP’s these days is the ability to send SMS alerts to customers/users from CRM.  When facing this requirement you need to first determine whether the customer has an SMS gateway service/provider that they wish you to use or not.  Each service/provider can be different so your approach and estimate may vary. 

    The 2 common SMS integration approaches you’ll come across are:

      1. Email-to-SMS Services

      2. Web Services

    Email-to-SMS Services

    With Email-to-SMS services you send your SMS to a unique email address and it gets converted and sent on your behalf.  I’ve seen two flavours of this.  One where the email address is fixed and you provide the recipient’s mobile number in the body of the email with a delimiter, splitting apart multiple recipients and the message.  The other flavour is where you include the recipient’s mobile number in the email address – e.g. 97845899@smsprovider.com.

    When it come to CRM, the advantage of the Email-to-SMS service approach  is you can potentially utilise this without having to wheel in a developer.   This is certainly the case when your SMS recipient is fixed.  e.g. suppose you want to SMS the IT helpdesk when a high priority Case is logged in CRM.  You could create a dummy Contact or User in CRM with an email address like 97845899@smsprovider.com and then just create a CRM workflow that emails that Contact/User when the triggering conditions occur.   Also, those Email-to-SMS services that take the recipient’s mobile number as a value in the body of the email message can easily be utilised with OOTB workflows.

    If your service requires the recipient’s mobile number to be embedded in the email address then you can’t always get away with a no-code solution.  Your Customer records will typically have a real email address and you will have this set as their primary so that CRM email integration works.  Yes you could store their mobile number in one of their secondary email address fields but CRM workflows will always use the primary email address.   Unfortunately, when defining an email in workflow you have to chose a CRM record to email to.  And in CRM workflow you can’t you just construct an email address out of say the Contact’s mobile number and a hardcoded suffix:


    Web Services

    To utilise an SMS provider’s web services you definitely need to summon a developer out of the basement.  Good news though is the development is often quite minimal and rather than coding for one specific requirement we can easily code up a generic SMS capability that you can use in a number of ways.   Here’s 2 approaches we have played with:

    Custom Workflow Assembly: Send SMS

    Here, the idea is to create a custom workflow action that is similar in nature to the OOTB “Send Email” workflow action – so that your workflow designers can  easily add SMS sends to any workflow or dialog they author:


    You define the workflow assembly to accept at least 2 input parameters:  “CRM Contact” and “Message” (you also might want to cater for “CRM User” as an alternative recipient type):


    Your clever little CRM developer’s assembly will read these parameters, retrieve the mobile number from the Contact specified and call the SMS Web Service to send that Message to that Mobile Number.

    You could also define a custom “SMS”  entity in CRM and have your developer extend their workflow assembly to record an SMS entity record for each SMS sent, to provide an audit trail of that communication (just like you get for emails). 


    If this appeals, best bet is to define this custom entity as a custom activity and make sure your CRM developer codes it up so this record is flagged as completed/sent – so that it appear under Closed Activities:



    SMS Activity Type + Plugin

    With this approach we flip things around.  We ditch the custom workflow assembly and place our logic in a plugin instead.  Here we definitely need a custom SMS entity added to CRM and defining it is as a Activity Type again makes sense.  The idea behind this approach is to put the SMS delivery logic into a plugin that will fire as an SMS activity record is saved.

    The cool thing about this approach – in addition to opening up SMS as a new channel for CRM workflows – is we give our users the ability to manually send SMS’s in CRM, in a way similar to how they would send an email from CRM.     They can go to a Contact, Case or Opportunity (any entity that is enabled for Activities) and do a New –> SMS, then enter their message and then hit Save.  SMS sent.   Nice!

    The plugin fires on save (pre or post create/update – you pick).  The plugin context provides the Contact and Message from the SMS activity record.  The plugin retrieves the Contact’s mobile number and then calls the SMS Web Service to send the message.  Optionally, it could write a success/failure response onto the SMS activity record.  Lastly, it should mark the activity as complete.

    Another advantage of this approach over the custom workflow assembly approach is you can easily add “Resend” functionality.  I’d do this by adding a “Resend” ribbon button to the SMS Activity form which would force a status change to the SMS activity record – which in turn would trigger the plugin to send the SMS.


    Fax Integration


    We looked at Microsoft CRM Fax integration for a customer this week whilst shaping a solution for their outbound call centre.  Their main use case had the sending of Faxes occurring from CRM Dialogs (when certain prompts and responses lead to the need to send the Case details to an external party).  The volume of Cases was low and the need for Fax integration was fairly minimal.  Some of their business processes required communication of Case details to an external party via Fax.  The external parties were known and fixed and there were only a handful of them.

    The customer hadn’t been able to share much about their existing infrastructure and wanted to scope this project as a pilot.  We decided to go with an online Fax provider, rather than introduce any dependencies on unknown internal systems.    eFax.com was the logical choice, we signed up for a 30 day trial and started experimenting in our lab. 


    eFax offers an online email-to-fax service, similar in nature to the email-to-SMS service I discussed earlier.  Differences exist of course, with fax you are sending documents rather than short text messages.  eFax gives you an email address to use and ask you to prefix the recipient’s fax number to that email address.  The document to be faxed should be attached to the email, and the body of the email becomes the fax cover sheet.  Simple enough concept – score 1 for eFax!

    As always, there were several ways we could design the interface.  I wanted to architect a solution that was consistent with the SMS plugin interface and shared the positive characteristics of that approach.  The solution needed to support the sending of Faxes from workflows/dialogs or manually through the CRM UI.  It needed to support resends and there should be a CRM activity record recorded for each Fax sent.  The Fax document itself needed to be configurable and I wanted to be able to send different documents in different scenarios.  The recipients could be established in advance as special CRM Contact records – the solution just needed to be configurable to allow selecting of the relevant Contact in each scenario.

    Here’s what we came up with…

    We created the Dialog and at the relevant points added ‘Create Fax’ actions:


    We specify the Sender and Recipient on the Fax record, provide a Subject and specify the name of the SSRS report we want faxed:


    After creating the Fax record the next action the Dialog performs is the updating of the Fax Status to “Pending Send” (this is a trigger we will make use of in a bit):


    The Contact we are faxing is a system Contact record we have added into CRM, it is on this record that our destination fax number is stored – in the email address format required by eFax:


    The Fax Report Name that we specified on the Fax record refers to an SSRS report we uploaded directly into SSRS:


    The SSRS report requires a Case ID parameter, from which it retrieves records from the Case and Contact entities displaying these as a formatted Case report:


    So the Fax record is created with all of the necessary input parameters we need populated into its fields:


    I mentioned before the Dialog sets the Status of the Fax record to “Pending Send” – that is the trigger we hang our Plugin off of. 

    So, the Plugin, this is where the good stuff resides.  Here’s what the Plugin does:

    1. Generates the named SSRS report via the SSRS web service, passing in the Case ID from the Fax’s Regarding field as a parameter and requesting the formatting of the report output to be PDF.
    2. Creates an Attachment record against the Fax record, attaching the PDF output from step 1.
    3. Generates a CRM Email Activity record based on the Fax record (same From, To, Subject, Message Body, Regarding and Attachment).  We also have a custom Fax lookup field on our Email form and we populate that to link the 2 records.
    4. Submits the CRM Email Activity for Sending

    That Email Activity record will now be eligible for delivery and either the CRM Outlook Client or Email Router will pick it up and send it out.  The email will go to the Contact we specified back in the Dialog who has their fax number embedded in their email address:  6563380933@efaxsend.com.


    eFax will receive that email, generate an actual Fax to that number (6563380933) sending the SSRS PDF report it finds attached to the email.

    There’s one last bit to this solution.  The one thing that looks a little wrong at this point is we have this Fax communication essentially stored in CRM twice:  once as a Fax record (good) and then again as an Email record (bad!):


    We address this with a small Plugin that fires on status change of the Email record. When the Email status changes to “Sent” our Plugin marks the Fax as “Sent” and then deletes the Email record leaving our Case record with a nice clean History record:


    We could have avoided the need for this extra Plugin by having the first Plugin send an email directly to an SMTP service instead of creating a CRM email activity record.  We would have to write that SMTP integration code though and store those connection details somewhere.  I like the CRM Email Activity record solution more, there is an elegance in not needing to know the details of any other system – all the coding, is just ‘normal’ CRM coding.

    For resends, we can follow the same approach we put in place for SMS and add a custom ribbon button to the Fax form which updates the Fax Status back to “Pending Send” to trigger the plugin to run again.

    The solution supports adhoc sending of Faxes by CRM users as well.  They just need to create a CRM Fax Activity record, chose one of the system Contacts to send to and enter the name of the SSRS report to be faxed.  They can initiate the Send via the custom Ribbon button or by manually changing the Status field on the form (you might want to have a “Send” button in addition to the “Resend” button to smarten this up a little).   

    There’s plenty more you can do to harden this solution further but hopefully this gives you an idea of what is possible.  Should you need to integrate to a Fax web service in a different way from what I have shown here most of this solution can still apply you just change what the Plugin does – e.g. have it call a web service rather than create a CRM Email Activity record.

    We got the above solution working in next to no time.  And the main reason for that was this wee code snippet that took care of the SSRS report generation and attachment steps for us:  http://ekoncis.blogspot.sg/2012/01/crm-2011-custom-email-with-pdf-report.html

    HTH Smile

    10 Microsoft CRM Demoing Tips

    Beyond the basics here are my top 10 tips for preparing a quality Microsoft CRM demo and avoiding disaster…

    1. Write a script – Not only does this give you something to follow on the day but putting it down on paper will help reveal any flaws in your plan.  And this will make it easier to repeat a demo when you get asked to redo to another audience some time down the track.  My advice; write the script before you do any demo configuration.  I think it is a common mistake to get stuck in and configure away, build out different screens and then find yourself scratching your head as to how to string them together in the demo.  Much better to figure out the story you want to tell first.

    2. Design a logical demonstration flow – A ‘day in the life’ of the primary user persona usually works well.  Think about how the user would start their day and what other applications they would use in conjunction with CRM and don’t be afraid to talk to those systems during your demo – CRM won’t be going in and be used in isolation.  Develop a demonstration scenario with continuity – e.g. a new Lead is identified in the morning, you meet with them after lunch you follow up at the end of the day and push through a referral to another department.

    3. Document the steps required to ‘reset’ your demo – My pet hate is seeing a demo being executed where you can see ugly evidence of previous executions – either records visible on screen identical to what the demo’er is about to demo, or fields already updated that the demo’er has to clumsily reset on the fly.  After you practice your demo make sure you undo the inserts and updates you executed so that the demo runs clean next time.  My advice, as you write your script also write your reset instructions, then as you practice your demo and refine your script add any missed reset steps to these instructions.

    4. Support your demo scenarios with a Process Diagram or Scenario Description – Explain what you are going to show with some slides before you demo, then also use this content to recap afterwards.  This is a proven learning approach that is equally effective in demos and training sessions. It also gives your audience content and the bigger picture before you start showing them the new system.

    5. Switching applications and laptops during the demo should be avoided like Matt Damon – Consolidate your content to one laptop per projector, put all your slides into one deck.  Mucking around with cables or slide decks hurts the flow and bores the audience. 

    6. Use two projectors if you can, but only when you control the environment – Projecting slides to one screen whilst your demo runs on another can be very effective.  Another useful approach is to have different user personas projected on different screens – this is especially useful when there are interactions triggered between the personas.  But don’t fall into the trap of preparing a double projector demo at a customer site where the room logistics are not certain.  Another pet hate of mine: seeing a double projector demo where it turns out one projector has to be aimed against a side or poorly coloured wall.  Just don’t do it!  If you can’t be sure of two decent projection screens don’t plan a double projector demo.

    7. Be careful with internet connectivity requirements – CRM Online 30 day trials are useful for building out demos, especially when you need a team collaborating on the build, but demoing from CRM online requires a decent internet connection.  Yes, we live in a world of 3G dongles and iPhone tethering and some customers will let you connect via their LAN/WAN but rely on these at your peril.  My advice, go VM.  Develop in CRM Online if you need to but deploy to a VM for the demo.  Slow demos are sucky demos.

    8. Have backups and contingency plans – Here’s what I do: I regularly take SQL backups and/or export my CRM Solution as I develop my demo and make sure these backups are located in difference places (email, Dropbox and Google Drive are all handy here).  When my demo is ready I deploy to a second VM and have that VM on standby.  VMs can die, they seem to be getting better but they have had a history of being a little fragile.  It is prudent to expect your VM to die any second.  And lastly, I screenshot my demo end-to-end and save this to PowerPoint.  This contingency plan also doubles as a useful resource for you to share with your prospect so they can review details at a later date or distribute to others that couldn’t make the live demo.

    9. Ensure your demo can be saved for later re-use – I’ve touched on this above but I think this is key.  Either you might hit a similar scenario with a different customer in the future or the same customer may require a repeat  performance of the demo.  Some sales cycles can run a number of months so this request may come in much later.  Having a re-usable script helps the old memory and building on a VM means you won’t lose the demo when your CRM Online trial expires.  Even if you do demo on CRM Online, consider not only saving the CRM Solution for later use but also export all of your sample data to excel.  Preparing sample data can actually take longer than building the configuration – don’t lose your demo data!

    10. Invest in your demo data – Create industry relevant data and lots of it.  Populate your fields, ensure your CRM views look complete and rich.  Everything looks better with more data: reports, views, dashboards, etc.  You can cheat though – create 5-10 full records in CRM and then export to Excel.  Copy and paste in Excel and turn that into 200 records.  You can duplicate a lot of the data and get away with it.  Look out for duplicate email addresses though, that will stuff you up when showcasing email templates or email matching in Outlook.

    There you go, lessons from the field.  If you have some Demo experiences to share please post a comment.



    (thanks to Mrs G for proofreading)

    Web Resource Upload Utility for Microsoft CRM 2011

    I needed to upload a bunch of icons into a CRM Online trial today so thought I would refresh myself on the Web Resource Upload Utility included in the SDK.  Hit a couple of connection snags which I thought I would share here…

    The Utility is available at this location:


    When connecting to CRM Online you will need to enter credentials like this:

    (note: the Organisation and the Server URL formats)


    If you get this error…  There is an error in XML document (5, 5)”

    … follow these instructions:  http://skynetr.wordpress.com/2012/04/24/crm-2011-error-there-is-an-error-in-xml-document-5-5/

    Browse to the folder containing the files you want to upload into your CRM as Web Resources and then select your files and click the “Add Files to Web Resources” button in the middle of the screen:


    Your files will appear in the lower grid.  Highlight them and then click the “Upload Selected” button.

    Done Smile



    Adxstudio Portal Solutions for Microsoft CRM

    What is Adxstudio’s Portal offering?  Well, if you’ve seen the Customer Portal Accelerator for Microsoft CRM you have already seen a little of what Adxstudio has to offer.   The accelerator is badged as a freebee from Microsoft, but the underlying product is essentially a cut down version of Adxstudio’s portal offering.  This link will give you the comparison.


    Why would you be interested in the Customer Portal Accelerator or Adxstudio’s other Portal editions?… 

    It comes down to a build vs. buy discussion.  Adxstudio are offering you an alternative to custom development for meeting your public website, customer portal, or partner portal requirements – and their solution comes with built in integration to Microsoft CRM and some Content Management System (CMS) features.  It does however still require a bit of coding.  I’ll try and explain whether configuration ends and coding begins in this post.

    It’s important to understand from the outset that Adxstudio’s Portal product is more of a Portal Development Framework then it is an off-the-shelf product.  They do provide you with sample portals, or ‘portal templates’ if you like, but the reality is you will need .Net development skill in order to configure your own portal.

    Now there is a learning curve there for your developer – they need to learn Adxstudio’s portal framework.  But this still beats figuring out an authentication architecture, caching strategy, security model and CRM integration framework from scratch.

    But, what’s cool for business users is that once your developer has deployed the portal you can then maintain the content yourself and even customise the web forms and views – all from within Microsoft CRM.


    Installing an Adxstudio Portal

    First off, let me run you through the installation experience…

    The product is provided as an MSI installer.  Running the installer unzips the application files into a folder on your computer. 

    Now, before I go on, I need to explain there are 2 components to the Adxstudio Portal framework.  The first is the portal web application that you build in Visual Studio and deploy into IIS (or Azure).  The second is a set of CRM customisation components that provide the data model, screens and views for the backend of the portal.  The portal web application uses your Microsoft CRM system as its backend database – there is no separate portal database.  The portal is tightly integrated to Microsoft CRM; it can authenticate portal users against CRM contact records, the portal pages can display CRM data, and can even display the forms and views that you have configured in CRM.  In fact the entire structure and content of the portal is configured in, and read from, your Microsoft CRM system.  So your Microsoft CRM system both drives the portal and the portal can feed your CRM system.

    So back to the installation process, running the MSI installer unzips a bunch of files.  Included in those files are a some CRM solution files each offering different functionalities:



    You import the solution file(s) that you want and then publish the changes (note: you need to import at a minimum the “MicrosoftXrmCustomerPortal.zip” solution and that needs to be your first import).

    In my case, I imported the CustomerPortal solution file followed by the PortalsComplete file (without the PortalsComplete solution I got a missing schema item error when I tried accessing my portal).

    Give your CRM system a quick F5 refresh and you will see CRM has been extended with Portal configuration entities:


    You now have the data model and the user interface for the Portal configuration and can start manually creating records to define your portal.   Or, you can use Adxstudio’s WebSiteCopy utility to populate these tables with the definition of one of Adxstudio’s sample portals – and I think this second option is the path Adxstudio expect you to go down.  Using one of their sample portals will speed up your learning and the development process.

    The WebSiteCopy utility comes with a wizard style user interface:


    You can either specify a CRM system or an XML file as your source (websites can be exported to XML).  Adxstudio provide a range to pick from.  I went with the CustomerPortal option:


    You provide your CRM system’s Discovery service, followed by the Organisation to deploy to and then you execute the copy:


    Next step is to deploy the sample website into IIS.  They provide step by steps on that here – in summary: you create a website, point it at one of the sample apps installed unzipped from the MSI installer, set the .net framework to 4, change the app pool identity to a CRM administrator and set the anonymous access to use the app pool identity.   You should then be able to browse your website:


    Now that’s the hard way.  There are 2 shortcuts to that process.  The first is you can download an existing CRM Organisation from Adxstudio and restore it to your SQL Server and then import the Organisation.  Then you just need to deploy the website into IIS.

    The second shortcut available is to use their PortalDeploy utility.   Here you simply create a new CRM Organisation and then run this utility.  It will import customisations and sample data into the Organisation and then deploy the website into IIS.  Much easier then what I just went through right!  Oh well, it’s good to get your hands a little dirty and really understand what’s going on. Winking smile

    If you want, you can install any number of the sample portals into your CRM organisation.  You will need any IIS website for each but the configuration data can exist side by side in your CRM system, co-existing as distinct records under distinct parent “Website” records:


    So, now that we have a portal installed what can we do with it?…


    ‘Out-of-the-box’ Portal Capabilities

    Each sample applications provides a different bundle of portal functionality.   It makes sense to pick the sample portal that has features closest to your requirements.  But the idea is you can pick and chose what functionality you want to build into your portal.   Here’s a quick run down on the functionality included in a couple of the sample portals:


    Customer Portal


    – eService:

       – Submit a Case online (including attach files) [Case created directly into CRM]

       – View current/previous Cases [queries CRM in real time]

       – Search Knowledge Base [queries CRM in real time]

       – Schedule a Service [checks availability via CRM’s Service Scheduling module]

    – Event Management:

       – View Events Calendar [queries CRM in real time]

       – Register for Event [creates a registration record directly into CRM]

    – Forums / Discussion Groups:

       – View discussions [queries CRM in real time]

       – Post a new Topic, or reply to an existing discussion [writes to CRM]

    – Product Registration [writes to CRM]

    – Web lead capture form [writes to CRM]


    Company Portal


    – About Us, Company News [read from CRM]

    – Product Listing [read from CRM]

    – Job Board / Careers Page:

        – Open Positions [read from CRM]

        – Apply for a Job [write to CRM]

        – Subscribe to Job Postings [RSS feed]

    – Web lead capture form [writes to CRM]

    – eCommerce functionality (add to cart, view cart, order enquiry)

    (not sure how far they have gone with their eCommerce functionality, there wasn’t much to see in the sample portal)


    Partner Portal


    – Home page alerts

    – Offer Opportunities to Partners [read from CRM]

    – Maintain Open Opportunities:

        – Update details

        – Record Notes

        – Maintain opportunity Contacts

        – Close as Won / Lost

    – Maintain Customer records:

       – Add/update Accounts and Contacts [writes to CRM]

    – eService

    – Forums / Discussion Groups

    – Partner Contacts Management


    Other Portals

    The names of the other sample portals suggest functionality in these areas:

    – Blogs

    – Ideas Portal

    – Conference Management

    – User Group Management

    – Intranet



    Content Management System (CMS) Capabilities

    One of the big selling points of Adxstudio Portals are their CMS capabilities.  There are a couple of aspects to this…

    Firstly, the Portal design makes use of Microsoft CRM as its data source so wherever you see records displayed in the Portal – e.g. Events, Products, Forums – these are all stored in CRM.  So if you want to promote a new Product on your Portal you simply add that record in CRM:

    image   image

    Secondly, if you log into the Portal as a user with administrator permissions you will see little “Edit” buttons pop up all over the place as you hover over elements on the web pages.   Here I have hovered over the Portal Title:


    When I click that Edit button an HTML editor pops up displaying the editable content.  I can change the text, change the font, add an image, insert a hyperlink, etc.:


    And then I just save the change to instantly update my Portal:


    And you’ll see these changes stored in CRM in the Content Snippet entity:


    Now, this is not all encompassing mind you.  You only get this in-line editing feature where it has been enabled in the underlying web page.  For example, I can edit the items highlighted in green below but not the items highlighted in yellow:



    Configurable Forms and Views

    Another very cool configuration feature Adxstudio offers is the ability to surface CRM forms and views in the portal.  The Portal can actually read form and view definitions from CRM and render these as web forms.

    Here’s an example: – the Web Lead form that appears on the Contact Us page looks like this:


    And here is the CRM form it is derived from:


    This is a new custom form added to CRM so is quite separate from the main CRM form:


    To illustrate how we can easily change the portal I quickly modify the CRM form definition:


    And the result is immediately reflected in the portal (once I flush out the caching):


    And the same is true for some of the portal views.  Here is a Case view in the Portal:


    Which is derived from this CRM view definition:


    An important caveat here though is you cannot simply create a new page in the portal and select a CRM form or view to display.  This level of configurability does not exist.  Instead you need to build that page in Visual Studio, following the portal framework development guidelines.

    So the configuration offered is more ‘after the fact’ tweaking then it is configuration-based development. 

    There you have it, a quick run down on Adxstudio’s portal offering.  I like what I have seen thus far, they take care of a lot of the architecture for you and that has got to translate to significant cost savings over straight custom development.   I’m not across the quality of their development framework or technical application architecture though so I cannot review that side of their solution.  From what I have seen though I would put this offering on the table as a potential option but with the caveat that my technical architects need to give it the once over.   A colleague of mine has implemented this several times under his old employer, and had a generally positive experience.  If you have any experience please share them below.



    Scribe Insight and Microsoft CRM 2011

    In my last post I shared my first impressions of Scribe Software’s Scribe Online product. In this post I will have a similar look at their other product: Scribe Insight

    Scribe and their Scribe Insight product have been around for 17 odd years, providing a data migration and integration toolkit for a range of CRM applications.  The product has a long history with Microsoft CRM too and is used by a vast number of partners and customers globally. 

    They offer an interesting product that offers an alternative to custom .Net scripting, fitting somewhere in between CRM’s Data Import Wizard and the likes of SSIS, BizTalk and TIBCO.  They have licensing options aimed at data migration scenarios where you buy a 60-day license at a discounted price.  And they have your normal one-off purchase + annual maintenance license options as well.

    You can try the product for free on a 30 day trial, with a 100 record limit so its not difficult to get your hands dirty if you want to.   Here’s my experience doing just that…



    The installation experience was much like any other product.  You have the Scribe Insight product to install and then each Adaptor that you wish to use.  I went ahead and installed the Microsoft CRM 2011 Adaptor.

    They have adaptors for a range of CRM and ERP products and integration approaches for other products where an adaptor is not required (such as SAP):


    (For those wondering how Scribe enables integration with SAP check out this video)

    Its these Adaptors that make Scribe attractive.  They take away the need to learn the specifics of a system’s database schema or APIs, you just have to map your data to the fields the Adaptor surfaces and it takes care of uploading your data and takes responsibility for maintaining the integrity of the database.


    Scribe Data Migration from a Staging DB into Microsoft CRM

    Ok, let’s work through a data migration scenario.  I have a source system that contains Contact and Account records and I want to load those into my lovely new Microsoft CRM system.  Each of my Contacts is parented by an Account and each Account also has a Primary Contact.  So, I’m going to have give my data migration sequencing a little thought.

    I get the data out of my source system and load it into a pair of staging tables in SQL Server.

    Staging Database: 




    Organisations (Accounts):


    Now, if my source system was Salesforce.com or Goldmine or something like that I could have used one of Scribe’s adaptors and skipped the need to extract to a staging db.  But for this exercise I will just use SQL as my source.

    I launch Scribe Workbench – this is Scribe Insight’s console for configuring migration and integration jobs.  First thing I need to do is connect to my source data, so I click the Configure Source button:


    Here I can choose the CRM adaptor I installed or a ODBC, text file or XML connection.  I choose ODBC and configure a connection string to my SQL database:


    Next, I drill into that connection and chose the specific table I want as my source.  I am going to import my Account records first so I pick the corresponding staging table:


    With the migration source defined I now move onto the destination system and the actions I want executed.  I click on Configure Steps and from a similar connection dialog I chose my destination system, in this case Microsoft Dynamics CRM 2011:


    I am prompted for my CRM connection details:

    Note: CRM On-Premise, Online and IFD are all supported


    Now at this point some advanced settings become accessible.  I’ll give you a quick look at them as in some scenarios they will be quite important:



    Next, I select my destination entity:


    And the action I require:


    Next I need to map the individual fields.  I highlight my first source field, and then the matching destination field and then I click the Data Link button:


    I repeat for each field, except for the Primary Contact field.  I will need to come back and update the field later once I have migrated the Contacts.

    Now, one of my fields requires a bit of transformation on the way through.  My Customer Ranking field is a pick list in CRM with options ‘Gold’, ‘Silver’ and ‘Bronze’ and with underlying database values of 1, 2 and 3.  But back in my source system these rankings are stored as G, S and B.  My preference in a scenario like this would be to perform this transformation in the staging database with SQL scripts rather than mucking around with transformation in a migration tool.  But you can’t always do this (e.g. when migrating directly from a source system) so let’s see how Scribe addresses on-the-fly transformations.

    Scribe’s answer is Cross Reference Keys.  From the toolbar I click the Cross Reference Keys button and then inform Scribe where it has to look to find the mapping between my source and destination values.  When you install Scribe it creates a SQL database for itself called SCRIBEINTERNAL and within that db there is a table you can use to house cross reference maps.  I select that table (“KEYCROSSREFERENCE”) and tell Scribe to look for rows labelled “Ranking”:


    Once I understood this was Scribe’s approach I jumped over to SQL Mgmt Studio and populated that mapping table with the necessary mapping for my Ranking field:


    There’s a bit more to the configuration but that gives you a feel for the process.

    Let’s do a bit more transformation.  Let’s say we want to convert the Company Name to upper case on the way through.  For this we will use a Formula.  I select the Name field and then click the Formula button:


    Note in the above screenshot the source “Name” field over on the left side of the screen has been assigned the reference “S2”.   This comes into play in the formula designer.  By default every mapping has a formula, as you will see in the screenshot below.  The formula simply says “this destination field should be populated by the source field known as S2”):


    We can easily change this formula and Scribe offers a bunch of functions for the common transformations required.  I expand the “Text” function category, select the UPPER function and see the formula automatically updated for me:


    In a similar manner we can apply a formula to the Phone number field to take only the first 6 characters:


    Ok, that’s enough fluffing around, let’s see if this will work.  Scribe has a nice little Test feature you can use to preview the migration with.  I run that, and can see how Scribe will map a specific source record.  I can click Next and Previous buttons to scroll through my source records and make sure a variety of records all appear to be mapping as expected:


    So far so good.  Let’s run the migration.  I click the Run button and very quickly Scribe reports the result of the migration:


    And we have success!  Here’s the result in CRM:



    Now that I have my Accounts successfully migrated into my CRM system I can now load my Contacts.  I save the Account migration definition (Scribe calls it a “DTS”) and then click the New button to start a new definition (you have to create a new DTS for each source entity/table). 

    I go ahead and repeat most of the same steps I just went through for Accounts.  I then get to the point where I need to figure out how to handle the Customer ID (Parent Account) field.

    Now my source system had its own unique IDs for Accounts and its this value that’s stored on each Contact in my source data to provide the link between each Contact and its parent Account.   CRM has its own unique key of course (the GUID) but to support this migration I made sure I loaded the source system’s unique key into CRM when I uploaded my Accounts.  I pushed that “Customer ID” field into the Account entity’s “Account Number” field (a spare field I had available in CRM). 

    To be honest, I find this next bit fairly confusing.  I did get it to work though so I think it might just be bad terminology.  Let me try and explain.

    The field we are trying to populate is the “Parent Customer” field in CRM.   We are going to derive the GUID required for this field via the “Customer ID” field in our staging db.  So step 1 is to create a Data Link between those 2 fields:


    But a direct data link by itself won’t work as the source system has values like “1” and “2” in the “Customer ID” field and we need to put a GUID into the destination system’s “parentcustomerid” field.   If we look at the formula behind the mapping you will see the current formula is insufficient:


    What we need to do is change this formula and have the destination field get its value from a “Cross Reference Key” rather than directly from the source field.   That means we need to create a Cross Reference Key that will translate the source system’s “Customer ID” into a CRM Account GUID.

    Now rather than referring to a cross reference table in Scribe’s Internal database like we did for the pick list mapping – we instead point Scribe at CRM for the necessary mapping.   The mapping is there for us in the Account table: the Account records I imported each have a GUID and they also have the “Customer ID” unique key from the source system sitting in the Account Number field. 

    So what I need to define is something like this:

    Mapping table: the CRM “account” table

    Source system to Mapping table link:  “Customer ID” –> “account.accountnumber”

    Mapping table to Destination system link:   “account.accountid” –> “contact.parentcustomerid”

    Alias for this mapping: ParentAccountID

    And this is how you fill in the Cross Reference Keys form to achieve the above:


    Last step is to go and correct the data map formula.  In the formula editor I click on the “Show User Variables” button and then select the Cross Reference Key alias I just defined:


    End result is the formula below:


    Having sorted that I run the migration and yay – another success!:



    We’re 2 thirds of the way there.  We’ve loaded the Accounts and Contact and linked each Contact to its parent Account.  Now, we need to go back and populate the Primary Contact field on the Account records that we omitted earlier.  We had to omit it because the Contacts didn’t exist in CRM at the point in time we were creating the Accounts.  It was a crazy chicken and egg Dr Who Timecop John Connor paradox thing.

    So, we need to re-run the Account records from our source system back through Scribe and run an update.

    To do this, I need to figure out how to get Scribe to do an update rather than an insert.  First step towards achieving that is to chose “Update” as the action required.  I do this back when I first select CRM as the destination system:


    Then I need to tell Scribe how to match each source record to its corresponding destination record.  I select the “Customer ID” field in the source system and the “accountnumber” field in the destination system and click the Lookup Link button:


    This tells Scribe that wherever these 2 fields match it should do an update. 

    Next, we create a data link between the “Primary Contact” field in the source system and the “primarycontactid” field in the destination system.  This link will of course require transformation so another Cross Reference Key will be required.

    So what I need to define is something like this:

    Mapping table: the CRM “contact” table

    Source system to Mapping table link: “Primary Contact” –> “contact.new_externalcontactref”

    Mapping table to Destination system link: “contact.contactid” –> “account.primarycontactid”

    Alias for this mapping: ContactID

    Here’s how that looks:


    Last step, just like before, is to edit the formula on the data map to refer to this mapping:


    And if we run that, yeap, it’s success again:



    Now that we have our jobs working individually lets string them together to give us just the one data migration task to execute.  One approach to this is to make use of Scribe’s command line capabilities.  Here’s a simple batch file that launches each of my 3 DTS jobs in sequence.  The “/RS” switch tells Scribe to run each job in Silent mode, preventing any screen messages from blocking processing:

    cd Program Files (x86)\Scribe
    Tworkbench "C:\Customer Migration - 1-Accounts (Insert).dts" /RS
    Tworkbench "C:\Customer Migration - 2-Contacts (Insert).dts" /RS
    Tworkbench "C:\Customer Migration - 3-Accounts (Update).dts" /RS

    Another approach is to chain the jobs together.  I open Job#1 and click on the Settings button on the toolbar.  Here I can tell Scribe to run Job#2 upon completion of Job#1.  I then open Job#2 and chain that one to Job#3.  You get the idea.  There are some additional parameters you can set as well:


    When you kick off a chained job you get presented with the option to have a proceed/cancel prompt appear between each job or to just have them run in sequence without intervention:


    There you have it, a fairly comprehensive introduction to Scribe Insight as a Data Migration tool for Microsoft CRM.  

    This blog post has gotten away from me a bit but before I finish up I just want to touch on the small variation required to create an on-going Integration rather than a one off migration…


    Scribe Insight for Integration Scenarios

    Lets create a 4th DTS job to handle the on-going synchronisation of Contact data between the staging db and CRM.  I setup the source and destination connections and then chose Update/Insert as the Operation (I want the interface to handle both new records and updates to existing records):


    I then click on the Operation tab and tell Scribe to perform an Update rather an Insert when it is able to match source field 11 (ContactID) to the destination field “new_externalcontactref”):


    Then, it’s simply a case of mapping each of the source and destination fields just like I did before for the data migration of Contacts.  And I’m done:



    If you have any experiences to share or have found this useful please leave a comment below.