Plugins 删除SalesOrderDetail实体上的插件问题-CRM2011

Plugins 删除SalesOrderDetail实体上的插件问题-CRM2011,plugins,dynamics-crm,dynamics-crm-2011,crm,Plugins,Dynamics Crm,Dynamics Crm 2011,Crm,我在salesorderdetail实体上的删除插件上遇到了一个非常恼人的错误。如下所示,我在创建另一个salesorderdetail记录(产品的支持行)的实体上有一个post create plugin registerd。现在我有了一个删除插件,当我删除Intial salesorderdetail记录时应该会启动它。为了消除混淆,A创建B,当A被删除时(删除插件触发),自动删除B。我的逻辑和插件适用于opportunity产品线和qoute产品线。当我尝试删除(初始salesorderd

我在salesorderdetail实体上的删除插件上遇到了一个非常恼人的错误。如下所示,我在创建另一个salesorderdetail记录(产品的支持行)的实体上有一个post create plugin registerd。现在我有了一个删除插件,当我删除Intial salesorderdetail记录时应该会启动它。为了消除混淆,A创建B,当A被删除时(删除插件触发),自动删除B。我的逻辑和插件适用于opportunity产品线和qoute产品线。当我尝试删除(初始salesorderdetail)时,出现错误“无法更新详细信息,因为父项不可编辑”。现在我的问题是如何避免错误?如果有人能帮我,我会非常感激。提前谢谢

我认为您的
saleorder
记录需要处于“新建”(
statuscode==1
)状态才能进行编辑


因此,您的删除插件可能需要将salesorder状态设置为“新建”,删除所需的orderdetail记录,然后将其设置回原始值。

我认为您的
salesorder
记录需要处于“新建”状态(
statuscode==1
)才能对其进行编辑


因此,您的删除插件可能需要将salesorder状态设置为“new”,删除所需的orderdetail记录,然后将其设置回原始值。

是否可能在当前逻辑中使用两个不同的实体

一种可能的情况是,当您现在处理来自同一实体的两条记录时,delete插件会触发两次,并可能在第二次执行时抛出异常

为了避免这种情况,只需在execute方法的开头添加以下内容:

if(pluginExecutionContext.Depth > 1)
    return;
您的插件将被禁止被其他插件或自身触发

问候,


Kévin

根据您当前的逻辑,是否可能使用两个不同的实体

一种可能的情况是,当您现在处理来自同一实体的两条记录时,delete插件会触发两次,并可能在第二次执行时抛出异常

为了避免这种情况,只需在execute方法的开头添加以下内容:

if(pluginExecutionContext.Depth > 1)
    return;
您的插件将被禁止被其他插件或自身触发

问候,


Kévin

Hi Greg,这就是我所做的。我使用SetStateRequest消息将statecode设置为0(活动),statuscode设置为1(新建),EntityMoniker设置为new EntityReference(“salesorder”,salesorder_id.id)。有趣的是,我可以删除create插件创建的行(支持行-B),但不能删除初始行(A),因为它会引发错误。我真的不知道这是怎么可能的,因为如上所述,它对我的其他实体工作得非常好。嗨,Greg,这就是我所做的。我使用SetStateRequest消息将statecode设置为0(活动),statuscode设置为1(新),EntityMoniker设置为new EntityReference(“salesorder”,salesorder_id.id)。有趣的是,我可以删除create插件创建的行(支持行-B),但不能删除初始行(A),因为它会引发错误。我真的不知道这是怎么可能的,因为如前所述,它对我的其他实体工作得非常好。