事件框架
Microsoft Dataverse 公开事件,以指示流程当前正在管道中的哪个位置执行。 您可以处理这些事件以执行一些操作,例如验证数据、阻止交易记录完成或自动执行无法通过声明性方式完成的任何业务逻辑。
您可以通过注册 .NET 程序集(称为插件)来订阅这些事件,以在给定事件发生时执行自定义逻辑。 您使用名为 Plugin Registration Tool 的工具执行注册。 有关 Plugin Registration Tool 的详细信息,请参阅注册插件教程。
在高级别上,处理事件涉及三个操作。 首先,您必须订阅表示当前正在发生(或即将发生)的操作(或事件)类型的特定消息,例如创建、检索、更新等。您还必须指示希望逻辑在该事件管道中执行的位置(即在操作之前或之后)。 您还可以在进行验证之前处理事件,您可以使用这个便捷方法来执行无法通过业务规则或工作流完成的高级验证逻辑。 最后,您必须指示希望逻辑运行的执行模式(同步或异步)。
现在,我们将详细了解以下三个领域。
事件消息
Dataverse 公开许多在发生各种数据操作时发布的消息。 有关这些消息的详细信息,请参阅将消息用于组织服务。
Dataverse 公开的基本数据操作包括:
创建
检索
检索多个
更新
删除
关联
解除关联
此外,有各种在上下文中公开的消息,具体取决于要处理的表类型。 例如,如果我的表具有汇总列,我可以在 CalculateRollupField 事件消息中实现事件处理程序。
通常,我们可以通过在 Microsoft.Sdk.Messages 命名空间中搜索其名称以 \Request 结尾的任何类,找到这些通过 Dataverse 提供的自定义消息的清单。 查看为给定表类型提供哪些消息的另一种方法是,通过 Plug-in Registration Tool 导航表消息组合。
此外,我们可以通过创建自定义操作 来创建和公开我们自己的消息。 有关操作的详细信息,请参阅创建您自己的操作。
事件管道
除了订阅特定消息或事件类型之外,Dataverse 还公开了一种方法,指定事件在管道中的哪个位置执行您的自定义逻辑。 对于 ASP.NET 开发人员,这就像在 Web 应用程序中处理页面生命周期的方式。 这种方法是发布-订阅体系结构的一种常见开发模式,具有其他事件框架经验的开发人员应该熟悉本模式。
预验证
在执行任何安全检查之前,首先在管道中发生预验证事件。 使用该事件是为了确保执行当前交易的用户具有执行预期操作所需的正确权限。
作为开发人员,您可以使用此事件运行验证逻辑,并且可以在进行交易前取消该操作。 例如,如果已配置为在更新表时运行,您就可以通过在插件的执行逻辑中引发 InvalidPluginExecutionException 方法,在进行更新前取消该操作。 有关执行上下文的详细信息,请参阅了解执行上下文。
预操作
如果要在保存表之前更改表的任何值,请使用此事件。
后操作
使用此事件可先修改任何消息属性,然后请求者才能获得回复。 避免此时对相应的表应用更新,因为它将触发另一个更新事件。
执行模式(同步与异步)
您可以将插件配置为同步或异步运行,具体取决于要处理的管道操作的类型。
同步
在本模式中注册的插件将在事件处理到达执行管道阶段后立即运行,并且直到逻辑完成执行,整个操作才会继续。 如果已注册多个插件以针对同一管道阶段运行,则执行顺序属性(通过 Plug-in Registration Tool 指定)将确定首先运行哪个插件。
异步
在本模式中注册的插件作为系统作业分派给异步服务,可在给定操作完成后执行其逻辑。 有关系统作业的工作原理的详细信息,请参阅异步服务。
注意
您只能为事件管道的 PostOperation 阶段注册异步插件。