在沙箱模式下更新强类型entiy时,Dynamics 365插件SDK会抛出异常

时间:2016-12-06 08:10:39

标签: dynamics-crm crm

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

问题:在强类型实体上调用Update方法时,我得到一个异常。确切的错误消息是:

" System.Runtime.Serialization.SerializationException:Microsoft Dynamics CRM遇到错误。管理员或支持的参考编号:#1330ADC1"

我的设置: 我的解决方案包含一个简单的插件。我创建了一个强类型实体帐户。插件的隔离模式是Sandbox。 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;
        }
    }
}

我尝试了什么: - &GT;我已将插件的隔离模式更改为无 - 这有效!根据最佳实践,不建议

感谢您的帮助 查尔斯

1 个答案:

答案 0 :(得分:1)

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

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

Update需要一个后期绑定类型

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

这会导致异常。

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