在沙盒模式下更新强类型实体时 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 - 这有效!根据最佳实践,不推荐
感谢您的帮助
查尔斯
当您将早期绑定类型与期望后期绑定类型的代码混合使用时,会出现 SerializationException
,here the MSDN gives some degree of explanation。
本质上,当您需要平台在早期绑定类型和后期绑定类型之间进行转换时,就会出现异常。
Update
需要后期绑定类型
organisationService.Update(dbAccount); // dbAccount should be an 'Entity' object
这会导致异常。
我从不使用早期绑定类型,所以我无法可靠地告诉您如何修复您的代码,但以下 MSDN 文章应该会有用:
我正在学习 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 - 这有效!根据最佳实践,不推荐
感谢您的帮助 查尔斯
当您将早期绑定类型与期望后期绑定类型的代码混合使用时,会出现 SerializationException
,here the MSDN gives some degree of explanation。
本质上,当您需要平台在早期绑定类型和后期绑定类型之间进行转换时,就会出现异常。
Update
需要后期绑定类型
organisationService.Update(dbAccount); // dbAccount should be an 'Entity' object
这会导致异常。
我从不使用早期绑定类型,所以我无法可靠地告诉您如何修复您的代码,但以下 MSDN 文章应该会有用: