gpt4 book ai didi

c# - 当操作后创建遵循操作前更新插件时的 CRM 2013 执行顺序

转载 作者:太空宇宙 更新时间:2023-11-03 13:17:16 24 4
gpt4 key购买 nike

我有一个插件,它在事件实体的预操作更新时被触发。过滤后的属性是 new_SecureIncident。

作为插件执行的一部分,我在另一个名为 Secure Access 的实体中创建了一条新记录(该实体有一个 Look up to 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 上的插件仍然具有 new_DocumentSetURL 的旧值。我如何组织我的插件,以便 Secure Access 实体上的创建插件选择正确的 DocumentSetURL 值?

完整流程描述

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

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

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

这样一来,我只需编写一次 Secure Access 的 PostCreate,无论它是手动创建还是自动创建(通过事件插件的 PreUpdate),它都会被调用。

最佳答案

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

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

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

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

关于c# - 当操作后创建遵循操作前更新插件时的 CRM 2013 执行顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25675974/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com