Archive for the ‘Microsoft Dynamics CRM Online’ Category

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

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

Integrating Microsoft Dynamics CRM via App Fabric (using SAML token)

December 13, 2010 Leave a comment

In an earlier article called Integrating Microsoft Dynamics CRM via App Fabric, we saw how we can integrate Microsoft Dynamics CRM 2011 with an external application via the Windows Azure platform App Fabric. We converted a classical pull model of integration to a more efficient push model. The data was queried only when needed.

I would like to draw your attention to the authentication mechanism that was employed to authenticate with the Access Control Service (ACS). We used the management key approach and this implicitly made assumption that the key can be shared between CRM system and the owner of the syncing module. In many of the integration scenarios the CRM system and the external application (including the syncing module) may not be owned by the same business. The sharing of the ACS account’s management key is not possible.

Editor’s Note: For more overview material on AppFabric’s ACS there is an excellent article here: Access Control in the Cloud: Windows Azure AppFabric’s ACS.

Consider the scenario where an ISV has setup an endpoint on the App Fabric to which they want other CRM systems, its customers, to post data so that it can provide appropriate service. The ISV owns the Azure account and the rules on the ACS. It needs to enable its customer’s CRM systems to be able to post data to its endpoint and also be able to easily control and filter who is allowed to do so.

ACS provides the use of SAML tokens to authenticate and this is a good alternative for our need. Our goal is to allow CRM system to authenticate via SAML token and also allow ISV to configure rules in ACS based on the token’s issuer signature.

We start by first procuring an X509 certificate. You can use a self signed certificate too. Generate both private (.pfx) and public (.cer) certificate parts of the certificate. Add the .pfx certificate to the certificate store of the Async box, as we are running the plug-in asynchronously, under Computer account -> Local computer -> Personal -> Certificates.

Update the RetrieveAuthBehavior() show in the earlier blog sample with the code below.

private TransportClientEndpointBehavior RetrieveAuthBehavior() { // Behavior TransportClientEndpointBehavior behavior = new TransportClientEndpointBehavior(); behavior.CredentialType = TransportClientCredentialType.Saml; behavior.Credentials.Saml.SamlToken = GetTokenString(); return behavior; } private string GetTokenString() { // Generate Saml assertions.. string issuerName = "localhost"; Saml2NameIdentifier saml2NameIdentifier = new Saml2NameIdentifier(issuerName); // this is the issuer name. Saml2Assertion saml2Assertion = new Saml2Assertion(saml2NameIdentifier); Uri acsScope = ServiceBusEnvironment.CreateAccessControlUri(SolutionName); saml2Assertion.Conditions = new Saml2Conditions(); saml2Assertion.Conditions.AudienceRestrictions.Add( new Saml2AudienceRestriction(acsScope)); // this is the ACS uri. saml2Assertion.Conditions.NotOnOrAfter = DateTime.UtcNow.AddHours(1); saml2Assertion.Conditions.NotBefore = DateTime.UtcNow.AddHours(-1); X509Certificate2 localCert = RetrieveCertificate(StoreLocation.LocalMachine, StoreName.My, X509FindType.FindBySubjectName, issuerName); if (!localCert.HasPrivateKey) { throw new InvalidPluginExecutionException("Certificate should have private key."); } saml2Assertion.SigningCredentials = new X509SigningCredentials(localCert); // Add organization assertion. saml2Assertion.Statements.Add( new Saml2AttributeStatement( new Saml2Attribute("", "Org1"))); // The submitter should always be a bearer. saml2Assertion.Subject = new Saml2Subject(new Saml2SubjectConfirmation(Saml2Constants.ConfirmationMethods.Bearer)); // Wrap it into a security token. Saml2SecurityTokenHandler tokenHandler = new Saml2SecurityTokenHandler(); Saml2SecurityToken securityToken = new Saml2SecurityToken(saml2Assertion); // Serialize the security token. StringBuilder sb = new StringBuilder(); using (XmlWriter writer = XmlTextWriter.Create(new StringWriter(sb, CultureInfo.InvariantCulture))) { tokenHandler.WriteToken(writer, securityToken); writer.Close(); } return sb.ToString(); }

The code generates a self-signed token to authenticate to the app fabric. We could add any claims to the generated token, for example, adding the organization claim would be quite useful.

Configuring new rules in the App fabric

Since we are trying to authenticate via the signed SAML token, we would need to add the issuer and rules into the ACS to identify the token and issue “Send” claim in response. I am using the acm.exe that ships with the App Fabric sdk to configure rules in ACS.

First create the issuer entry in ACS-SB.

>Acm.exe create issuer -name:LocalhostIssuer -issuername:localhost -certfile:localhost.cer -algorithm:X509

Object created successfully (ID:’iss_334389048b872a533002b34d73f8c29fd09efc50′)

Next retrieve the base scope of the service bus: >Acm.exe getall scope

Use the scope id and issuer id to create the following rule.

>Acm.exe create rule -scopeid:scp_b693af91ede5d4767c56ef3df8de8548784e51cb -inclaimissuerid:iss_334389048b872a533002b34d73f8c29fd09efc50 -inclaimtype:Issuer -inclaimvalue:localhost -outclaimvalue:Send -name:RuleSend

The rule basically says to output “Send” claim when the input claim (any claim) is signed by the specific issuer

With the above rule in place any organization in the customers CRM system will be allowed to post. If the CRM system is multi tenant, i.e. with multiple organizations, we can make the rule more granular to allow only certain organizations.

Rule using organization claim.

>Acm.exe create rule -scopeid:scp_b693af91ede5d4767c56ef3df8de8548784e51cb -inclaimissuerid:iss_334389048b872a533002b34d73f8c29fd09efc50 -inclaimtype: -inclaimvalue:Org1 -outclaimvalue:Send -name:RuleOrgSend


Shashi Ranjan

Integrating Microsoft Dynamics CRM via App Fabric

December 13, 2010 Leave a comment

I am excited about the Microsoft’s Azure initiative. App Fabric is a part of Window Azure platform and as indicated at, makes it simpler to connect cloud and on-premise applications. It also simplifies the on-premise to on-premise application connection separated by firewalls and enables management of such interaction via the configurable rules of Access Control Service (ACS).

Consider a simple application which syncs accounts created in CRM system with another system. This application works in a classical polling model, where it polls CRM every so often for any newly added accounts. The polling interval may differ based on the other system requirements on how current the data needs to be represented. The higher the urgency, more the load it is going to put on CRM by repeatedly running the search query for new accounts.

It would be nice if the syncing module had some mechanism of being notified if a new account has been created, classical push model, which will allow it to only query CRM if needed and better if it can be notified with all the account details it needs to sync between the two systems. Lets try to see how we can alleviate the need of continuous polling with still maintaining the same data consistency between the two systems.


We have a functional CRM 4.0 system with App Fabric SDK installed, an account with the Windows Azure platform App Fabric and a program that polls CRM via the SDK to sync data every, say 15 minutes.

Our goal is to enhance the polling code to run search query against CRM only when new accounts are created and cut down on blind polling behavior.

To achieve our goals, we will write a plug-in in CRM that would post to the App Fabric any time a new account is created, The endpoint to which the data is posted by CRM is maintained by the application and it will track when was the last account in CRM created on.

Plug-in code

using System;
using System.Globalization;
using System.IO;
using System.Text;
using System.Xml;
using System.ServiceModel;

using Microsoft.Crm.Sdk;
using Microsoft.ServiceBus;

namespace AppFabricPlugin
    public class Plugin : IPlugin
        // Variables
        private string SolutionName;
        private string ServicePath;
        private string MgmtKey;

        #region Constructor
        public Plugin(string config)
            if (String.IsNullOrEmpty(config))
                throw new InvalidPluginExecutionException("config can not null or empty.");

            // Parse config.
            string[] parts = config.Split(new char[] { ';' });
            if (parts.Length == 3)
                SolutionName = parts[0];
                ServicePath = parts[1];
                MgmtKey = parts[2];
                throw new InvalidPluginExecutionException("Invalid config.");

        #region IPlugin Members
        public void Execute(IPluginExecutionContext context)
            // Set mode to http (https).
            ServiceBusEnvironment.SystemConnectivity.Mode = ConnectivityMode.Http;

            // Address.
            Uri serviceUri = ServiceBusEnvironment.CreateServiceUri(Uri.UriSchemeHttps, SolutionName, ServicePath);

            // Binding
            WS2007HttpRelayBinding binding = new WS2007HttpRelayBinding();
            binding.Security.Mode = EndToEndSecurityMode.Transport;

            // Create the channel factory.
            using (ChannelFactory<IServiceBusChannel> channelFactory = new ChannelFactory<IServiceBusChannel>(binding, new EndpointAddress(serviceUri)))
                // Apply the auth behavior

                // Create and open the client channel
                using (IServiceBusChannel channel = channelFactory.CreateChannel())
                    // Use context correlationupdatetime to track the operation time.
                    channel.Execute(context.PrimaryEntityName + ";" + context.CorrelationUpdatedTime.Value);

        #region Private members
        private TransportClientEndpointBehavior RetrieveAuthBehavior()
            // Behavior
            TransportClientEndpointBehavior behavior = new TransportClientEndpointBehavior();
            behavior.CredentialType = TransportClientCredentialType.SharedSecret;
            behavior.Credentials.SharedSecret.IssuerName = "owner";
            behavior.Credentials.SharedSecret.IssuerSecret = MgmtKey;

            return behavior;

        #region Contracts        
        [ServiceContract(Namespace = "")]
        public interface IRemotePluginContract
            [OperationContract(IsOneWay = true)]
            void Execute(string data);

        public interface IServiceBusChannel : IRemotePluginContract, IClientChannel { }

Service listener code

public void Main(string[] args)
    // Set mode to http (https).
    ServiceBusEnvironment.SystemConnectivity.Mode = ConnectivityMode.Http;

    // Address.
    Uri serviceUri = ServiceBusEnvironment.CreateServiceUri(Uri.UriSchemeHttps, SolutionName, ServicePath);

    // Binding
    WS2007HttpRelayBinding binding = new WS2007HttpRelayBinding();
    binding.Security.Mode = EndToEndSecurityMode.Transport;

    using (ServiceHost host = new ServiceHost(typeof(RemoteService)))
        host.AddServiceEndpoint(typeof(IRemotePluginContract), binding, serviceUri);


        Console.WriteLine("Press [Enter] to exit");

public class RemoteService : IRemotePluginContract
    #region IRemotePluginContract Members
    public void Execute(string data)
        // Do something.

Plug-in registration

Compile and register the plug-in on account create. Register it to run asynchronously so that the post can happen independent of the actual create. In the config part add a semicolon separated string containing the solutionname;solutionpath;sharedkey

Configuring the ACS

We don’t need any rules configured in the ACS as we are using shared secret key to authenticate. All you would need to have is a solution name space on the App Fabric and use the management key. I have provided some links for you to get started.

With the above system in-place, the syncing module only needs to query CRM if the last account created on time is greater than then last time it synced. The model can be further improved and tweaked based to the requirements, but this simple demo enables us to see the integration empowerment that Windows Azure platform App Fabric enables. The best thing I like is it enables management of data syncing between the two systems.


If you are new to Windows Azure:

If need more info on App Fabric:

If you to download App Fabric SDK:

If you need more info on CRM plug-in registration tool:


Shashi Ranjan

Importing contacts to Microsoft Dynamics CRM Online

August 5, 2010 Leave a comment

I am importing just over 15,000 contacts for an established organization into a new instance of Microsoft Dynamics CRM Online. The import is a very flat file, no history, no relationships. About as basic as you can get.  However, as I said it is an established organization and they have several different email lists, marketing lists.

CRM has a concept of importing new contacts and assigning to a list, but with that the concept is 1 new contact will reside on 1 new list. With this organization a single contact might already reside on more than a single list. That’s a lot of hunting and pecking for me, this org has about a dozen lists, and some contacts reside on 5 or 6 or 10 of these lists.

Here’s my work-around.

1. Create the lists in CRM.  Nothing special about them, easy peasy, like normal.

2. Create new bit (yes/no) attributes on the Contact record, no need to put them on the form, just create them, default to “no”.  We are just using these as disposable attributes for assigning of list placements.   (don’t forget to publish)

3. Make sure the source csv file has the proper columns identifying each contact as a member (or not) of each list.

csv preview

4. Do the whole mapping thing, make sure each list from the source is mapped to the corresponding new attribute.  Then import just as you would normally.

5. Once the import is done go to each marketing list and manage members and add based on an advanced find, where the bit for that specific list equals “Yes”.

evaluate members

6. Then add to list.

add to list

Do this for each list and tadah, 15,000 records organized into a dozen overlapping marketing lists in a semi-automatic way. You can go clean up (delete) the disposable attributes or not, up to you.  I would suggest leaving them in case you wind up with a large import again.


Julie Yack

Windows Azure, the First Cloud OS

August 2, 2010 Leave a comment

It’s funny that so much literature in IT trade magazines depicts Microsoft as the aging champion of on-premise software, struggling in vain to hold back the tide of younger, more nimble cloud players of the likes of Google and Perhaps a good story needs drama, and Microsoft fit the bill for a stock antagonist, ludicrously bound to the old order, tilting at windmills. But the plot now takes a surprise twist. Microsoft has leapt into the cloud, reinventing itself as a leader of innovation.

Windows Azure is the first OS for the cloud. All prior operating systems were built for servers. While virtualization broke the one-to-one connection binding servers to machines, it did not did not eliminate the concept of the server. Servers became virtual, could share a single physical machine, and could even hop from machine to machine. But even in the virtual world, a server is still a server. And these servers must be maintained, upgraded, and monitored in much the same way as they had been before they were virtualized. When an organization deploys applications in the virtual world, it deploys those applications to servers, on-premise or in the cloud.

In the new world of Azure, the individual server disappears into a cloud. Developers deploy applications to the cloud, not to servers. The developer does not even see a server, only the cloud. Azure as the cloud OS distributes, runs, and manages those applications. In the end, yes, they do run on virtual servers that live someplace on physical servers, but this is invisible to the developer, and certainly to the end user.

It’s true that other vendors offer platform-as-a-service. promotes its as a platform. Indeed, Microsoft has a cloud offering of Dynamics CRM, which like is a platform for the rapid development of line-of-business applications. But neither nor Dynamics CRM are generalized platforms. While very flexible, they are intended for line-of-business applications, not just anything. You would not build a graphic design, word processing, or gaming application on either of these platforms.

Azure fits the category of platform-as-a-service, but it is the first generalized platform service in the cloud, the first platform in the cloud that supports anything your mind imagines.

Microsoft has just announced that it will support private clouds with Azure deployed through appliance hardware. With technology such as the Service Bus built into Azure, the capability exists for powerful integrations between private and public clouds. Going forward, Azure will give organizations a whole range of choices for public, private, and hybrid clouds. Enterprises will need these choices to deal with their ever changing business requirements.

Azure, a dramatic innovation in cloud computing, makes Microsoft a leader in cloud technology.


James Downey