我尝试了一个简单的插件(只是抛出一个InvalidPluginExecutionException
),实际上如果在SetState
or上注册,插件不会被触发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)。