示例:使用有关更新和删除操作的乐观并发
发布日期: 2017年1月
适用于: Dynamics 365 (online),Dynamics 365 (on-premises),Dynamics CRM 2016,Dynamics CRM Online
演示如何使用 Microsoft Dynamics CRM Online 2015 更新 1 中引入的乐观开发功能,以在更新或删除实体记录时防止潜在数据丢失。 有关所使用技术的详细信息,请参阅以下主题:使用乐观并发减少潜在的数据丢失
可以在 MSDN:使用有关更新和删除操作的乐观开发中下载。
必备条件
若要运行此示例,您必须:
访问 Microsoft Dynamics CRM Online 2016 更新 或本地 Microsoft Dynamics 365 组织。
Microsoft .NET Framework 4.5.2 安装在您的部署计算机上。
在构建示例时,可以连接 Internet,以自动下载所需的 NuGet 包。
本主题内容
此示例的用途
安装 NuGet 包
运行示例
此示例的用途
此示例显示了如何使用有关更新和删除操作的乐观开发。 显示示例的主要部分的代码段如下所示。 此示例设置了有关更新和删除请求的开发行为,以便服务器检查进行这些操作的帐户记录的特定版本。 如果更新或删除操作尝试使用含不同列版本的记录,则会出现异常。 否则,操作成功。
// Connect to the Organization service.
// The using statement assures that the service proxy will be properly disposed.
using (_serviceProxy = new OrganizationServiceProxy(serverConfig.OrganizationUri, serverConfig.HomeRealmUri,
serverConfig.Credentials, serverConfig.DeviceCredentials))
{
CreateRequiredRecords();
// Retrieve an account.
var account = _serviceProxy.Retrieve("account", _accountId, new ColumnSet("name","creditlimit"));
Console.WriteLine("\tThe row version of the created account is {0}", account.RowVersion);
if (account != null)
{
// Create an in-memory account object from the retrieved account.
Entity updatedAccount = new Entity()
{
LogicalName = account.LogicalName,
Id = account.Id,
RowVersion = account.RowVersion
};
// Update just the credit limit.
updatedAccount["creditlimit"] = new Money(1000000);
// Set the request's concurrency behavour to check for a row version match.
UpdateRequest accountUpdate = new UpdateRequest()
{
Target = updatedAccount,
ConcurrencyBehavior = ConcurrencyBehavior.IfRowVersionMatches
};
// Do the update.
UpdateResponse accountUpdateResponse = (UpdateResponse) _serviceProxy.Execute(accountUpdate);
Console.WriteLine("Account '{0}' updated with a credit limit of {1}.", account["name"],
((Money)updatedAccount["creditlimit"]).Value);
account = _serviceProxy.Retrieve("account", updatedAccount.Id, new ColumnSet());
Console.WriteLine("\tThe row version of the updated account is {0}", account.RowVersion);
_accountRowVersion = account.RowVersion;
}
DeleteRequiredRecords(promptforDelete);
}
// Delete the account record only if the row version matches.
EntityReference accountToDelete = new EntityReference("account", _accountId);
accountToDelete.RowVersion = _accountRowVersion;
DeleteRequest request = new DeleteRequest()
{
Target = accountToDelete,
ConcurrencyBehavior = ConcurrencyBehavior.IfRowVersionMatches
};
_serviceProxy.Execute(request);
安装 NuGet 包
下载此示例并提取文件。
导航至 C# 文件夹,打开 Microsoft Visual Studio 中的解决方案文件。
在“解决方案资源管理器”中,右键单击项目并单击“管理 NuGet 包”。
如果您使用的是 Microsoft Dynamics 365 (online) 预览版组织,请在对话框顶部的下拉列表中单击“包含预发行”。 否则,请单击“仅稳定”。
关闭对话框。
则生成解决方案时,需要的包将自动安装。
运行示例
在 Visual Studio 中,请按 F5 构建并运行示例。 系统将提示您接受要安装的 NuGet 包的许可证。
如果您之前尚未运行任一 Microsoft Dynamics 365 托管代码示例,则您需要输入信息运行代码。 否则,输入在之前设置的任一 Dynamics 365 服务器的编号。
提示
说明
输入 Dynamics 365 服务器名称和端口 [crm.dynamics.com]
键入 Microsoft Dynamics 365 服务器的名称。 在北美,默认值为 Microsoft Dynamics 365 (online) (crm.dynamics.com)。
示例:
crm5.dynamics.com不包括您的组织名称或 Internet 协议(http 或 https)。 之后系统会提示您。
是否在 Microsoft Online Services 中配置了该组织 (y/n) [n]
如果这是 Microsoft Online Services 配置的组织,请键入 y。 否则,键入 n。
输入域名\用户名
对于 Microsoft Dynamics 365 (online),输入您的 Microsoft 帐户。 例如:someone@mydomain.onmicrosoft.com。
输入密码
键入密码。 您的密码将保存在 Windows 凭据管理器 中以便日后重复使用。
指定组织编号 (1-n) [1]
在您所属的所示组织列表中,键入相应数字。 默认值为 1,表示列表中的第一个组织。
示例将执行 此示例的用途 中介绍的操作,并且会向您提示其他选项。
在示例结束后,请按 ENTER 关闭控制台窗口。
另请参阅
Microsoft Dynamics 365
© 2017 Microsoft。 保留所有权利。 版权