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方法。在后續文章中將介紹其他方法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM