任何人都知道注册SetState
和SetStateDynamicEntity
的插件在salesorder
上没有注册的任何原因?如果我针对州代码注册Update
,则会正确触发。
我已经尝试在管道中的所有不同阶段进行注册,iisreset,取消注册/注册但没有成功。同时检查它是否针对不同的实体正确触发了这些消息。
检查SDK中的电子表格,并确认salesorder
的有效消息。我知道还会创建一个orderclose
活动"引擎盖下#34;所以不确定这里有关于整个订单处理的其他内容吗?
在这种情况下,我可以通过在statecode属性上注册Update
消息来实现我想要的。但是,我想了解这种行为的原因。
答案 0 :(得分:2)
我尝试使用一个简单的插件(只是抛出一个InvalidPluginExecutionException
),实际上如果在SetState
或SetStateDynamicEntity
上注册,插件就不会被触发。
查看MSDN我发现了这个例子:
它以这种方式使用消息FulfillSalesOrderRequest
:
// Close the sales order with a status of Complete
int newStatus = (int)salesorder_statuscode.Complete;
var request = new FulfillSalesOrderRequest
{
OrderClose = new OrderClose
{
SalesOrderId = new EntityReference
{ LogicalName = SalesOrder.EntityLogicalName, Id = _salesOrderId.Value }
},
Status = new OptionSetValue(newStatus)
};
并在FulfillSalesOrderRequest类的MSDN内部
http://msdn.microsoft.com/en-us/library/microsoft.crm.sdk.messages.fulfillsalesorderrequest.aspx
写道:
权限和访问权限
要执行此操作,调用者必须执行此操作 拥有OrderClose实体的权限和访问权限 OrderClose属性中指定的记录。
有关的完整列表 必需的权限,请参阅FulfillSalesOrder权限。
我在Create
实体(OrderClose
阶段)的Pre-operation
步骤中注册了我的插件后,当我尝试完成订单时,它可以正常工作(抛出异常)。
看起来这是建议的方式(至少来自MSDN)拦截订单的履行。