标签:
1. 优先考虑使用系统现有实体,为其添加自定义属性;
2. 重新命名现有实体以使实体更具有意义;
3. 在上述两种情况不能满足业务需求时,再考虑创建自定义实体
综合考虑插件或工作流解决方案的部署、性能和维护等方面,然后选择一种最符合业务目标的技术。
下表列出了插件和工作流的特性。
条件 |
插件 |
工作流 |
在核心平台操作(创建、更新、删除等)之前或之后执行 |
在核心操作之前或之后立即执行(同步)。可以排入队列以在核心操作之后执行(异步)。 |
排入队列以在核心操作之后执行(异步/同步)。 |
对服务器性能的影响 |
同步插件可能会增加平台响应时间,因为它们是主要平台处理过程的一部分。 异步插件对服务器响应时间的影响较小,因为代码在不同的进程中运行。 |
对服务器响应时间的影响较小,因为代码在不同的进程中运行。 |
安全限制 |
向平台注册插件需要系统管理员或系统定制员安全角色以及“部署管理员”组的成员资格。 |
用户可以在Web应用程序中以交互方式创建工作流。 但是,要注册自定义工作流活动,进行部署的用户必须具有与注册插件所需的相同安全角色。 |
CRM版本(SKU)支持 |
在沙盒中注册后则在CRM Online中受支持。可以在合作伙伴托管的安装中受支持,这由合作伙伴自行决定。 |
不含自定义工作流活动的工作流在所有产品版本中均支持。自定义的工作流活动在CRM Online上不受支持。 |
处理时间的长短 |
针对同步或非同步执行注册的插件要求在 2 分钟的时间限制内完成其执行。 |
既适用于短期进程也适用于长期进程。 |
在CRM for Outlook客户端脱机的情况下也工作 |
联机和脱机均支持。 |
脱机时工作流不执行。 |
进程和数据持久性 |
插件执行直至完成。必须将插件编写成无状态的情况,即不保留任何内存中数据。 |
可以通过SDK调用或由用户通过Web应用程序暂停、推迟、取消和恢复工作流。在暂停或推迟工作流之前,系统会自动保存工作流的状态。 |
模拟 |
插件可以代表其他系统用户执行数据操作。 |
工作流无法使用模拟。 |
将CRM Web服务URL放入配置文件(例如,放入app.config文件)中,以便将代码与对URL的更改隔离开
对于磁盘上的插件或自定义工作流活动,请将程序集放在 <installdir>\Server\bin\assembly 文件夹中。
对于自定义Web应用程序或网页,请将应用程序或网页存放于CRM服务器上的自定义目录下并发布到IIS。
在以下任一情况下,请为您的代码创建新的网站:
l 应用程序必须绑定到与CRM应用程序不同的域、协议或端口,或者必须在不同应用程序池中运行。
l 应用程序可独立存在和单独进行访问。例如,作为服务器(使用Web服务)与CRM交互的门户应作为新网站进行托管。
l 应用程序始终使用Active Directory或集成Windows身份验证(非IFD),并且无需考虑跨域脚本问题。例如,应用程序与使用Web服务的后端交互,同时还与CRM窗体交互。托管在不与CRM窗体交互的CRM应用程序包含的IFRAME中的页面属于这个类别。
l 请勿使用除SDK以外的任何其他方式修改CRM数据库,因为其会绕过CRM安全模型。
l 插件在管理员上下文中运行,您应该了解此代码可能会访问登录的用户无权访问的信息。
l 对于工作流程序集和插件,避免编写执行时需要花费很长时间的代码。有一点很重要,就是注册同步执行的插件代码返回的时间要尽可能短。
l 如果要复制自己的数据存储中的CRM数据,您应该对数据的安全负责。如果使用插件传输数据,请确保在核心平台操作完成之后再注册插件进行执行。登录用户的安全权限检查在核心平台操作的期间执行。
l 呈现从CRM获取的数据可能不安全。数据中可能插入了不安全的HTML标记。
l 遵循不直接通过CRM企业管理器访问SQL Server数据库的要求。不使用SDK可能会使您面临SQL注入威胁。
l 对于面向Internet的部署,请记住解决方案的安全性取决于最薄弱的一环。应用程序面向Internet公开后,会面临安全威胁。
l 仅使用生成托管代码的语言,以实现最佳安全性,防止出现缓冲区溢出和异常等等。
l 尽可能使用Web资源,而不使用需要服务器端处理的页面。如果您的要求只能通过服务器端处理才能满足,则请将自定义网页安装在单独的网站上。根据代码安全性中的可信度,相应地设置您的网站的信任级别。这样可减小来自跨网站脚本的威胁和其他威胁。
l 为提高安全性,确保使用不同于CRM的帐户运行您的单独网站。此帐户具有的访问权限应该尽可能少,并且不能直接访问数据库。可以使用复杂的、不会过期的密码,因为除了应用程序外,没有人会登录此帐户。
l 避免使用ActiveX控件,因为它们存在已知的安全问题。
l 在删除记录或应用敏感更改(例如,将新用户添加到安全角色)时始终使用模式确认对话框。这有助于防止诸如点击劫持或界面伪装漏洞之类的技术,在这些技术中恶意的开发人员可能会将您的页面嵌入到一个看似安全的页面,以诱使用户执行降低安全的操作或对数据执行不需要的操作。
l 不要使用匿名访问。
l 对安全套接字层(SSL)使用集成Windows身份验证、NTLM或Basic身份验证。
l 如果您的网站与CRM位于不同的计算机上,使用SSL可避免通过网络发送未加密数据。
通过下列最佳业务实践来提高代码的性能
向应用程序添加线程支持可以将工作分配给多个CPU。此建议假设您正在多处理器系统上运行代码。有关详细信息,请参阅《NET Framework高级开发指南》的“托管线程处理”文章。
使用下列常用方法代替Execute方法并与相应消息配合使用。可以提高代码性能
方法 |
消息 |
Create |
CreateRequest |
Delete |
DeleteRequest |
Update |
UpdateRequest |
Retrieve |
RetrieveRequest |
RetrieveMultiple |
RetrieveMultipleRequest |
始终编写执行预定任务花费时间最少的插件。例如,在CRM中经常处理Execute方法。如果针对该消息注册插件,则插件会对系统产生显著的性能影响。因为每次处理Execute方法时都会执行该插件。
如果要同步执行注册插件,建议将其设计为在10秒内完成其操作。最好是最大程度地减少插件的处理时间以维护连接到执行该插件的同一组织服务的客户端应用程序的交互性。
使用从服务器检索数据的方法时,检索应用程序所需的最少量的数据。可以通过指定列集来做到这一点,列集是指要检索的实体属性的集合。例如,应避免使用RetrieveAllEntitiesRequest消息,为EntityFilters属性指定EntityFilters.All实体筛选器来检索所有元数据。相反,如果限制实体筛选器,或使用下列消息之一,则可能会实现更好的性能:RetrieveEntityRequest、RetrieveOptionSetRequest、RetrieveAttributeRequest或RetrieveRelationshipRequest。
使用Update方法或UpdateRequest方法时,请勿在记录上设置OwnerId属性,除非已实际更改了负责人。设置此属性时,更改通常会将级联作用于相关实体,这可增加更新操作所需的时间。
项目开发过程中产生的源代码需要使用源代码管理工具来进行版本控制。源代码管理的工作由项目技术负责人来完成。
1. CRM自定义扩展插件的源代码;
2. CRM自定义扩展工作流的源代码;
3. CRM自定义解决方案中的Web资源。包括HTML网页、JS脚本和图片图标资源等
4. ISV扩展的自定义Web应用程序;
请参考附件A。
项目开发过程中产生的源代码需要有对应的技术文档。
其中,业务模块级别的功能开发需要有流程图;功能点级别的开发需要有函数说明。
为了降低项目的维护成本,减少代码中的bug,以及促进团队之间的合作。源代码的开发(.NET部分)必需遵照微软的C#开发规范。请查阅附件B。
由项目技术负责人对源代码进行审查。
项目交付阶段由项目技术负责人将项目的所有源代码签入公司的源代码管理服务器。包括:
1. CRM自定义扩展插件的源代码;
2. CRM自定义扩展工作流的源代码;
3. CRM自定义解决方案中的Web资源。包括HTML网页、JS脚本和图片图标资源等
4. ISV扩展的自定义Web应用程序;
上传地址:http://www.wicresoft.com/svn (待公司SVN服务器搭建好后再更新)
项目交付阶段由项目技术负责人将项目的所有技术文档上传到公司的SharePoint文档管理服务器。
上传地址:http://www.wicresoft.com/SharePoint (待公司SharePoint服务器搭建好后再更新)
标签:
原文地址:http://blog.csdn.net/i_houpes/article/details/51259604