📅  最后修改于: 2020-11-20 06:04:58             🧑  作者: Mango
Microsoft Dynamics CRM提供了两个重要的Web服务,用于从外部应用程序访问CRM并调用Web方法以执行常见的业务数据操作,例如在CRM中创建,删除,更新和查找。
考虑以下场景-
您有一个外部.NET应用程序,需要与CRM通讯。例如,当外部应用程序中注册了新客户时,您可能希望在CRM中插入联系人记录。
或者,您可能想在CRM中搜索记录并在外部应用程序中显示搜索结果。
在这种情况下,您可以使用CRM公开的Web服务在应用程序中使用它们,并在CRM中执行创建,删除,更新和查找操作。
该Web服务返回指定用户所属的组织的列表以及每个组织的URL端点。
该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/zh-cn/library/gg309482.aspx
IOrganizationService提供了八个方法,使您可以在系统和自定义实体以及组织元数据上执行所有常见操作。
Sr.No | Method & Description |
---|---|
1 |
IOrganizationService.Create Creates a record. |
2 |
IOrganizationService.Update Updates an existing record. |
3 |
IOrganizationService. Retrieve Retrieves a record. |
4 |
IOrganizationService. RetrieveMultiple Retrieves a collection of records. |
5 |
IOrganizationService. Delete Deletes a record. |
6 |
IOrganizationService. Associate Creates a link between records. |
7 |
IOrganizationService.Disassociate Deletes a link between records. |
8 |
IOrganizationService.Execute Used for common record processing as well as specialized processing such as case resolution, duplicate detection, etc. |
为了了解Web服务在CRM中的工作方式,我们将看一下CRM SDK提供的示例。在此示例中,我们将创建一个新的帐户记录,对其进行更新,然后最后使用CRM IOrganizationService Web服务将其删除。
步骤1-打开您提取CRM SDK的文件夹。现在通过浏览到以下位置来打开QuickStartCS.sln解决方案:SDK \ SampleCode \ CS \ QuickStart
步骤2-我们将探索“简化连接快速入门”项目。在此项目中打开app.config 。默认情况下,该文件中的connectionStrings部分将被注释。
从此,取消注释第一个连接字符串键并编辑以下三个详细信息-
网址-指定您的CRM实例的URL。就我们而言,由于我们使用的是CRM的在线版本,因此您必须提及该URL。
用户名-您的CRM Online用户名。
密码-您的CRM Online密码。
步骤3-在此项目中打开SimplifiedConnection.cs文件,然后在其中运行方法。
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) {
// You can handle an exception here or pass it back to the calling method.
throw;
}
}
步骤4-该方法基本上演示了使用CRM Web服务的所有CRUD操作。该代码首先创建一个组织实例,然后创建一个Account记录,更新创建的记录,然后最后将其删除。让我们看一下这段代码的重要组成部分。若要在代码运行时查看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-创建帐户后,该服务将使用“检索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-设置记录的更新值后,使用“更新” Web服务方法将记录更新回CRM数据库。
_orgService.Update(retrievedAccount);
如果在CRM中打开记录,您将在此处看到这些值的更新。
步骤4.8-最后,使用“删除Web服务”方法删除记录。
_orgService.Delete(Account.EntityLogicalName, _accountId);
如果现在刷新CRM中的相同记录,您将看到该记录不再可用,因为它已被删除。
在本章中,我们讨论了CRM提供的两个重要的Web服务,以及一个如何从外部应用程序使用这些Web服务执行各种CRUD操作的工作示例。