• MS CRM 2011的自定义和开发(10)——CRM web服务介绍(第一部分)——IDiscoveryService


        Microsoft CRM 2011中,包括有两个web service,分别提供了一组方法,通过调用不同的web服务,可以完成不同的功能。

        这两个web服务分别是IDiscoveryService web服务以及IOrganization web服务。

    IDiscoveryService web服务:一个单独的MS CRM安装中,可以在某台服务器上面部署有多个组织。在存储层角度看,就是一个MS CRM安装,对应一个MSCRM_Config数据库,而每个组织对应一个<组织名称>_MSCRM数据库。如下图所示。

    image

        可以看到,有一个MSCRM_Config数据库,而其他的组织相关的数据库包括有Demo_MSCRM等等多个以”_MSCRM”结尾的数据库。

        在MSCRM_CONFIG数据库中,存储了不同组织以及该组织对应的数据库。换言之,为了访问业务数据,需要创建sqlConnection实例,那么SqlConnection实例的连接字符串如何确定呢。因为我们知道组织的唯一名称,那么,就可以查询MSCRM_CONFIG数据库,然后,找到相应的连接字符串,赋值给SqlConnection的ConnectionString属性。而后,就可以使用该SqlConnection实例,访问相关组织的数据了。当然,如此直接的访问后台数据表的方式,在MS CRM开发中是不允许的,所以,MS CRM提供了IDiscoveryService服务,使得开发人员可以根据组织的唯一名称以获取该组织的OrganizationService Web服务的Url地址。

        IDiscoveryService接口公布的方法是Execute方法,该方法接收的参数为DiscoveryRequest的子类实例。返回的是DiscoveryResponse的子类实例。类树如下图所示。

    image

        从上图可见,可以向DiscoveryService提交的请求包括有:

        a) RetrieveOrganizationsRequest请求,获取当前MS CRM安装中所有的组织信息。该请求接受的参数为

    属性名称 类型 描述
    AccessType EndpointAccessType 用于设定需要获取的服务终端点的类型,可选值包括有Default、Internal以及Intranet
    Release OrganizationRelease 用于设定获取的终端点的版本,可选值包括有Current或者V5

        与RetrieveOrganizationsRequest请求对应的响应是RetrieveOrganizationsResponse,该请求中,就一个属性Details,该属性的类型为OrganizationDetailCollection,是一个包含了当前MS CRM部署中,所有组织的详细信息数组,每个组织的详细信息存放在OrganizationDetail的实例中。OrganizationDetail的属性包括有

    属性名称 类型 描述
    OrganizationId Guid 组织的唯一ID
    FriendlyName String 组织的友好名称
    OrganizationVersion String 组织的版本号
    UrlName String OrganizationService服务中,使用的组织名称
    UniqueName String 组织的唯一名称
    Endpoints EndpointCollection 组织的各个终端点的集合,每个终端点包括有服务的类型以及地址
    State OrganizationState 组织的状态,包括有Enabled(已启用)/Disabled(已禁用)两种状态
    • b) RetrieveOrganizationRequest请求,用于获取给定唯一名称组织的信息,该请求的接受的参数为:
      属性名称 类型 描述
      AccessType EndpointAccessType 用于设定需要获取的服务终端点的类型,可选值包括有Default、Internal以及Intranet
      Release OrganizationRelease 用于设定获取的终端点的版本,可选值包括有Current或者V5
      UniqueName String 用于设定组织的唯一名称
    • 返回值是RetrieveOrganizationResponse对象,该对象中包含的属性是类型为OrganizationDetail的Detail属性。关于OrganizationDetail类的信息前面已经介绍了,在此不赘述。
    • c) RetrieveUserIdByExternalIdRequest请求,用于CRM Live模式下,通过该请求,可以获取与给定Windows Live ID相关的CRM Online用户的ID。

        调用IDiscoveryServic的Execute方法的样例代码如下:

     1 //实例化RetrieveOrganizationsRequest请求
    2 RetrieveOrganizationsRequest orgsRequest = new RetrieveOrganizationsRequest()
    3 {
    4 AccessType = EndpointAccessType.Default,
    5 Release = OrganizationRelease.Current
    6 };
    7
    8 //调用IDiscoveryService的Execute方法,传入RetrieveOrganizationsRequest类型参数,返回RetrieveOrganizationsResponse类型的响应
    9 RetrieveOrganizationsResponse organizations = (RetrieveOrganizationsResponse)service.Execute(orgsRequest);
    10
    11 //枚举当前CRM部署中的所有组织的信息
    12 foreach (OrganizationDetail organization in organizations.Details)
    13 {
    14 Console.WriteLine("Organization Name: {0}", organization.FriendlyName);
    15 Console.WriteLine("Unique Name: {0}", organization.UniqueName);
    16 Console.WriteLine("Endpoints:");
    17 foreach (var endpoint in organization.Endpoints)
    18 {
    19 Console.WriteLine(" Name: {0}", endpoint.Key);
    20 Console.WriteLine(" URL: {0}", endpoint.Value);
    21 }
    22 }
    23
    24 //实例化RetrieveOrganizationRequest请求,获取当前部署中,最后一个组织的唯一名称
    25 RetrieveOrganizationRequest orgRequest = new RetrieveOrganizationRequest()
    26 {
    27 UniqueName = organizations.Details[organizations.Details.Count - 1].UniqueName,
    28 AccessType = EndpointAccessType.Default,
    29 Release = OrganizationRelease.Current
    30 };
    31
    32 //调用IDiscoveryService的Execute方法,获取给定唯一名称组织的信息
    33 RetrieveOrganizationResponse org = (RetrieveOrganizationResponse)service.Execute(orgRequest);


     

  • 相关阅读:
    内存泄漏检测工具VLD在VS2010中的使用举例
    boost::threadpool 调用类成员变量并传入参数 的方法
    boost之ThreadPool
    DllMain 用法
    分布式锁的几种实现方式
    利用cbmakegen导出Code::blocks的Makefile
    搜集C++实现的线程池
    微软开源rDSN分布式系统开发框架
    腾讯互娱开源分布式开发框架Pebble
    SpringBoot指定额外需要扫描的包
  • 原文地址:https://www.cnblogs.com/StoneGarden/p/2259686.html
Copyright © 2020-2023  润新知