Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dynamics crm 2011 CRM开发-支持多个组织的早期绑定方法_Dynamics Crm 2011_Early Binding - Fatal编程技术网

Dynamics crm 2011 CRM开发-支持多个组织的早期绑定方法

Dynamics crm 2011 CRM开发-支持多个组织的早期绑定方法,dynamics-crm-2011,early-binding,Dynamics Crm 2011,Early Binding,当我们希望在C#中开发一个CRM库(管理器)时,我们面临着一个问题,该库将支持与多个CRM系统的通信,即,当您同时运行多个CRM实例时(例如,两个不同的组织) CRM库的要求: 使用早绑定而不是晚绑定(因为类型安全) 能够通过一名经理与多个CRM系统(组织)进行沟通 所有CRM系统(组织)只使用一种操作方法(避免代码重复)-需要为每个组织创建一个实用程序来解析生成的实体文件(crmsvcutil工具)。解析的结果将是实体文件中定义的实体的接口和部分类的列表。接口将根据其包含的属性(如IAccou

当我们希望在C#中开发一个CRM库(管理器)时,我们面临着一个问题,该库将支持与多个CRM系统的通信,即,当您同时运行多个CRM实例时(例如,两个不同的组织)

CRM库的要求:

  • 使用早绑定而不是晚绑定(因为类型安全)

  • 能够通过一名经理与多个CRM系统(组织)进行沟通

  • 所有CRM系统(组织)只使用一种操作方法(避免代码重复)-需要为每个组织创建一个实用程序来解析生成的实体文件(crmsvcutil工具)。解析的结果将是实体文件中定义的实体的接口和部分类的列表。接口将根据其包含的属性(如IAccountNumber等)在部分类中实现。将有两组接口-第一组用于两个组织中通用的实体属性,例如接口ICRMACount将定义AccountNumber、Name、,Address1属性等。第二组接口将用于实体特有的属性,并且不存在于所有CRM系统(组织)的实体中。CRM总经理将提供所有通信方法,如CreateAccount()、GetAccount()等,由于实现了接口,这些方法将与特定的CRM系统一起工作

  • 我们已经设计了一个解决方案,该解决方案现在能够与两个不同的CRM系统进行通信,但它不能为特定的客户使用已实现的接口,请参阅随附的包含代码注释的解决方案

    可以在以下位置找到解决方案:

    解决方案说明:

    CRM_BusinessLogic-包含CRMManager,它保存通信的所有方法,并在构造函数中初始化正确的数据上下文

    CRM_接口-包含实体文件解析后生成的所有接口(必须使用单独的解析工具完成)。现在只包含ICRMACount,它只包含两个组织的一个公共属性,iCRMContext包含在两个数据上下文中实现的实体-现在两个上下文实现相同的实体帐户

    CRM_SCEurope-包含为第一个CRM组织SC Europe生成的实体文件-sceuropentities.cs,通过解析工具生成的数据上下文(根据组织上下文中存在的实体实现接口列表)-SCEuropeContext_生成和SCEuropeContext.cs,返回正确的程序集

    CRM_SoSW-与CRM_SCEurope相同的内容,包含与第二个CRM组织相关的数据

    CRM_测试-包含将与这两个组织通信的测试控制台应用程序

    请注意,随附的解决方案仅包含仅带有名称参数的帐户实体,这足以对设计的解决方案进行基本测试

    重要提示:在运行项目之前,必须在Program.cs文件(CRM\U测试项目)中为管理员设置凭据

    您可以看到,如果使用生成的分部类(SoSwContext、SCEuropeContext)和实现的接口iCRMContext从CRM加载帐户数据,则应用程序会抛出异常“Invalid'where'条件。实体成员正在调用无效的属性或方法-请参阅方法实现。”

    如果有人能找到解决异常的方法,我们将不胜感激

    谢谢


    Pavel

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


    请记住,您可以为不同的组织使用早期绑定类型,只要您不尝试选择或更新不存在的特定字段或实体。因此,如果Org1在联系人实体上有一个CompanyId,而Org2没有,那么您仍然可以使用Org1和Org2的早期绑定类型,只要您不填充CompanyId(即将其放在实体参数集合中)

    问题在于如何包含多个实体定义(不同组织的早期绑定类型)?