
- Microsoft Dynamics CRM 教程
- Microsoft CRM - 首頁
- Microsoft CRM - 概述
- Microsoft CRM - 環境
- Microsoft CRM - 功能模組
- Microsoft CRM - 實體與記錄
- Microsoft CRM - 欄位
- Microsoft CRM - 表單
- Microsoft CRM - 搜尋
- Microsoft CRM - Web 資源
- JScript Web 資源
- HTML Web 資源
- Microsoft CRM - 工作流流程
- Microsoft CRM - 外掛
- Microsoft CRM - 外掛註冊
- Microsoft CRM - Web 服務
- Microsoft CRM - 解決方案
- Microsoft CRM 有用資源
- Microsoft CRM - 快速指南
- Microsoft CRM - 有用資源
- Microsoft CRM - 討論
Microsoft Dynamics CRM - Web 服務
Microsoft Dynamics CRM 提供兩種重要的 Web 服務,用於從外部應用程式訪問 CRM 並呼叫 Web 方法以執行常見的業務資料操作,例如在 CRM 中建立、刪除、更新和查詢。
考慮以下場景:
您有一個外部 .NET 應用程式,需要與 CRM 通訊。例如,當您的外部應用程式註冊新客戶時,您可能希望在 CRM 中插入一個聯絡人記錄。
或者,您可能希望在 CRM 中搜索記錄並在您的外部應用程式中顯示搜尋結果。
在這種情況下,您可以使用 CRM 公開的 Web 服務在您的應用程式中使用它們,並在 CRM 中執行建立、刪除、更新和查詢操作。
IDiscoveryService Web 服務
此 Web 服務返回指定使用者所屬的組織列表以及每個組織的 URL 端點。
IOrganizationService Web 服務
此 Web 服務是用於訪問 CRM 中的資料和元資料的主要 Web 服務。IOrganizationService 使用兩個重要的程式集 – **Microsoft.Xrm.Sdk.dll** 和 **Microsoft.Crm.Sdk.Proxy.dll**。這些程式集可以在 **Bin** 資料夾內的 CRM SDK 包中找到。
Microsoft.Xrm.Sdk.dll
此程式集定義了核心 xRM 方法和型別,包括用於簡化與 Microsoft Dynamics CRM 連線的代理類、身份驗證方法和服務契約。
Microsoft.Crm.Sdk.Proxy.dll
此程式集定義了非核心訊息的請求和響應,以及與組織資料一起使用所需的列舉。以下是這兩個程式集支援的名稱空間。
每個程式集都支援某些訊息,這些訊息將用於處理儲存在任何實體中的資料。可以在以下連結中找到它們支援的訊息的完整列表:
**支援的 xRM 訊息** - https://msdn.microsoft.com/en-us/library/gg334698.aspx
**支援的 CRM 訊息** - https://msdn.microsoft.com/en-us/library/gg309482.aspx
IOrganizationService Web 服務方法
**IOrganizationService** 提供八種方法,允許您對系統和自定義實體以及組織元資料執行所有常見操作。
序號 | 方法和描述 |
---|---|
1 | IOrganizationService.Create 建立記錄。 |
2 | IOrganizationService.Update 更新現有記錄。 |
3 | IOrganizationService.Retrieve 檢索記錄。 |
4 | IOrganizationService.RetrieveMultiple 檢索記錄集合。 |
5 | IOrganizationService.Delete 刪除記錄。 |
6 | IOrganizationService.Associate 建立記錄之間的連結。 |
7 | IOrganizationService.Disassociate 刪除記錄之間的連結。 |
8 | IOrganizationService.Execute 用於常見的記錄處理以及專門的處理,例如案例解決、重複檢測等。 |
Web 服務示例
為了瞭解 Web 服務在 CRM 中的工作方式,我們將研究 CRM SDK 提供的一個示例。在此示例中,我們將使用 CRM **IOrganizationService** Web 服務建立一個新的帳戶記錄、更新它,然後最終刪除它。
**步驟 1** - 開啟您解壓 CRM SDK 的資料夾。現在透過瀏覽到以下位置開啟 QuickStartCS.sln 解決方案:SDK\SampleCode\CS\QuickStart

**步驟 2** - 我們將探索使用 **簡化連線** 專案的 **QuickStart**。開啟此專案中的 **app.config**。預設情況下,此檔案中的 **connectionStrings** 部分將被註釋。

從中取消第一個連線字串鍵的註釋並編輯以下三個細節:
**Url** - 指定您的 CRM 例項的 URL。在我們的例子中,由於我們使用的是 CRM 的線上版本,您必須提及該 URL。
**使用者名稱** - 您的 CRM Online 使用者名稱。
**密碼** - 您的 CRM Online 密碼。

**步驟 3** - 開啟此專案中的 **SimplifiedConnection.cs** 檔案及其內部的 Run 方法。
public void Run(StringconnectionString, boolpromptforDelete) { try { // Establish a connection to the organization web service using CrmConnection. Microsoft.Xrm.Client.CrmConnection connection = CrmConnection.Parse(connectionString); // Obtain an organization service proxy. // The using statement assures that the service proxy will be properly disposed. using(_orgService = new OrganizationService(connection)) { //Create any entity records this sample requires. CreateRequiredRecords(); // Obtain information about the logged on user from the web service. Guid userid = ((WhoAmIResponse)_orgService.Execute(new WhoAmIRequest())).UserId; SystemUser systemUser = (SystemUser)_orgService.Retrieve("systemuser",userid, new ColumnSet(newstring[]{"firstname","lastname"})); Console.WriteLine("Logged on user is {0} {1}.", systemUser.FirstName,systemUser.LastName); // Retrieve the version of Microsoft Dynamics CRM. RetrieveVersionRequest versionRequest = new RetrieveVersionRequest(); RetrieveVersionResponse versionResponse = (RetrieveVersionResponse)_orgService.Execute(versionRequest); Console.WriteLine("Microsoft Dynamics CRM version {0}.", versionResponse.Version); // Instantiate an account object. Note the use of option set enumerations defined in OptionSets.cs. // Refer to the Entity Metadata topic in the SDK documentation to determine which attributes must // be set for each entity. Account account = new Account{Name = "Fourth Coffee"}; account.AccountCategoryCode = new OptionSetValue( (int)AccountAccountCateg oryCode.PreferredCustomer); account.CustomerTypeCode = new OptionSetValue( (int)AccountCustomerTypeCod e.Investor); // Create an account record named Fourth Coffee. _accountId = _orgService.Create(account); Console.Write("{0} {1} created, ",account.LogicalName,account.Name); // Retrieve the several attributes from the new account. ColumnSet cols = new ColumnSet( new String[]{"name","address1_postalcode","lastusedincampaign"}); Account retrievedAccount = (Account)_orgService.Retrieve("account", _accountId, cols); Console.Write("retrieved, "); // Update the postal code attribute. retrievedAccount.Address1_PostalCode = "98052"; // The address 2 postal code was set accidentally, so set it to null. retrievedAccount.Address2_PostalCode = null; // Shows use of a Money value. retrievedAccount.Revenue = new Money(5000000); // Shows use of a Boolean value. retrievedAccount.CreditOnHold = false; // Update the account record. _orgService.Update(retrievedAccount); Console.WriteLine("and updated."); // Delete any entity records this sample created. DeleteRequiredRecords(promptforDelete); } } // Catch any service fault exceptions that Microsoft Dynamics CRM throws. catch(FaultException<microsoft.xrm.sdk.organizationservicefault>) { // You can handle an exception here or pass it back to the calling method. throw; } }
**步驟 4** - 此方法基本上演示了使用 CRM Web 服務的所有 CRUD 操作。程式碼首先建立一個組織例項,然後建立一個帳戶記錄,更新建立的記錄,然後最終刪除它。讓我們看一下這段程式碼的重要組成部分。要在此程式碼執行時檢視 CRM 中的即時更改,您可以逐步除錯此程式碼(如下所述),並同時檢視 CRM 中的更改。
**步驟 4.1** - 使用我們在 **步驟 2** 中修改的連線字串建立與組織的連線。
Microsoft.Xrm.Client.CrmConnection connection = CrmConnection.Parse(connectionString);
**步驟 4.2** - 獲取 CRM 組織 Web 服務的代理例項。
_orgService = new OrganizationService(connection)
**步驟 4.3** - 建立一個新的帳戶實體物件並設定其名稱、AccountCategoryCode 和 CustomerTypeCode。
Account account = new Account{Name = "Fifth Coffee"}; account.AccountCategoryCode = new OptionSetValue( (int)AccountAccountCategoryCode.P referredCustomer); account.CustomerTypeCode = new OptionSetValue( (int)AccountCustomerTypeCode.Investor);
**步驟 4.4** - 使用組織服務的 Create 方法建立新記錄。
_accountId = _orgService.Create(account);
如果您導航到 CRM,您將看到一個新建立的帳戶記錄。

**步驟 4.5** - 建立帳戶後,服務將使用 Retrieve Web 服務方法從 CRM 檢索回記錄。
ColumnSet cols = new ColumnSet(new String[]{ "name","address1_postalcode","lastusedincampaign"}); Account retrievedAccount = (Account)_orgService.Retrieve("account", _accountId, cols);
**步驟 4.6** - 獲取檢索到的記錄後,您可以設定記錄的更新值。
retrievedAccount.Address1_PostalCode = "98052"; retrievedAccount.Address2_PostalCode = null; retrievedAccount.Revenue = new Money(5000000); retrievedAccount.CreditOnHold = false;
**步驟 4.7** - 設定記錄的更新值後,使用 Update Web 服務方法將記錄更新回 CRM 資料庫。
_orgService.Update(retrievedAccount);
如果您在 CRM 中開啟該記錄,您將看到這些值已在那裡更新。

**步驟 4.8** - 最後,使用 Delete Web 服務方法刪除記錄。
_orgService.Delete(Account.EntityLogicalName, _accountId);
如果您現在重新整理 CRM 中的同一記錄,您將看到該記錄不再可用,因為它已被刪除。

結論
在本章中,我們處理了 CRM 提供的兩個重要的 Web 服務,以及如何從外部應用程式使用這些 Web 服務執行各種 CRUD 操作的工作示例。