My organisation is in the final stages of acquiring CRM 4.0 for use as a general purpose software development platform. The company who is selling it to us has convinced upper management that CRM will solve all our productivity problems and make software development as easy as point and click. (They don't read *s.)
我的组织正处于获取CRM 4.0的最后阶段,用作通用软件开发平台。向我们销售产品的公司已经说服了高层管理人员,CRM将解决我们所有的生产力问题,并使软件开发像点击一样简单。 (他们不读布鲁克斯。)
Having resigned to the fact that I can't stop CRM from being foisted upon us developers, I have been doing research on how to manage the complexities of large scale CRM development.
由于我不能阻止CRM被强加给我们的开发人员这一事实,我一直在研究如何管理大规模CRM开发的复杂性。
I have so far identified the following complexities that need to be addressed:
到目前为止,我已经确定了需要解决的以下复杂问题:
- CRM seems wholly incompatible with basic configuration management practices.
- Keeping the black box CRM database in bidirectional synchronisation with external LOB systems is both very hard and critical to project success.
CRM似乎与基本配置管理实践完全不兼容。
保持黑匣子CRM数据库与外部LOB系统的双向同步对于项目成功而言非常困难和关键。
What other complexities must I take into account when building a large scale CRM application?
在构建大规模CRM应用程序时,我必须考虑哪些其他复杂性?
What limitations does CRM have as a development platform?
CRM作为开发平台有哪些局限性?
Edit: This topic provided additional insight.
编辑:本主题提供了额外的见解。
3 个解决方案
#1
I've worked with MS CRM 3.0 and now 4.0 here's my take:
我已经使用过MS CRM 3.0,现在4.0这是我的看法:
-
Whenever possible focus on standard best practices. Don't get overly confused by what CRM is doing or wants you to do.
尽可能专注于标准的最佳实践。不要过分担心CRM正在做什么或希望你做什么。
-
Don't be afraid to break what's "supported" by MS. With some caveats on 2 major factors - will your company let you think outside the box to solve problems and do customizations/integrations that are not officially supported? - and are you comfortable enough with .Net, SQL, javascript etc to weave through their code and implement what you need?
不要害怕打破MS“支持”的东西。关于两个主要因素的一些注意事项 - 贵公司是否会让您开箱即用以解决问题并进行非官方支持的定制/集成? - 你是否对.Net,SQL,javascript等感到满意,以编织代码并实现你需要的东西?
I have sometimes banged me head 100 times trying to do something in a "supported" fashion when one small tweak to a js file here or a small db modification there gave me what I needed.
我有时会试着以“支持”的方式做一些事情,当我在这里对一个js文件进行一次小调整或者一个小的数据库修改给我提供了我需要的东西时,我有时会让我头疼100次。
-
If constant data integration with other LOB apps is critical you should consider a 3rd party tool like Scribe (http://www.scribesoft.com/). It's not cheap but can basically get you 90% of the way when it comes to integrating with your other LOB apps.
如果与其他LOB应用程序的持续数据集成至关重要,您应该考虑像Scribe(http://www.scribesoft.com/)这样的第三方工具。它并不便宜,但在与其他LOB应用程序集成时基本上可以获得90%的支持。
-
As a general rule, MS CRM is great at contact management - doing things like tracking appointments, doing mail merges, etc. Could you use it as your core HR system - probably. Finance system - maybe a bit more difficult. The further you go from it's core competency of performing contact management the more custom work you'll have to do. The more custom work you have to do the more you should consider if MS CRM is the right solution to that problem.
作为一般规则,MS CRM非常适合联系人管理 - 执行诸如跟踪约会,进行邮件合并等操作。您是否可以将其用作核心HR系统。财务系统 - 可能有点困难。您可以进一步了解其执行联系人管理的核心能力,您需要做的定制工作越多。如果MS CRM是解决该问题的正确解决方案,您应该考虑的定制工作越多。
#2
I know you're likely well underway into your deployment of Dynamics CRM, but just a few quick tips:
我知道您可能正在进行Dynamics CRM的部署,但只是一些快速提示:
-
I'd avoid making unsupported changes purely because it becomes too hard to track the changes eventually. Since Dynamics CRM allows developers to make C# Plugins and access to web services, it's usually unnecessary to make unsupported changes for anything non-trivial. Plus you run the roulette of having to hide changes from MS if you have to call their support. I know many people will include external javascript files (jquery, etc) and other somewhat benign changes, but try to mentally stop yourself when an unsupported edit involves anything non-visual.
我完全避免进行不受支持的更改,因为最终很难跟踪更改。由于Dynamics CRM允许开发人员制作C#插件并访问Web服务,因此通常不必对任何非平凡的事情进行不受支持的更改。另外,如果你必须打电话给他们的支持,你可以运行必须隐藏MS更改的轮盘赌。我知道很多人会包含外部javascript文件(jquery等)以及其他有些良性的变化,但是当不受支持的编辑涉及任何非可视化时,请尝试在精神上停止自己。
-
Look into the phrase Microsoft Dynamics Xrm, there are several books on the subject that are excellent, http://www.thecrmbook.com/ is particularly good because it comes with some nice custom code to use with your CRM.
看一下Microsoft Dynamics Xrm这个词,有几本关于这个主题的书非常好,http://www.thecrmbook.com/特别好,因为它带有一些很好的自定义代码可以与你的CRM一起使用。
-
Source Control your customizations xml's and don't let people touch the database, also, Google Halan CRM tool, and use it for scripting out CRM customizations and javascript files. Easier than writing custom powershell scripts to do the same job.
来源控制您的自定义xml并且不要让人们触摸数据库,也就是Google Halan CRM工具,并使用它来编写CRM自定义和javascript文件的脚本。比编写自定义PowerShell脚本更容易完成相同的工作。
#3
Transaction Support
If your application require transaction support from the underlying platform, Dynamics CRM is not the correct choice. The reason is because currently Dynamics CRM SDK web service doesn't support transaction.
如果您的应用程序需要来自底层平台的事务支持,则Dynamics CRM不是正确的选择。原因是因为目前Dynamics CRM SDK Web服务不支持事务。
The reference thread is here : Does MSCRM web-service support database transactions?
参考线程在这里:MSCRM Web服务是否支持数据库事务?
Since you would like to utilize Dynamics CRM as a platform, that means all the business logic should utilize Dynamics CRM SDK Web Services as data access layer. But imagine without the transaction support and you're invoking a series of web service calls as a unit of work, and one of the web service calls fails. That means you potentially will encounter data integrity issue.
由于您希望将Dynamics CRM用作平台,这意味着所有业务逻辑都应将Dynamics CRM SDK Web服务用作数据访问层。但是想象一下,如果没有事务支持,并且您将一系列Web服务调用作为一个工作单元调用,并且其中一个Web服务调用失败。这意味着您可能会遇到数据完整性问题。
Configuration
Usually i create a custom entity called Configuration, which will store all the necessary related configuration for the current CRM application. After it has been created, you can use Dynamics CRM SDK Web Service to read all the necessary configurations from the Configuration custom entity
通常我会创建一个名为Configuration的自定义实体,它将存储当前CRM应用程序的所有必要相关配置。创建完成后,您可以使用Dynamics CRM SDK Web服务从配置自定义实体中读取所有必需的配置
#1
I've worked with MS CRM 3.0 and now 4.0 here's my take:
我已经使用过MS CRM 3.0,现在4.0这是我的看法:
-
Whenever possible focus on standard best practices. Don't get overly confused by what CRM is doing or wants you to do.
尽可能专注于标准的最佳实践。不要过分担心CRM正在做什么或希望你做什么。
-
Don't be afraid to break what's "supported" by MS. With some caveats on 2 major factors - will your company let you think outside the box to solve problems and do customizations/integrations that are not officially supported? - and are you comfortable enough with .Net, SQL, javascript etc to weave through their code and implement what you need?
不要害怕打破MS“支持”的东西。关于两个主要因素的一些注意事项 - 贵公司是否会让您开箱即用以解决问题并进行非官方支持的定制/集成? - 你是否对.Net,SQL,javascript等感到满意,以编织代码并实现你需要的东西?
I have sometimes banged me head 100 times trying to do something in a "supported" fashion when one small tweak to a js file here or a small db modification there gave me what I needed.
我有时会试着以“支持”的方式做一些事情,当我在这里对一个js文件进行一次小调整或者一个小的数据库修改给我提供了我需要的东西时,我有时会让我头疼100次。
-
If constant data integration with other LOB apps is critical you should consider a 3rd party tool like Scribe (http://www.scribesoft.com/). It's not cheap but can basically get you 90% of the way when it comes to integrating with your other LOB apps.
如果与其他LOB应用程序的持续数据集成至关重要,您应该考虑像Scribe(http://www.scribesoft.com/)这样的第三方工具。它并不便宜,但在与其他LOB应用程序集成时基本上可以获得90%的支持。
-
As a general rule, MS CRM is great at contact management - doing things like tracking appointments, doing mail merges, etc. Could you use it as your core HR system - probably. Finance system - maybe a bit more difficult. The further you go from it's core competency of performing contact management the more custom work you'll have to do. The more custom work you have to do the more you should consider if MS CRM is the right solution to that problem.
作为一般规则,MS CRM非常适合联系人管理 - 执行诸如跟踪约会,进行邮件合并等操作。您是否可以将其用作核心HR系统。财务系统 - 可能有点困难。您可以进一步了解其执行联系人管理的核心能力,您需要做的定制工作越多。如果MS CRM是解决该问题的正确解决方案,您应该考虑的定制工作越多。
#2
I know you're likely well underway into your deployment of Dynamics CRM, but just a few quick tips:
我知道您可能正在进行Dynamics CRM的部署,但只是一些快速提示:
-
I'd avoid making unsupported changes purely because it becomes too hard to track the changes eventually. Since Dynamics CRM allows developers to make C# Plugins and access to web services, it's usually unnecessary to make unsupported changes for anything non-trivial. Plus you run the roulette of having to hide changes from MS if you have to call their support. I know many people will include external javascript files (jquery, etc) and other somewhat benign changes, but try to mentally stop yourself when an unsupported edit involves anything non-visual.
我完全避免进行不受支持的更改,因为最终很难跟踪更改。由于Dynamics CRM允许开发人员制作C#插件并访问Web服务,因此通常不必对任何非平凡的事情进行不受支持的更改。另外,如果你必须打电话给他们的支持,你可以运行必须隐藏MS更改的轮盘赌。我知道很多人会包含外部javascript文件(jquery等)以及其他有些良性的变化,但是当不受支持的编辑涉及任何非可视化时,请尝试在精神上停止自己。
-
Look into the phrase Microsoft Dynamics Xrm, there are several books on the subject that are excellent, http://www.thecrmbook.com/ is particularly good because it comes with some nice custom code to use with your CRM.
看一下Microsoft Dynamics Xrm这个词,有几本关于这个主题的书非常好,http://www.thecrmbook.com/特别好,因为它带有一些很好的自定义代码可以与你的CRM一起使用。
-
Source Control your customizations xml's and don't let people touch the database, also, Google Halan CRM tool, and use it for scripting out CRM customizations and javascript files. Easier than writing custom powershell scripts to do the same job.
来源控制您的自定义xml并且不要让人们触摸数据库,也就是Google Halan CRM工具,并使用它来编写CRM自定义和javascript文件的脚本。比编写自定义PowerShell脚本更容易完成相同的工作。
#3
Transaction Support
If your application require transaction support from the underlying platform, Dynamics CRM is not the correct choice. The reason is because currently Dynamics CRM SDK web service doesn't support transaction.
如果您的应用程序需要来自底层平台的事务支持,则Dynamics CRM不是正确的选择。原因是因为目前Dynamics CRM SDK Web服务不支持事务。
The reference thread is here : Does MSCRM web-service support database transactions?
参考线程在这里:MSCRM Web服务是否支持数据库事务?
Since you would like to utilize Dynamics CRM as a platform, that means all the business logic should utilize Dynamics CRM SDK Web Services as data access layer. But imagine without the transaction support and you're invoking a series of web service calls as a unit of work, and one of the web service calls fails. That means you potentially will encounter data integrity issue.
由于您希望将Dynamics CRM用作平台,这意味着所有业务逻辑都应将Dynamics CRM SDK Web服务用作数据访问层。但是想象一下,如果没有事务支持,并且您将一系列Web服务调用作为一个工作单元调用,并且其中一个Web服务调用失败。这意味着您可能会遇到数据完整性问题。
Configuration
Usually i create a custom entity called Configuration, which will store all the necessary related configuration for the current CRM application. After it has been created, you can use Dynamics CRM SDK Web Service to read all the necessary configurations from the Configuration custom entity
通常我会创建一个名为Configuration的自定义实体,它将存储当前CRM应用程序的所有必要相关配置。创建完成后,您可以使用Dynamics CRM SDK Web服务从配置自定义实体中读取所有必需的配置