zoukankan      html  css  js  c++  java
  • MS CRM 2011的自定义和开发(10)——CRM web服务介绍(第二部分)——IOrganizationService(一)

        上一篇文章,介绍了IDiscoveryService web服务,本篇介绍CRM平台中,使用频度最高的web服务,IOrganizationService web服务。

        下图是IOrnigazationService服务相关的几个类的类图

    image    

        上图中,包含了以下几部分信息:

    IOrganizationService接口;

    IOrganizationService接口的实现类OrganizationServiceProxy;

    IOrganizationService接口中的CRUD方法需要使用到的类Entity;

    IOrganizationService接口的Execute方法需要使用到的OrganizationRequest请求以及OrganizationResponse响应;

        下面进行详细介绍:

        首先,说一下OrganizationServiceProxy类的实例化。OrganizationServiceProxy类的构造函数有5个重载,分别是:

    签名

    说明

    OrganizationServiceProxy (IServiceConfiguration[IOrganizationService], SecurityTokenResponse)

    使用服务配置信息以及安全令牌响应创建OrganizationServiceProxy实例

    OrganizationServiceProxy (IServiceConfiguration[IOrganizationService], ClientCredentials)

    使用服务配置以及用户凭据创建OrganizationServiceProxy实例

    OrganizationServiceProxy (IServiceManagement[IOrganizationService], SecurityTokenResponse)

    使用服务管理以及安全令牌响应创建OrganizationServiceProxy实例

    OrganizationServiceProxy (IServiceManagement[IOrganizationService], ClientCredentials)

    使用服务管理以及用户凭据创建OrganizationServiceProxy 实例

    OrganizationServiceProxy (Uri, Uri, ClientCredentials, ClientCredentials)

    根据组织服务Uri,客户凭据等信息创建OrganizationServiceProxy实例

        上面表格中提到的IServiceManagement实例的创建方法,通过Microsoft.Xrm.Sdk.Client.ServiceConfigurationFactory类的静态方法IServiceManagement<TService> CreateManagement<TService>(Uri serviceUri)获取,对于IServiceConfiguration实例,可以通过Microsoft.Xrm.Sdk.Client.ServiceConfigurationFactory类的静态方法IServiceConfiguration<TService> CreateConfiguration<TService>(Uri serviceUri)获取,两个静态方法中的输入参数userviceUri,是目标组织的OrganizationService web服务的Uri。

        上面表格中的最后一个构造函数,是将组织服务Uri,homeRealmUri,登陆用户的Credentials以及设备Credentials作为参数传递给构造函数。样例代码如下:

    1 Uri orgServiceUri = new Uri("http://<CrmServer>:<Port>/<OrgName>/XrmServices/2011/Organization.svc");
    2 ClientCredentials clientCredentials = new ClientCredentials();
    3 clientCredentials.Windows.ClientCredential = new NetworkCredential("<UserName>", "<Password>", "<Domain Name>");
    4 OrganizationServiceProxy proxy = new OrganizationServiceProxy(orgServiceUri, null, clientCredentials, null);

     在没有第二个ADFS服务实例的时候,homeRealmUri参数值为null,在On-Premise部署模式下,第四个参数deviceCredentials的值为null,否则需要使用SDK中的DeviceIdManager工具去获取设备凭据。

        IOrnigazationService接口公布了Create、Update、Delete、Retrieve、RetrieveMultiple、Associate、Disassociate以及Execute方法。其中

        Create方法用于完成实体实例的创建工作。其完整签名如下:

          public Guid Create(Entity entity)
       从签名可以看出,该方法接收一个类型为Entity的参数,该方法的返回值是Guid。从数据库角度讲,就是在实体所对应的数据表中插入一条记录,数据表的主键列的数据类型是UniqueIdentifier,这个字段的值,对应了Entity类中的Id属性,也是Create方法的返回值。
       下面是Create方法的样例代码,
     1 //创建Entity实例,在Entity类的构造函数中,使用实体逻辑名称作为输入参数。
    2 Entity account = new Entity("account");
    3
    4 //设定必填项,对于客户实体而言,必填项只有”name”属性。
    5
    6 //各位同学在自己编写代码过程中,需要根据实际情况,确定必填字段。
    7
    8 account["name"] = "Fourth Coffee";
    9
    10 // _service的类型是Organization
    11 _accountId = _service.Create(account);
     

        Update方法用于对特定实体实例的某些字段进行更新,其签名如下:

    public void Update(Entity entity)
       从签名可以看出,其输入参数和Create方法相同。Update方法没有返回参数,样例代码如下:
     1 Entity account = new Entity("account");
    2
    3 //_accountId来自于Create方法样例代码
    4
    5 account.Id = _accountId;
    6
    7 //设定address1_postalcode字段值,该字段的数据类型是单行文本
    8
    9 account["address1_postalcode"] = "98052";
    10
    11 // 设定address2_postalcode字段值为空.
    12 account["address2_postalcode"] = null;
    13
    14 // 设定revenue字段值,该字段的数据类型三Money类型.
    15 account["revenue"] = new Money(5000000);
    16
    17 // 设定creditonhold字段值,该字段数据类型是“两个选项”,即boolean型.
    18 account["creditonhold"] = false;
    19
    20 // 更新客户实例.
    21 _service.Update(account);

        Delete方法用于删除特定实体实例,其签名如下:

    public void Delete(string entityName, Guid id)
      从签名可以看出,接收参数分别指定了待删除实例的实体逻辑名称,以及待删除实例的Guid主键值。样例代码如下:
    1 //_accountId来自于Create方法样例代码
    2 _service.Delete("account", _accountId);
     
      以上,介绍了OrganizationProxy类的构造函数,IOrganizationService接口公布的Create、Update、Delete方法。在后续文章中将介绍其他方法。
  • 相关阅读:
    【转】SqlServer Text类型字段超过8000字处理
    uniapp项目运行时一直发http://localhost:8080/sockjs-node/info?t=1462183700002请求
    【转】chrome 浏览器调用 ocx 插件
    【转】javascript检测浏览器插件
    【转】web错误代码ERR_BLOCKED_BY_RESPONSE
    我是如何将Sublime Text 4 设置成中文版
    【转】用好 Vue 中 v-for 循环的 7 种方法
    【转】JavaScript console.log %c %o %s %d %f
    [JavaScript]UMD模块
    leetcode-课程表I和课程表II
  • 原文地址:https://www.cnblogs.com/StoneGarden/p/2330778.html
Copyright © 2011-2022 走看看