CRM as a Custom App Dev Platform

The Microsoft Dynamics CRM Team Blog

News and views from the Microsoft Dynamics CRM Team

CRM as a Custom App Dev Platform

  • Comments 21

Recently I’ve been doing a lot of thinking regarding CRM as a custom application development (App Dev) platform. Many customers and partners have taken CRM and built rich applications which have little to do with Sales, Marketing or Service scenarios. However one thing that most of these apps have in common is: people, work and objectives. In fact the goal of Microsoft CM is: Easy and quick to generate rich applications for work management across people, organizations, processes


So what are some of the benefits of using Microsoft CRM as a custom App Dev platform? Here are some top reasons which spring to mind:


  • Deep Data Modeling: Complex schemas, full relationship support, large data sets.
  • Business Process Foundation: Queues, Activities, Workflows, programmable event model.
  • Rich Roles-based Interaction: Individual and organizational roles; team and territory management
  • Offline: Full support for offline, including custom entities
  • Reporting: Advanced Find querying, SRS reporting, “dynamic” XL reports
  • No-code App Development Toolset: Forms, Views, Security, Workflow
  • SOA: SOAP web services automatically generated for custom entities and attributes

If you have been using CRM to do ‘non-standard’ Sales, Marketing and Service let use know (leave a comment here or reach me through my site)! We are always interested in hearing about our app being used in new and exciting ways.


Philip Richardson
  • Hi Philip,

    We love the 'CRM as a platform' aspect of MSCRM.  I've even blogged about it, on similar lines to you (,guid,34db9b91-42ef-48f5-9db9-39dafc86471e.aspx), and mentioned some of the problems I see with the External connector license and with indexing (,guid,4c26f496-369f-4301-b098-96d358718699.aspx).

    I've also released publicly the tool we use to synchronize our CRM database with our webserver (CRMSync), so that we can use these entities through code - for example, whenever you report an exception in our products, it gets logged into our CRM system by our webserver.  CRMSync is here:,guid,6796dea4-0719-481f-8053-045a3466c059.aspx

    I'm really glad that the CRM team is starting to publicize this aspect of the product!

  • "full relationship support" ?

    1. There's no one-to-one relationships.
    2. You can only add one lookup to a given entity. Want to have two lookups for contacts on the same form? You can't.

    Are you going to do something about this in Titan?
  • I couldn't agree more with you about CRM as a central point for custom applicatioon development.

    But don't forget that when you develop your custom application in Dynamics CRM, you also get the benefit of all of the additional functionality that can be derived from ISV partners and their products - including, ERP integration, fax/telephony integration and (I disclose my personal bias here) Mobility.

    Steve Thomson
    TenDigits Software Inc.
  • I am currently working on a project that is considering using CRM as a custom application development  platform and am most interested in your assertion that CRM provides deep data modeling.  From a data modeler’s perspective, my evaluation would not have yielded such findings.  

    Your insight would be greatly appreciated!
  • But what will happen when CRM 3.5 is released which contains anew all the customisations (implemented in a completely different way) that you've already grafted onto your current CRM 3.0 system?
    It seems to me the standard version release model will hit real problems as upgrading a heavily customised installation will become so difficult the case for upgrading could be impossible to make.
  • Yes, I implement CRM to one of our client. Mainly it's a event and membership system. We are using base entity, e.g. Account, Contact, Activity, Product, etc. But we are not using basic function of Sales and Marketing.

    I found the functionality of the CRM itself is very useful and ease our development. We depend heavily on Customization of the Entity and SDK. Thank you for that great features. Our customer has frequently changed their requirement and it's really pain. But with the easiness of customization, our work has been far easier. Thank you very much.

    Ok, but instead of that, some problems we encounter so far:
    1. Export and Import large customization from one server to another server is really difficult. The most difficult we have faced is the error message. We are working with around 40-60 custom entities. And when one entity has a problem, the whole import fail without any information which entity cause it. We troubleshoot this several days just to find out someone recreate the entity and the GUID of that entity has been changed. If CRM just tell us which entity cause the importation fail (along with the reason if possible), that will be really nice.

    2. In problem no.1, why do we need to recreate the entity? Ok, this entity has a Primary Attribute which is ID Number. But because this attribute will be displayed as the main description of the entity, like Lookup from another entity, view, form, etc, customer don't understand this ID Number. They want to use the Name attribute instead. But since we can't change the primary attribute of CRM Entity, this entity need to be recreated (with the same name). Is there any easy way to change the primary attribute?

    3. With the Web Services platform, is there any way to implement Transactions, rollback or commit? With 50-60 custom entities, we really need to do multiple insert/update at the same time. If one fail, we need to rollback.

    4.  Two custom entity can be related only once. Sometimes we need to create more than one relationship between two custom entities. For example, Registration entity need to be related to Contact entity as Participant, another requirement Registration entity also need to be related to Contact entity as Billing To information. We can't find anyway to do this thing. I notice there's some special attribute like Created By and Updated By can relate to systemuser entity twice. But how to do that in the Customization?

    Sorry for too long comment. Hope next version of CRM will be the best CRM application ever :). CRM 3.0? Almost..

  • Hi Alex,

    We are planning to add new relationship features in the Titan release including true n:n, 1:1, multiple relationships, reflexive (self) relationships and relationships between certain system entities.

    Philip Richardson
    Program Manager, Customization, Microsoft CRM
  • Hi Nick,

    Upgrade of customizations is something we are very 'hardcore' about here in the CRM Team. If you have conducted 'supported customizations' (ie. those documented in the SDK) then these will upgrade to future versions very safely.

    Philip Richardson
    Program Manager, Customization, Microsoft CRM
  • Hi Gunady,

    The future versions of CRM will definitely tackling some of the 'pain' you are experiencing.

    1. We are rewriting our import/export code to ensure better performance and more granularity in the import/export.

    2. As part of our improved import/export code we are adding new error messages and the ability to identify individual failure points more easily.

    3. Titan will feature some newer enhancements regarding web services and our 'eventing framework'. Stay tuned to the team blog for more information in the future.

    4. We do intend to add support for multiple relationships in Titan.

    Philip Richardson
    Program Manager, Customization, Microsoft CRM
  • Hi,
    I have implemented a non-CRM application based on CRM 1.2.

    In fact, when I explained the normal CRM-processes to the customer they were very startled that the system they were using was acctually meant for THAT!? :)

    The application is for an power network owner and handles all customer contracts and cancelations. It also includes a journal that is based on Account! ;)

    Since custom entities don't exist in 1.2 I modified the existing to fit my needs.

    It looks a bit strange to someone used to working with CRM but the customer is very satisfied!

    Gustaf Westerlund
    Humandata AB, Sweden
  • Hi,
    Thank you for your answer for my previous question. I really wait for the next enhancement of CRM SDK. Hope there will be transaction there :). I have one more question here, that I already posted in Microsoft CRM Discussion forum but seem no one can give me solution:

    How to set Associated View of Certain Entity to
    display just the Active Entity. Currently I notice that in a parental
    relationship, the associated view display all the child entity
    including Active and Inactive. Is it possible to configure that
    associated view just display Active Child Entity?

    Thank you a lot.
  • Hi Gunady,

    Normally you can't filter the associated views. These views should already be filtered to only show Active records. You can view the criteria used in these views in our Import/Export XML. Export the entity, search for the associated view in the file (eg. Account Associated View) and inspect the <columnsetxml> element. Making changes to these FetchXML statements is not directly support - so be very careful if you make changes. I only recommend this technique for discovering the query logic.

    Philip Richardson [MSFT]
  • Hi Philip,
    Thank you for the response. I just noticed that for the built-in entity, Contact and Account, if I see the associated view Contact in Account detail, it shows only active Contact. But for the custom entities, it shows both active and inactive associated entities. Is this normal? I have two instance of CRM 3.0 running, both show the same condition. Ok, I will try to llook at the exported XML. Thank you for your advice.
  • There is one thing which remains unclear to me. With all good qualities of MCS CRM 3.0 (or Titan) as a development platform, what about transactional support? I mean, in case if single business operation requires several manipulations with different entity instancecs, how can one denote transactional boundary with proper commit/rollback semantics?

  • It appears that the transactional support question is left un-answered.

    It would be great to know if there is a way we can include transactions in CRM programming. To eloborate I want to manipulate a few entities in one call, however, I should be to rollback any updates if any of them fails.

    Any help is greatly appreciated

Page 1 of 2 (21 items) 12
Leave a Comment
  • Please add 5 and 4 and type the answer here:
  • Post