2016-12-06 46 views
0

我是学习Dynamics 365插件的开发人员。Dynamics 365插件SDK在沙盒模式下更新强类型实体时抛出异常

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

“System.Runtime.Serialization.SerializationException:Microsoft Dynamics CRM中遇到错误,为管理员或支持参考编号:#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; 
     } 
    } 
} 

有什么我想: - >我已经改变了插件的隔离模式到无 - 这工作!按照最佳做法,不建议

感谢您的帮助 查尔斯

+0

不它在沙箱中工作,如果你迟到了吗? – Alex

+0

碰巧强类型Account类是不同的DLL吗?如果是这样,我相信你将不得不将其插入到插件DLL中。您可以通过直接将Account.cs类添加到您的插件项目中来快速测试。 – Polshgiant

+0

@亚历克斯:是的。如果我让它延迟和沙箱它,它确实工作 – h4ck3r8ug5

回答

1

一个SerializationException当你的代码期望后期绑定的类型,here the MSDN gives some degree of explanation混合前期绑定类型发生。

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

Update预计后期绑定型

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

,这将导致异常。

我从来没有使用早期绑定类型,所以我不能可靠地告诉如何解决你的代码,但下面的MSDN文章应该是有用的:

+0

'Update'需要'Entity'类型的对象 - >'public virtual void Update(Entity entity);'。内部类型的后期限制或早期限制是“实体”,所有早期的限制都是在后台使用正确的crm数据类型设置属性值,并且在检索过程中也使数据变平。我使用'organisationService'。更新(实体);'具有早期和晚期绑定对象。迟到或早期绑定,都是“实体”类型的对象,创建和更新应交替使用。 – dynamicallyCRM

+0

谢谢亚历克斯。这让我想到了 - 我会重构我的代码。 感谢帮助! – h4ck3r8ug5

相关问题