当我们想要在C#中开发CRM库(管理器)时,我们正面临着问题,它将支持与多个CRM系统的通信 - 即您运行时的情况一次有多个CRM实例(例如两个不同的组织)。CRM开发 - 支持多个组织的早期绑定方法
为CRM库要求:
使用早期绑定,而不是后期绑定
能够与更多的客户关系管理系统通信(组织)通过一个管理者(因为类型安全的)
只有一种方法适用于所有CRM系统(组织)的一个操作(避免代码重复) - 有必要创建一个实用程序来解析生成的实体文件(crmsvcutil工具) ganization。解析的结果将是实体文件中定义的实体的接口和部分类的列表。这些接口将根据它们包含的属性(如IAccountNumber等)在部分类中实现。将有两组接口 - 第一个接口用于两个组织中通用的实体属性,例如,接口ICrmAccount将定义AccountNumber,Name,Address1属性等。第二组接口将用于实体唯一且不存在于所有CRM系统(组织)实体中的属性。一般的CRM经理将提供所有的沟通方法,比如CreateAccount(),GetAccount()等等,这些功能将会因为实现的接口而与特定的CRM系统一起工作。
我们设计了一个解决方案,它现在能够使用两种不同的CRM系统进行通信,但是它不能够使用的接口来实现针对特定帐户,请参阅封闭的解决方案,包含代码的注释。
该解决方案可以在这里找到:
的解决方案说明:
CRM_BusinessLogic - 包含CRMManager保存用于该通信的所有方法和构造函数初始化正确的数据上下文
CRM_Interfaces - 包含所有生成的接口,这些接口是实体文件解析的结果(这将必须使用单独的解析工具完成)。现在只包含iCRMAccount,其中只包含两个组织共同的属性,而iCRMContext包含在两个数据上下文中实现的实体 - 现在这两个上下文都实现相同的实体Account。
CRM_SCEurope - 包含第一个CRM组织生成的实体文件SC Europe - SCEuropeEntities.cs,解析工具生成的数据上下文(实现接口根据哪些实体存在于组织上下文中) - SCEuropeContext_generated和SCEuropeContext。CS返回正确装配
CRM_SoSW - 同样的内容CRM_SCEurope,包含与第二CRM组织
CRM_Test数据 - 包含测试控制台应用程序将与这两个组织沟通
请注意该封装的解决方案仅包含仅具有Name参数的Account实体,该参数足以用于设计解决方案的基本测试。
重要提示:在项目运行之前,您必须在Program.cs文件(CRM_Test项目)中为管理器设置证书。
正如您所看到的,如果帐户数据是使用生成的部分类(SoSwContext,SCEuropeContext)通过实现的接口iCRMContext从CRM加载的,则应用程序将引发一个异常“无效”,其中'条件。实体成员正在调用无效的属性或方法 - 请参阅方法实现。“
如果有人会找到解决方案如何解决异常,我们将不胜感激。
感谢
帕维尔
问题是如何包含多个实体定义(针对不同orgs的早期绑定类型)? – Daryl 2013-05-13 12:32:36