示例:使用有关更新和删除操作的乐观并发

  发布日期: 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 包

  1. 下载此示例并提取文件。

  2. 导航至 C# 文件夹,打开 Microsoft Visual Studio 中的解决方案文件。

  3. 在“解决方案资源管理器”中,右键单击项目并单击“管理 NuGet 包”。

  4. 如果您使用的是 Microsoft Dynamics 365 (online) 预览版组织,请在对话框顶部的下拉列表中单击“包含预发行”。 否则,请单击“仅稳定”。

  5. 关闭对话框。

则生成解决方案时,需要的包将自动安装。

运行示例

  1. 在 Visual Studio 中,请按 F5 构建并运行示例。 系统将提示您接受要安装的 NuGet 包的许可证。

  2. 如果您之前尚未运行任一 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,表示列表中的第一个组织。

  3. 示例将执行 此示例的用途 中介绍的操作,并且会向您提示其他选项。

  4. 在示例结束后,请按 ENTER 关闭控制台窗口。

另请参阅

使用乐观并发减少潜在的数据丢失

Microsoft Dynamics 365

© 2017 Microsoft。 保留所有权利。 版权