您的位置:首页 > 其它

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

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

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


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





可以看到,有一个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的子类实例。类树如下图所示。





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

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

属性名称类型描述
AccessTypeEndpointAccessType用于设定需要获取的服务终端点的类型,可选值包括有Default、Internal以及Intranet
ReleaseOrganizationRelease用于设定获取的终端点的版本,可选值包括有Current或者V5
与RetrieveOrganizationsRequest请求对应的响应是RetrieveOrganizationsResponse,该请求中,就一个属性Details,该属性的类型为OrganizationDetailCollection,是一个包含了当前MS CRM部署中,所有组织的详细信息数组,每个组织的详细信息存放在OrganizationDetail的实例中。OrganizationDetail的属性包括有

属性名称类型描述
OrganizationIdGuid组织的唯一ID
FriendlyNameString组织的友好名称
OrganizationVersionString组织的版本号
UrlNameStringOrganizationService服务中,使用的组织名称
UniqueNameString组织的唯一名称
EndpointsEndpointCollection组织的各个终端点的集合,每个终端点包括有服务的类型以及地址
StateOrganizationState组织的状态,包括有Enabled(已启用)/Disabled(已禁用)两种状态
b) RetrieveOrganizationRequest请求,用于获取给定唯一名称组织的信息,该请求的接受的参数为:
属性名称类型描述
AccessTypeEndpointAccessType用于设定需要获取的服务终端点的类型,可选值包括有Default、Internal以及Intranet
ReleaseOrganizationRelease用于设定获取的终端点的版本,可选值包括有Current或者V5
UniqueNameString用于设定组织的唯一名称
返回值是RetrieveOrganizationResponse对象,该对象中包含的属性是类型为OrganizationDetail的Detail属性。关于OrganizationDetail类的信息前面已经介绍了,在此不赘述。

c) RetrieveUserIdByExternalIdRequest请求,用于CRM Live模式下,通过该请求,可以获取与给定Windows Live ID相关的CRM Online用户的ID。


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

//实例化RetrieveOrganizationsRequest请求
RetrieveOrganizationsRequest orgsRequest = new RetrieveOrganizationsRequest()
{
AccessType = EndpointAccessType.Default,
Release = OrganizationRelease.Current
};

//调用IDiscoveryService的Execute方法,传入RetrieveOrganizationsRequest类型参数,返回RetrieveOrganizationsResponse类型的响应
RetrieveOrganizationsResponse organizations = (RetrieveOrganizationsResponse)service.Execute(orgsRequest);

//枚举当前CRM部署中的所有组织的信息
foreach (OrganizationDetail organization in organizations.Details)
{
Console.WriteLine("Organization Name: {0}", organization.FriendlyName);
Console.WriteLine("Unique Name: {0}", organization.UniqueName);
Console.WriteLine("Endpoints:");
foreach (var endpoint in organization.Endpoints)
{
Console.WriteLine("  Name: {0}", endpoint.Key);
Console.WriteLine("  URL: {0}", endpoint.Value);
}
}

//实例化RetrieveOrganizationRequest请求,获取当前部署中,最后一个组织的唯一名称
RetrieveOrganizationRequest orgRequest = new RetrieveOrganizationRequest()
{
UniqueName = organizations.Details[organizations.Details.Count - 1].UniqueName,
AccessType = EndpointAccessType.Default,
Release = OrganizationRelease.Current
};

//调用IDiscoveryService的Execute方法,获取给定唯一名称组织的信息
RetrieveOrganizationResponse org = (RetrieveOrganizationResponse)service.Execute(orgRequest);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐