发布日期: 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。 保留所有权利。 版权