Plugins 字典中不存在给定的键
我正在尝试为MS Dynamics CRM 4.0制作一个简单的插件,其中在订单更新时以SOAP消息的形式发送销售订单的数据。 奇怪的是,我每隔一次尝试保存/(执行插件)时就会出现这个错误。 因此,当我更新salesorder的(任何字段)并保存时,会出现以下错误: 当我在这之后立即再次保存时(在两次保存之间甚至不做任何更改),它会正确执行并提供我想要的所有数据。实际上每次都是一样的:第一次保存:错误,第二次保存:正确执行 你知道这是什么吗 这是我代码的第一部分;在本例中,它实际获取salesorder的数据集:Plugins 字典中不存在给定的键,plugins,dynamics-crm,dynamics-crm-4,Plugins,Dynamics Crm,Dynamics Crm 4,我正在尝试为MS Dynamics CRM 4.0制作一个简单的插件,其中在订单更新时以SOAP消息的形式发送销售订单的数据。 奇怪的是,我每隔一次尝试保存/(执行插件)时就会出现这个错误。 因此,当我更新salesorder的(任何字段)并保存时,会出现以下错误: 当我在这之后立即再次保存时(在两次保存之间甚至不做任何更改),它会正确执行并提供我想要的所有数据。实际上每次都是一样的:第一次保存:错误,第二次保存:正确执行 你知道这是什么吗 这是我代码的第一部分;在本例中,它实际获取saleso
public class CompleteOrderPlugin : IPlugin
{
public void Execute(IPluginExecutionContext context)
{
DynamicEntity entity = null;
if (context.InputParameters.Properties.Contains(ParameterName.Target) &&
context.InputParameters.Properties[ParameterName.Target] is DynamicEntity)
{
entity = (DynamicEntity)context.InputParameters[ParameterName.Target];
if (entity.Name != EntityName.salesorder.ToString()) { return; }
}
else
{
return;
}
剩下的就是我使用属性中的值来填充我自己的变量。我解决了这个问题,首先在plugin RegSitation工具中创建了salesorder的Post映像,然后使用Post映像中的值,而不是直接从salesorder提交的值。我这样做是因为在更新时,您只会得到实际更改的值。我修复了这一问题,首先在插件注册工具中创建了salesorder的Post映像,然后使用Post映像中的值,而不是直接从salesorder提交的值。我这样做是因为在更新时,您只会得到实际更改的值。我会使用Fiddler比较这两个请求-确保它们确实是完全相同的请求。我相信这个错误是访问动态实体的属性时的典型错误,而动态实体并不存在。但是salesorders可能会有一些CRM的额外行为,我不能对此发表评论(不知道这是您的插件还是CRM的内部)。如果fiddler跟踪没有帮助,我会附加调试器并逐步完成插件。另外,请随意发布一些插件代码。我会使用fiddler并比较两个请求-确保它们确实是完全相同的请求。我相信这个错误是访问动态实体的属性时的典型错误,而动态实体并不存在。但是salesorders可能会有一些CRM的额外行为,我不能对此发表评论(不知道这是您的插件还是CRM的内部)。如果fiddler跟踪没有帮助,我会附加调试器并逐步完成插件。另外,请随意发布一些插件代码。
public class CompleteOrderPlugin : IPlugin
{
public void Execute(IPluginExecutionContext context)
{
DynamicEntity entity = null;
if (context.InputParameters.Properties.Contains(ParameterName.Target) &&
context.InputParameters.Properties[ParameterName.Target] is DynamicEntity)
{
entity = (DynamicEntity)context.InputParameters[ParameterName.Target];
if (entity.Name != EntityName.salesorder.ToString()) { return; }
}
else
{
return;
}