如何防止在使用 Web 服务更新实体时触发 Dynamics CRM 插件执行?
How to prevent firing Dynamics CRM Plugin execution while updating an entity using web service?
我已经为我的 Dynamics CRM 实现了一个插件,它触发了事件实体的更新消息。
我还有一个供外部用户使用的 Web 服务,它可以从外部更新事件实体的两个属性。
问题是当外部用户使用网络服务更新实体时,插件也会触发。
我想绑定将在事件实体更改时仅在 CRM 内部触发的插件,并防止它被外部请求触发。
我在我的插件中检查了以下条件以防止无限循环并且它有效但不能防止外部更新请求触发。
if (context.Depth > 1 ||
context.Mode != 1 ||
context.MessageName != "Update" ||
context.IsolationMode != 1)
{
return;
}
为了注册插件,我使用了插件注册工具并将步骤消息设置为更新,并且在用户上下文中 运行 作为调用用户。
在我的网络服务中,我使用 Xrm.Sdk
和 Xrm.Sdk.Client
连接到 CRM 并直接更新实体。
ColumnSet cs = new ColumnSet(new string[] {
"description", "statuscode"
});
Guid recordId = new Guid(caseID);
Entity currentRecord = crmService.Retrieve("incident", recordId, cs);
OptionSetValue osv = new OptionSetValue(1);
currentRecord["statuscode"] = osv;
currentRecord["new_answers"] = answer;
currentRecord["new_lastanswerdate"] = currentDate;
crmService.Update(currentRecord);
任何人都有任何想法 - 当实体从 CRM 外部更新时,如何防止插件触发?
插件在每个服务器事务中执行并被触发,这是预期的行为(这就是全部目的)。
您可以使用一些其他标志(附加属性或任何服务帐户),这些标志只能通过外部集成获得 updated/used,在这种情况下,您可以签入执行 context/target 实体并忽略进一步执行.
对于外部集成 - 您应该创建一个应用程序用户(非交互式服务帐户)。 Read more
我已经为我的 Dynamics CRM 实现了一个插件,它触发了事件实体的更新消息。 我还有一个供外部用户使用的 Web 服务,它可以从外部更新事件实体的两个属性。
问题是当外部用户使用网络服务更新实体时,插件也会触发。 我想绑定将在事件实体更改时仅在 CRM 内部触发的插件,并防止它被外部请求触发。
我在我的插件中检查了以下条件以防止无限循环并且它有效但不能防止外部更新请求触发。
if (context.Depth > 1 ||
context.Mode != 1 ||
context.MessageName != "Update" ||
context.IsolationMode != 1)
{
return;
}
为了注册插件,我使用了插件注册工具并将步骤消息设置为更新,并且在用户上下文中 运行 作为调用用户。
在我的网络服务中,我使用 Xrm.Sdk
和 Xrm.Sdk.Client
连接到 CRM 并直接更新实体。
ColumnSet cs = new ColumnSet(new string[] {
"description", "statuscode"
});
Guid recordId = new Guid(caseID);
Entity currentRecord = crmService.Retrieve("incident", recordId, cs);
OptionSetValue osv = new OptionSetValue(1);
currentRecord["statuscode"] = osv;
currentRecord["new_answers"] = answer;
currentRecord["new_lastanswerdate"] = currentDate;
crmService.Update(currentRecord);
任何人都有任何想法 - 当实体从 CRM 外部更新时,如何防止插件触发?
插件在每个服务器事务中执行并被触发,这是预期的行为(这就是全部目的)。
您可以使用一些其他标志(附加属性或任何服务帐户),这些标志只能通过外部集成获得 updated/used,在这种情况下,您可以签入执行 context/target 实体并忽略进一步执行.
对于外部集成 - 您应该创建一个应用程序用户(非交互式服务帐户)。 Read more