CRM as a Custom App Dev Platform


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


Comments (21)

  1. Justin SB says:

    Hi Philip,

    We love the ‘CRM as a platform’ aspect of MSCRM.  I’ve even blogged about it, on similar lines to you (http://www.consonica.com/blogs/justinsb/PermaLink,guid,34db9b91-42ef-48f5-9db9-39dafc86471e.aspx), and mentioned some of the problems I see with the External connector license and with indexing (http://www.consonica.com/blogs/justinsb/PermaLink,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: http://www.consonica.com/blogs/justinsb/PermaLink,guid,6796dea4-0719-481f-8053-045a3466c059.aspx

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

    Justin

  2. Alex says:

    "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?

  3. 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.

    http://www.tendigits.com

  4. Paula Still says:

    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!

  5. Nick Nelson says:

    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.

  6. Gunady says:

    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..

    Bravo,

    Gunady

  7. 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

  8. 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

  9. 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

  10. 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!

    Regards,

    Gustaf Westerlund

    Humandata AB, Sweden

  11. Gunady says:

    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.

  12. MSDN Archive says:

    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]

  13. Gunady says:

    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.

  14. Andrei says:

    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?

  15. kiran says:

    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

  16. We do support some transactions in the platform today – in the form of compound operations. However given the disconnected nature of our API – you may need to implement your own transactional state management. Depending on the nature of your transactions implementing certain calls within a pre-callout might also be possible – where the intitial call can be aborted (without having to manually ‘rollback’).

  17. dotnetfellow says:

    Can you tell me when Ssis will have a Ms Crm Adaptor?  If not, why not?

  18. We have no plans for an SSIS adapter at this time.

  19. Weddings says:

    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