后操作创建遵循预操作更新插件时的CRM 2013执行顺序

时间:2014-09-04 22:31:37

标签: c# dynamics-crm microsoft-dynamics dynamics-crm-2013

我有一个插件,它在事件实体的预操作更新中触发。 filtered属性为new_SecureIncident。

作为插件执行的一部分,我在另一个名为Secure Access的实体中创建了一个新记录(该实体具有Look up to Incident实体)。

此外,作为此Pre Operate的一部分,我更新了Incident实体上的特定字段new_DocumentSetURL。

这是我设置它的方式。

Incident incidentBeforeUpdate = (context.PreEntityImages != null && context.PreEntityImages.Contains(this.PreImageAlias)) ? context.PreEntityImages[this.PreImageAlias].ToEntity<Incident>() : null;
Incident incident = (context.InputParameters != null && context.InputParameters.Contains(Target) && context.InputParameters[Target] is Entity) ? ((Entity)context.InputParameters[Target]).ToEntity<Incident>() : null;

我稍后更新new_DocumentSetURL的值,如下所示

incident.new_DocumentSetURL = incidentDocumentURL;

现在,我在Secure Access实体上也有一个Post Operation Create Plugin。

问题:

安全访问插件仍具有new_DocumentSetURL的旧值。如何组织我的插件,以便安全访问实体上的创建插件获取正确的DocumentSetURL值?

完整流程说明

事件预更新将Web服务调用到SharePoint。此WCF Web服务调用将输入参数作为DocumentSetURL值并返回已修改的值。我使用修改后的DocumentSetURL更新了事件。

然后,我创建一个新的安全访问记录。这再次调用WCF Web服务,它需要两个参数,DocumentSetURL(安全访问查找)和安全访问的名称(主要属性)。

请注意,也可以手动创建安全访问记录。所以,我只是调用service.Create(new_secureaccess)而不是在事件的PreUpdate中编写安全访问的PostCreate功能。

这样,我只需要编写一次安全访问的PostCreate,无论是手动创建还是自动创建(通过PreUpdate of Incident插件)都可以调用它。

1 个答案:

答案 0 :(得分:1)

听起来这个问题可能就是操作的顺序。

您正在事件的PreOp阶段创建安全访问记录,因此您为incident.new_DocumentSetURL设置的值尚未提交到数据库;因此,您尝试从新创建的安全访问记录的链接事件中检索此属性只“知道”旧记录。

相反,将创建安全访问记录的逻辑移动到事件的PostOp。在对incident.new_DocumentSetURL的更改已保存到数据库之后

如果您愿意,可以将事件PreOp中的整个逻辑移动到PostOp(因此所有逻辑都在一个位置),但这需要您在调用service.Update(incident)之后调用由于处理阶段而设置值。如果你走这条路线,请确保在创建安全访问记录之前更新事件(因此操作顺序不起作用)。