2013-05-10 32 views
0

当我们想要在C#中开发CRM库(管理器)时,我们正面临着问题,它将支持与多个CRM系统的通信 - 即您运行时的情况一次有多个CRM实例(例如两个不同的组织)。CRM开发 - 支持多个组织的早期绑定方法

为CRM库

要求:

  1. 使用早期绑定,而不是后期绑定

  2. 能够与更多的客户关系管理系统通信(组织)通过一个管理者(因为类型安全的)

  3. 只有一种方法适用于所有CRM系统(组织)的一个操作(避免代码重复) - 有必要创建一个实用程序来解析生成的实体文件(crmsvcutil工具) ganization。解析的结果将是实体文件中定义的实体的接口和部分类的列表。这些接口将根据它们包含的属性(如IAccountNumber等)在部分类中实现。将有两组接口 - 第一个接口用于两个组织中通用的实体属性,例如,接口ICrmAccount将定义AccountNumber,Name,Address1属性等。第二组接口将用于实体唯一且不存在于所有CRM系统(组织)实体中的属性。一般的CRM经理将提供所有的沟通方法,比如CreateAccount(),GetAccount()等等,这些功能将会因为实现的接口而与特定的CRM系统一起工作。

我们设计了一个解决方案,它现在能够使用两种不同的CRM系统进行通信,但是它不能够使用的接口来实现针对特定帐户,请参阅封闭的解决方案,包含代码的注释。

该解决方案可以在这里找到:

Link for download

的解决方案说明:

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加载的,则应用程序将引发一个异常“无效”,其中'条件。实体成员正在调用无效的属性或方法 - 请参阅方法实现。“

如果有人会找到解决方案如何解决异常,我们将不胜感激。

感谢

帕维尔

+0

问题是如何包含多个实体定义(针对不同orgs的早期绑定类型)? – Daryl 2013-05-13 12:32:36

回答

1

对于我现在的老板,他们有多个CRM组织,有些几乎是一样的,我们实际上能够使用完全相同的早期绑定类,有20几行的自定义代码来处理差异。其他组织不是,所以我们有一个单独的dll,其中包含生成的早期绑定类型的组织特定命名空间。没有理由,他们不能全部在同一个dll中,但是如果它们全都在相同的命名空间中,则会出现问题,因为每个都将定义它自己的联系人,约会等定义。

请记住,只要您不尝试选择或更新不存在的特定字段或实体,就可以将早期绑定类型用于不同的组织。所以如果组织1在联系实体上有一个公司ID,而组织2没有,你仍然可以使用组织1的早期界限类型,组织2,只要你不填充CompanyId(即将它放入实体参数集合)

相关问题