Archive for the ‘ISV’ Category

Using Formulae in Dialogs: Example Lead Scoring

February 7, 2011 Leave a comment

When using Microsoft Dynamics CRM have you ever wondered how to create and use formulae in Dialogs? Yes this is possible using two features supported in Dialog Processes: Variables and Assign Value step. If you look at the Dialog designer page, you will see a section for creating Variables as shown in figure below.


You can add Variables with default values using this step. The Variables can be later used to create formulae in your Dialog. Three types of Variables are supported by Dialog: Single Line of Text, Whole Numbers and Floating point Numbers. Once you click on Add you will get a Dialog for defining the variable as shown in below figure.


Once the Variable is defined it appears as below figure on the designer.


You can Edit or Delete the Variables after it is defined. You can modify the name and default value of the Variables. However you cannot modify the data type of the Variables once defined. This limitation is to avoid data type mismatch errors. Suppose if some variable is defined as floating point number and used to create formulae in Dialog Process and later the variable’s data type is changed to Text then the steps using the Variables for multiplication or addition would become invalid.

Now once your Variables are defined, you can use them to create a formula using Assign Value step which is available in Add Step menu on designer.


Once you click the menu option you will see Assign Value step on the designer where you can fill the name of this step. You can use Set Properties button to create the formula. The step looks like below figure on designer.


Once you click the Set Properties button a formula definition Dialog will appear. The Variables defined in the Dialog will automatically appear in the Name dropdown.


Assign Value step supports different kind of Operators for all data types supported. For example; following table illustrate the operators supported for different data types.

Data Type Operators
Single Line of Text Set to, Append with and Clear
Whole Number Set to, Increment by, Decrement by, Multiply by and Clear
Floating point Number Set to, Increment by, Decrement by, Multiply by and Clear

Let us now develop a Dialog for Lead Qualification. Suppose your company is running some marketing campaign through phone call. Assumption is that the phone call records already exist with Regarding field as Lead and Recipient also as Lead to whom call has to be made. The marketing executive is running Dialog to achieve the objective. For this we need to author a Dialog. We will create a Dialog for Phone Call entity so that while making an outbound call, the Marketing executive directly launch the Dialog from Phone call page and start the Dialog for conversing at phone with the probable Opportunity. In order to simplify the example we will assume that the customer will be asked 2-3 questions in order to qualify the lead as Opportunity or lost Lead. First we have to plan the Dialog. For simplicity, we have very limited set of questions to qualify the Lead as shown in below flowchart.


Step 1 of this flowchart can be implemented with Assign Value step where the name variable is Set To regarding Lead’s First name data slug which is illustrated in one of the above figures. The variable initialized with First Name can be used in a Prompt greeting customer as shown below.


Now you have to check if the customer is further interested in continuing the talk. If yes then we will increment the value of current_score by 5 as per flow chart shown above and continue with other steps as per flow chart in the if-then block. To increment the value of current_score by 5 we would do following.

First select the variable ‘current_score’ from name dropdown, ‘Operator’ as ‘Increment By’ , then type ’5.0’ in the ‘Default value’ text box and finally click Ok on the Form Assistant.


In case user is not interested then we would deduct the 10 points from the current score as shown below.


Now you get how to create formulae in your Dialog. The final Dialog will look something like shown in below figure.


In above Dialog, you will notice that you can change the status of Regarding(Lead) to Qualified however the Process (Dialog or Workflow both) does not provide option to convert this Lead to Opportunity or Account. That can be achieved by placing two Create Record steps, one to create Account with the Lead’s company’s name and other to create an Opportunity with the same topic as that of the Lead as shown in following figures.


Create Account step would be configured as shown in below figure and the same account can be used as potential customer for the Opportunity created due to Lead qualification.


Obviously the Created Opportunity should have same topic and customer created in previous steps which is simple as shown in next figure which you get on clicking Set Properties button of Create Record step.


Finally test the Dialog after activating it to verify that if the Lead is qualified the corresponding Account and Opportunity are created.


Ramesh Pandey


Custom Charting Capabilities in Microsoft Dynamics CRM 2011

February 4, 2011 2 comments

Microsoft Dynamics CRM 2011 comes with in-built visual analytics. You can create charts to view aggregations of your CRM data over various dimensions, providing nice visual and interactive tools to analyze data. But, there is more to it.

It also provides you with some space alongside the records-grid. While this space is generally used for the built-in charts, it can potentially be used for well, anything. CRM 2011 also goes a long way in defining an extensibility story – a way to deploy your own custom pages on the server. Yes, you’ve got it right – I am referring to web resources. Would it not be great if you could get your web resource to show up alongside the grid? Well, that is precisely what we let you do.

Create your own custom chart

Let us start by creating a simple “Hello World” page, and making it show up alongside the Accounts grid.

1. Open your favorite text-editor, and type in the following HTML:



    <title>Hello World Page</title>



  <div style="height:49%" ></div>

  <div style="text-align:center">

  <b>A 'Hello World' web resource for the Accounts grid</b>




This is an elementary HTML page that shows a line of bold text centered horizontally as well as vertically.

2. Create an HTML Web Resource on CRM Server by uploading the above page. In case you are not familiar with web resources, you will need to do the following:

a. Navigate to Settings Customizations. Click on Customize the System to open up the Default Solution.

b. Click on New → Web Resource on the grid tool-bar to launch the Web Resource form.

c. Upload the file created in (1) above. Give the web resource a name, say new_helloWorld.

d. Click Save.


3. Now we will create a custom chart that uses this web resource. We can do so easily by using the Import Chart feature:

a. Navigate to Accounts grid and open the chart pane.

b. Click on Import Chart in the Charts tab of the ribbon.


Here’s the XML we want to import:



  <name>Hello World</name>



Note that the XML definition above contains a reference to the web resource created in (2).

Once the chart is successfully imported, we will see the following:


That was pretty easy, wasn’t it? But that was not a very useful chart though. Let us move on to something better.

Multiple charts sharing the same web resource

Consider a hypothetical problem. Let us say, I have accounts spread across different countries in the world and I would like to see their locations on a map beside the accounts grid. I would not want one map cluttered with all the accounts – rather I would want to focus on one country/region at a time, and see accounts located in only that country. To solve this problem, I would want to create different charts – each centering the map on a particular country (with a zoom factor according to the size of the country) and displaying only accounts from that country.

It would be possible to create multiple web resources addressing different map regions – however, that is not a very scalable solution. Creation of a web resource is generally a system customizer’s job – we would not want a system-customization for every new country/region that we would want to include.

Instead, what we will do is create a single ‘parameterized’ web resource. The web resource will contain the general logic for plotting accounts on a map – however, this logic would be driven by certain parameters which would be provided at runtime by the chart that is being rendered.

How does a web resource know which chart is being rendered?

If you have worked with web resources placed on forms/dashboards, you would be aware of the data query-string parameter. This parameter essentially lets the same web resource render differently in different contexts – you specify the value of this parameter (if required) at the time of adding the web resource to a particular form/dashboard.

For web resources rendering as charts, we do not let you explicitly specify a value for this parameter. Instead this parameter is always set to (a URL-encoded form of) the following format:

visid=<Visualization ID>&vistype=<Visualization Type>&viewid=<View ID>&viewtype=<View Type>

Therefore, we can get the ID and type of the chart being rendered by parsing the data query-string parameter.

Data and Presentation Descriptions of the Chart

Both System and User Charts have the following two fields.

  • DataDescription: This defines the data that is to be shown in the chart.
  • PresentationDescription: This defines the presentation and formatting of the chart.

For charts that use the in-built charting capabilities of CRM 2011, the values of the above fields have well-defined syntax and semantics. For our custom set of charts, we will continue using these fields to represent the data and presentation properties of the chart – however, we will define our own syntax and semantics for these fields based on our needs.

  • DataDescription: The country/region whose accounts are to be shown on the map.
  • PresentationDescription: This will need to convey two things: the coordinates of the center of the map, and the zoom factor. Let this be a comma-separated list of three numbers – a latitude, a longitude, and a zoom factor.

So here’s the basic idea – the web resource first figures out which chart is being rendered, then it reads the data and presentation descriptions of that chart, and parses them appropriately to extract the parameters that it needs to render the map at runtime.

Going into more detail, we will be doing the following in sequence.

  • Parse the query-string to extract the value of the data parameter. Parse this value again to obtain the ID and type of the visualization being rendered.
  • Retrieve DataDescription and PresentationDescription fields of the visualization using CRM oData end-point.
  • Parse the PresentationDescription to obtain the values of latitude, longitude and zoom-factor. Use Bing Map APIs to load a map with these values.
  • Get the country/region specified in DataDescription. Retrieve all Accounts from this country/region by making a GET request to a CRM oData URI with appropriate filters.
  • Geocode each of the retrieved account locations using Bing Map APIs, and plot them on the map.

Here’s one way you may write the web resource.



    <title>Accounts on Bing Maps</title>

    <script type="text/javascript" src=""></script>

    <script type="text/javascript" src=""></script>

    <script type="text/javascript" src="ClientGlobalContext.js.aspx"></script>


    <script type="text/javascript">

        var map;


        // Function to construct key-value pairs from a query string.

        function getParametersFromQuery(query) {

            var parametersDictionary = new Array();

            var parameters = query.split('&');

            for (var i = 0; i < parameters.length; i++) {

                var keyAndValue = parameters[i].split('=');

                parametersDictionary[unescape(keyAndValue[0])] = unescape(keyAndValue[1]);


            return parametersDictionary;



        // Function that makes a GET request to the CRM REST end-point, and invokes a callback with the results.

        function retrieveFromCrmRestApi(url, callback) {


                type: "GET",

                url: GetGlobalContext().getServerUrl() + "/XRMServices/2011/OrganizationData.svc" + url,

                contentType: "application/json; charset=utf-8",

                dataType: "json",

                success: function (data) {






        // Function that retrieves the corresponding CRM chart, and invokes the callback when successful.

        function loadChartFromCrm(callback) {

            var parameters = getParametersFromQuery(;

            parameters = getParametersFromQuery(parameters["data"]);


            var id = parameters["visid"].substr(1, 36);

            var type = parameters["vistype"];

            var url = (type == "1111" ? "/SavedQueryVisualizationSet" : "/UserQueryVisualizationSet")

                + "(guid'" + id + "')?$select=DataDescription,PresentationDescription";

            retrieveFromCrmRestApi(url, callback);



        var locations = new Array();

        function plotAccountLocations(accounts) {

            if (accounts.length > 0) {

                var account = accounts.pop();

                var address = account.Address1_City + ', ' + account.Address1_Country;

                map.Find(null, address, null, null, 0, 1, false, false, false, false,

                    function (shapeLayer, results, places, moreResults, error) {

                        if (null != places && places.length > 0) {

                            var place = places[0];

                            var newShape = new VEShape(VEShapeType.Pushpin, place.LatLong);





                        // When we have found (or not found) the current account,

                        // recursively call the same function to find the next one.




            else {

                var shapeLayer = new VEShapeLayer();






        function loadAccountsFromCrm(dataDescription) {

            var url = "/AccountSet?$select=Address1_Country,Address1_City,Name";

            if (null != dataDescription) {

                // Filter accounts based on country specified in data description.

                url += "&$filter=Address1_Country eq '" + dataDescription + "'";



                function (data) {

                    var results = data["results"];

                    var accounts = new Array();

                    for (resultKey in results) {



                    // Once accounts are retrieved from CRM Server, plot their locations on map.






        function getMap(presentationDescription) {

            // Set center and zoom defaults.

            var center = null;

            var zoom = 4;

            if (null != presentationDescription) {

                // Calculate map-center and zoom from the presentation description.

                var arguments = presentationDescription.split(',');

                if (arguments.length > 1) {

                    center = new VELatLong(arguments[0], arguments[1]);


                if (arguments.length > 2) {

                    zoom = arguments[2];



            map = new VEMap("map");

            map.LoadMap(center, zoom, VEMapStyle.Road, true, VEMapMode.Mode2D, false, 0);

            window.onresize = function (event) { map.Resize(document.body.clientWidth, document.body.clientHeight); };




        function loadMap() {

            // First, get the chart object from CRM Server.


                function (chart) {

                    // Once we have retrieved the chart, format the map based on the chart's presentation description.


                    // Get Accounts from CRM Server based on the chart's data description, and plot them on the map.







<body onload="loadMap()">

    <div id="map"></div>



The code-snippet above uses a bunch of asynchronous callbacks – however, the basic sequence of invocation of functions is the following.

  • loadMap: Handler for the body.onload event.
  • loadChartFromCrm: Retrieve DataDescription and PresentationDescription of the current chart from the CRM 2011 oData end-point. Note the double-call to a function that parses a query-string.

var parameters = getParametersFromQuery(; parameters = getParametersFromQuery(parameters[“data”]);

[The value of the “data” parameter is essentially a query-string within a query-string.]

  • getMap: Use Bing Map APIs to load a map with the center and zoom-factor specified in presentation-description.
  • loadAccountsFromCrm: Retrieve account records from CRM 2011 oData end-point, filtered by the country specified in data-description.
  • plotAccountLocations: Add push-pins on the map to represent each of the account records retrieved above.

Now let us go ahead and create a web resource on CRM Server with the above HTML. Let us call it new_accountsOnMap. It would now be pretty simple to create various charts using it. Let us start with Accounts in the U.S.

Import the following chart Xml:



  <name>Account Locations in U.S.</name>





This is what you will see:



Similarly, the following chart Xml gives you Accounts in India.



  <name>Account Locations in India</name>






Essentially, you have created your own parallel charting infrastructure for CRM 2011 that others can use to create system or user charts as appropriate. Like any other chart, such charts will automatically show up in the chart selector beside the records grid. And yes, they can also be placed on dashboards if so desired.

I have made available for you a Microsoft Dynamics CRM 2011 Managed solution containing the web resource and two system charts based on it.


Arko Nasipuri

Microsoft Dynamics CRM 2011 Fiscal Settings and Goal Management

January 19, 2011 Leave a comment

Microsoft Dynamics CRM 4.0 had the capability of defining the fiscal setting for an organization but there was a limitation that this could only be defined once and cannot be modified thereafter. Primarily the fiscal settings were used in CRM 4.0 to set salesperson quotas. In Microsoft Dynamics CRM 2011 the fiscal settings feature is revamped and it now provides user the capability of modifying fiscal settings multiple times. With deprecation of the Quotas in CRM 2011 Goal Management is one of the primary consumers for fiscal settings. This blog post explains how the fiscal periods for the organization can be set and how it interacts with the goal management.

How to configure the fiscal settings for organization

Fiscal settings can be configured by navigating to Settings-> Business Management -> Fiscal Year Settings. The following dialogue provides the options for setting values for fiscal start date, fiscal period type and various display formats. Note that as opposed to CRM 4.0 where the fiscal settings were absent in an organization until set, CRM 2011 defaults fiscal period to quarterly starting January 1. Also the various input options for the fiscal settings are now context dependent which prevents user from entering conflicting values.


Fig: CRM 2011 Fiscal setting dialogue with defaulted values 

Following are the various fields required for organization fiscal settings:

  • Start Date: When the fiscal year is going to start from. This date typically would mark the start of the financial year in sales organization. 
  • Fiscal Period Template: What is the fiscal period type? Possible options are Annually, Semiannually, Quarterly, Monthly, 4- Week period. Once the start date and period type is defined the system can calculate the start and end dates of fiscal periods for various fiscal years.

Fiscal Display options help user to define the display format for various fiscal settings. For example consider the following monthly fiscal settings with Start Date as April 10. Note that we have selected the “Name Based on” value to “End Date” and “Fiscal Period” drop down has the options specific toMonthly fiscal period template.


Fig: Fiscal dialogue having Monthly fiscal period starting 10th April.

Goals and Fiscal settings

Fiscal periods are tied closely to goal management. Sales people usually have the quarterly sales targets, Customer service representatives need to achieve their goals for the case resolutions and so on. When the new Goal form is launched, Goal is defaulted to the current fiscal period automatically. Because for current fiscal period there are fixed start and end dates, the goal start and end dates are also displayed in read only mode.

For example if we have the monthly fiscal settings are per the fig above and user clicks new goal form, following fiscal values are defaulted on goal form (on 31 Dec 2010)


Fig: New goal form defaulting dates to current fiscal period.

FiscalPeriod: December (Based on fiscal period display value “Month Name”)

FiscalYear: FY2011(Based on Prefix:FY, YearFormat:YYYY, NameBasedOn:EndDate(on 31 Dec 2010))

From (Goal Start Date): 12/10/2010 (Based on 4/10/2010 fiscal start date)

To (Goal End Date): 1/9/2010 (Based on Goal Start Date above and monthly fiscal period type)

Updating Fiscal settings for organization

Fiscal settings in MSCRM 2011 can be updated multiple times by using the same fiscal dialogue shown above and hence provides the supports for scenarios arising from mergers/acquisitions , partnership changes, financial restructuring etc. There can be goals existing in the CRM system which are already using the old fiscal settings. To better handle situations arising from fiscal changes which can lead to data inconsistency, MSCRM goal management offers the notification and realignment mechanism. For following examples consider the goal created with fiscal settings for the current (default) fiscal period. FiscalPeriod: December, FiscalYear: FY2011, From (Goal Start Date): 12/10/2010, To (Goal End Date): 1/9/2010.

Case 1: Fiscal period template remains same but the start dates changes:

CRM system administrator moves the fiscal start date ahead by 5 days i.e. from 4/10/2010 to 4/15/2010. In this case the fiscal period template remains the same but the start date has changed. Data in the goal record still retains the old values for all fiscal and date fields. When this goal record is opened the following warning message is displayed on the goal form to notify the fiscal settings change and provides user the option to realign.

Message: “The fiscal settings of your organization have changed since the time this goal was changed. You might want to realign to the new fiscal settings. ”


Fig: Fiscal change warning when the fiscal start date is changed.

Note that the “Align with Fiscal Period” ribbon button is now enabled for this goal record. Clicking this updates the new start and end dates for the goal which is now according to the current (new) fiscal settings. Realignment is optional for the goal manager based on the business need. Note that even after realignment goal fiscal period and year still remain same as there is only the change in the date. Also the warning message is now gone.


Fig: Goal form after the realigning the fiscal period.

Case 2: Fiscal period template changes:

CRM system administrator changes the fiscal period type from monthly to quarterly (3 months). In this case also the existing data is retained as is and there is a warning message on the goal.

Message: “The fiscal settings of your organization have changed since the time this goal was changed. You might want to realign to the new fiscal settings. ”


The goal manager on seeing this warning can either choose to switch to the new quarterly fiscal settings by changing the fiscal period to quarterly as shown in the above figure. Else he can convert this goal into the custom period goal by clicking on the “Goal Period Type” radio button and can retain the goal start and end date and also get rid of the fiscal change warning.

Fiscal settings upgrade

If the fiscal settings are configured for an organization in CRM 4.0 these are retained in CRM 2011 as is, otherwise the fiscal settings are defaulted to quarterly with January 1 as the start date. Additionally the existing CRM 4.0 quotas are also upgraded to CRM 2011 but the new quotas cannot be created as these are deprecated in favor of goal management.


Hemant Gaur

Cloud-Based Version of Microsoft Dynamics CRM 2011 Now Available Worldwide

January 18, 2011 Leave a comment

Today, Steve Ballmer and Kirill Tatarinov unveiled the new Microsoft Dynamics CRM Online service to an audience of customers and partners at a launch event in Redmond, WA. With this release, businesses all over the world can sign-up for this breakthrough CRM solution in 40 markets and 41 languages, at a promotional price of $34 per user per month.

As you have heard the Microsoft Dynamics CRM team say, the focus for Microsoft Dynamics CRM 2011 is to deliver the “Power of Productivity” to customers, through familiar, intelligent and connected experiences. This was a key aspect highlighted today by customers such as Magma Design Automation, Ceridian Corp. and Sandri who are already benefiting from what Microsoft Dynamics CRM 2011 has to offer.

Some of the things, among others, people are excited about here include:

  • The familiar Microsoft Office 2010 user interface experience, which is adaptive by job task and role within one’s organization, helps people complete and take action on work activities with ease.
  • Enhanced collaboration across workgroups and teams as Microsoft Dynamics CRM 2011 provides users with more effective team management and collaboration through shared data access and SharePoint Workspace for collaborating on work activities and documents.
  • Real-time business and personal dashboards that allow each user to quickly create visual and immersive business intelligence dashboards to help envision their work activities.
  • And especially for developers, deep configuration and customization with full .NET development in Windows Azure that provides rich customization and integration for business applications.

The excitement for Microsoft Dynamics CRM 2011 just continues to grow amongst customers, partners and the overall CRM community. In the upcoming months, expect the Microsoft Dynamics CRM team to host virtual and in-person launch events around the world as they introduce the new product features and functionality. The first event kicks-off at 9:00 AM Pacific Time on January 20, 2011, and you can register to attend this and other scheduled events at: To experience the new online service, register for a free trial at

The full press release issued today is located here and an interview with Brad Wilson, general manager, Microsoft Dynamics Product Management Group and Craig Unger, general manager, Microsoft Dynamics Research and Development is located here.


Bill Patterson

Update Rollup 15 for Microsoft Dynamics CRM 4.0

January 14, 2011 Leave a comment

The Microsoft Dynamics CRM Sustained Engineering (SE) team released Microsoft Dynamics CRM 4.0 Update Rollup 15 on Thursday, January 13, 2011.

The links below will take you to the necessary information about Update Rollup 15.

General details about Update Rollup 15


Update Rollup 15 is cumulative. However, the Update Rollup 15 CRM Client and Data Migration Client packages require Update Rollup 7 to be installed. For all other CRM components, you do not need to install any previous Update Rollups prior to Update Rollup 15.

The Update Rollup 15 download contains updates for the 40 supported Language Packs. Prior to installing the Update Rollup 15 Language Pack, you must install the original Language Pack. If you have Language Packs installed, you should:

1. Download the Update Rollup 15 Language Pack

2. Install the Update Rollup 15 Language Pack

3. De-provision the Language Pack

4. Re-provision the Language Pack

  • Information about how to avoid reboots when installing the CRM Outlook Client can be found in the Update Rollup 4 blog posting.
  • The Update Rollup 15 Client can be deployed before the server is upgraded to Update Rollup 15.
  • Steps to make the Update Rollup 15 Client available via AutoUpdate can be found in theUpdate Rollup 4 blog posting. The Link and Patch IDs can be found in KB article 2449283.
  • Each update rollup could have fixes that require manual configuration. Please see the “Hotfixes and updates that you have to enable or configure manually” section in KB article2449283.

How to get support for Update Rollup 15

For support, please contact Microsoft Product Support. For a complete list of Microsoft Product Support Services telephone numbers and information about support costs, visit the following Microsoft Web site:;[LN];CNTACTMS.

Note: In special cases, charges ordinarily incurred for support calls may be canceled if a Microsoft Support Professional determines that a specific update will resolve your problem. The usual support costs will apply to additional support questions and issues that do not qualify for the specific update in question.


Matt Brown

Sure Step: the guarantee of successful Microsoft Dynamics project implementation

January 11, 2011 Leave a comment

Lately, I attended a training session, concerning the Microsoft Dynamics project management methodology: Surestep. Here I share with you some insights and best practices to follow during Microsoft Dynamics project implementation.

The six phases of Sure Step methodology are:

–          Diagnostic

–          Analysis

–          Design

–          Development

–          Deployment

–          Operation

Depending on the project type and size, some phases could be simplified or even ignored.

NOTE: Surestep methodology covers project management for all the following Microsoft Dynamics solutions:

–          AX (ERP solution, formerly Axapta)

–          GP (Accounting solution, formerly Great Plains)

–          NAV (ERP solution, Navision)

–          SL (Accounting solution, formerly Somolon)

–          CRM (Client Relationship Management solution)

–          CRM Online (CRM solution in cloud)

Each phase is composed of activities, ends at a milestone and requires deliverables.


Description of the activities, milestones and deliverables of the phases:

–          Diagnostic

This phase happens before the signature of the project. We can treat it as a part of the prospection. The activities to do are:

  • Prepare the RFI (Request For Information)
  • Prepare the RFQ (Request For Quote)
  • Prepare the accelerators if necessary. Accelerator means the additional actions to do to accelerate the sales cycle. It contains:
    • Requirements and Process Review OR Upgrade Assessment
    • Fit Gap Solution Blueprint
    • Architecture Assessment OR/AND Scoping Assessment
    • Proof of Concept OR Business Case
    • Sales proposal (License and Service)
    • Launch meeting

Milestone: Sales proposal signed

–          Analysis

Main tasks are:

  • Prepare the project planning
  • Analyze the potential risks
  • Plan the communication
  • Train the key users
  • Analyze the Fil&Gap (if it was not done in the accelerator)

Milestone: FRD (Functional Requirement Document) signed

–          Design

The objective of this phase is mainly to terminate the analysis, to conclude the developments to do and the startup of the configuration. So the main actions contain:

  • Continue to plan the project
  • Prepare the FDD-Fit (Functional Design Document) and the FDD-Gap
  • Prepare the TDD (Technical Design Document) and SDD (Solution Design Document)
  • Prepare the integration and interface documents
  • Startup of the configurations
  • Prepare the data migration

NOTE: the data migration should be started at this step. In the dynamics projects, almost all the failure or delay of the data migration is caused by the lateness of preparation.

Milestone: FDD, TDD, SDD confirmation by the client

–          Development

In my understanding, all the 3 previous phases are to develop solution which is the most adaptable to the clients’ requirements. It contains the following actions:

  • Plan the rest part of the project
  • Develop the specific requirements
  • Develop the integration and the interface
  • Finalize the configurations
  • Prepare the training documents
  • Do the unit test and the integration test
  • Basic test and prepare the pre-production

Milestone: Test validated by the client

–          Deployment

Main actions contain:

  • Review the project planning
  • Train the final users
  • Prepare the Go Live of the production
  • Migrate the data
  • Acceptation test

Milestone: Go Live of the production

Until this phase, the GoOnline of the production means the termination of the implementation. The final users begin to use the solution. But attention, there is left the last phase, which is also important and could be a good opportunity and should not be forgotten: Operation.

–          Operation

In fact in this phase, the sales people will be integrated to propose the Support.

The main actions contain:

  • Review the project planning
  • Support post Go Live
  • Step into the Support
  • Optimize the solution
  • Review the modifications during the implementation
  • Finalize the project 

Obviously, besides the project type and project size, many unexpected factors can impact the project management, such as the culture, the personality of the client and the project manager, and so on.

Our objective is to follow this structure, and add or remove some actions to best adapt the different projects.


Chao Zheng

Accessibility in CRM 2011 lists

January 11, 2011 Leave a comment

Accessibility-compliance is one of the key new features of Microsoft Dynamics CRM 2011. We on the CRM team believe that no person should be denied from using the product even if one is visually challenged. Accessibility in CRM is useful not only to the visually challenged users but also to the user who prefers keyboard to mouse.

You can do almost everything in CRM 2011 lists quickly and easily using just a keyboard. For the visually challenged, using CRM 2011 lists with Job Access with Speech (JAWS) is a breeze. Also for them, we have also made enhancements to ensure that CRM lists display well in the high-contrast mode.


Sample Accounts list in CRM 2011

Compatible Screenreaders

Accessibility features in CRM 2011 work well in tandem with JAWS 11, the most widely-used screenreader in the world. We have also tested it on Window-Eyes, another popular screenreader.

Let us see how we can perform some of the common list operations in CRM 2011 using JAWS and keyboard.


Sorting is one of the most commonly used functions in a list of records. Just follow the 2 simple steps below to sort on your favourite column using JAWS

1. Perform one of these actions:

    a. Press Ctrl+Insert+T to list all the tables in the current page. Scroll through the list and choose the table with the following title: From each column header, you can sort and filter the records.


    b. Press Tab repeatedly until you get to the list header. When you reach the “Select/Clear All” checkbox, you are inside the list header.

2. Press Tab repeatedly until you reach the desired column in the header table. E.g. – To sort on Address 1: City (the 3rd column in the list), press TAB thrice. You will then hear “Table Nesting Level1 Column1 Row1 Address1: City link”.

3. Now press Enter to alphabetically sort the list based on Address 1: City. Press Enter again to sort it in reverse alphabetical order.

Similarly you can sort a list on any sortable column in the current view in increasing/decreasing order using JAWS. Simple, isn’t it?


If sorting does not solve it for you and you need more advanced ways to filter your records, the Column Level Filtering feature in CRM is the way to go.

1. Tab to the link which reads “Filter button” Press Enter to enable filters on the list.

2. Now reach the list header using action 1 given in the sorting section given above.

3. To reach the desired column, use action 2 from the sorting section.

4. Press TAB again to go to the filter link. JAWS should read “Table Nesting Level 2 Column1 Row1 – ‘No filter applied’ link”

5. Once on the link, press Enter to open the filter menu. The filter menu has some common filters and a custom filter option as well.

6. Goto the desired filter option and press Enter to apply it on the list.

7. If you select Custom Filter, then the Custom Filters menu will open up which can be used to apply more powerful filters.

Opening primary/related records from the list

In CRM 2011 lists, all the primary field and lookup columns are hyperlinks which enables a JAWS user them to be able to open them.

1. Press Ctrl+Insert+T to list all tables in the current page.

2. Scroll through the list and select the table which reads “This list contains x Account records” where x is the number of records in the list. The focus moves to the table which contains the list of records.

3. Press TAB repeatedly until you get to the desired record. E.g. If you want to open the account with the name “Advanced Components”, press TAB until JAWS reads “Advanced Components Link

4. Press Enter to open the “Advanced Components” form.

Reading the contents of the list

Reading the contents of the list using JAWS is easier than ever before since the row/column headings are now read along with the value of a cell.

1. Goto the table which contains the list using the steps 2&3 described in the above section.

2. Use Ctrl+Alt+Arrow keys to navigate around the list.

3. Move horizontally to read the different fields of a record. When moving horizontally, the field name (column title) is read before the actual value of the cell.

4. Move vertically to read the same field from the previous/next record in the grid. When moving vertically, the record name (row title) is read before the actual value of the cell.

Selecting one or more records in the list

Selecting non-contiguous records in made easy in CRM 2011 lists with the introduction of row checkboxes.

1. Goto the table which contains the list using the steps 2&3 described two sections above.

2. To select the “Advanced Components” record, go to the checkbox corresponding to this record.

    a. Press Tab repeatedly until JAWS reads “Advanced Components, Checkbox unchecked”

    b. Press Space to check the checkbox thus selecting the record

3. Repeat the above step to select as many records as you want.

4. Once you have selected the desired record(s), you can perform edit, delete, share, assign and other record actions.

5. If you have selected multiple records, you can perform bulk operations on them like bulk delete, share, etc.

6. You can use the step 2 also to unselect a selected record.

Bye-bye Ctrl-Click!

We hope that this blog helps a bit in fulfilling our commitment to make CRM available everyone!


Aditya Agrawal