在沙盒模式下更新强类型实体时 Dynamics 365 Plugin SDK 抛出异常

Dynamics 365 Plugin SDK throwing exception when updating a strongly typed entiy in sandbox mode

我正在学习 Dynamics 365 插件开发。

问题: 在强类型实体上调用 Update 方法时,出现异常。确切的错误信息是:

"System.Runtime.Serialization.SerializationException: Microsoft Dynamics CRM has experienced an error. Reference number for administrators or support: #1330ADC1"

我的设置: 我的解决方案包含一个简单的插件。我创建了一个强类型实体帐户。该插件的隔离模式是沙盒。 Telephone1 字段是一个字符串。

我从 CRM 检索帐户,然后将 Telephone1 字段更新为新值并更新帐户记录。简单:)

代码:

public class PostOperationaccountUpdate: IPlugin
{
    public void Execute(IServiceProvider serviceProvider)
    {
        var organisationService = serviceProvider.GetService(typeof (IOrganizationService)) as IOrganizationService;
        var context = serviceProvider.GetService(typeof (IPluginExecutionContext)) as IPluginExecutionContext;

        var entityAccount = context.InputParameters["Target"] as Entity;
        var id = entityAccount.Id;

        var account = organisationService.Retrieve("account", id, new ColumnSet("telephone1"));

        //Get a strongly typed version of the Account entity
        var dbAccount = account.ToEntity<Account>();

        //Update the telephone1 field using the "old" way
        account["telephone1"] = "1234567890";

        try
        {
            //This will pass
            organisationService.Update(account);

            //Update the strongly typed Account
            dbAccount.Telephone1 = "plop";

            //This fails
            organisationService.Update(dbAccount);
        }
        catch (Exception ex)
        {
            throw;
        }
    }
}

我尝试了什么: -> 我已将插件的隔离模式更改为 None - 这有效!根据最佳实践,不推荐

感谢您的帮助 查尔斯

当您将早期绑定类型与期望后期绑定类型的代码混合使用时,会出现 SerializationExceptionhere the MSDN gives some degree of explanation

本质上,当您需要平台在早期绑定类型和后期绑定类型之间进行转换时,就会出现异常。

Update 需要后期绑定类型

organisationService.Update(dbAccount); // dbAccount should be an 'Entity' object

这会导致异常。

我从不使用早期绑定类型,所以我无法可靠地告诉您如何修复您的代码,但以下 MSDN 文章应该会有用: