实施 .after 自定义事件处理程序

Objective

After completing this lesson, you will be able to 使用 .after 事件处理器丰富外向数据

正在注册 .after 事件处理程序

在讨论了上述 before 处理程序的示例之后,接下来我们来看一下 after 处理器的实现。

在处理器上的 之后执行处理器,通常用于丰富出站数据。

例如,我们将为目录服务创建处理程序:对于库存超过 200 的书,我们希望提供 11% 的折扣。为此,使用字符串" -- 11% 折扣!"通过 after handler 将 附加到库存超过 200 的所有书的标题中

我们以与实施之前处理器相同的方式进行。换句话说,我们在项目的 srv 文件夹中创建名为 cat-service.js 的文件,因为此文件夹还包含用于定义 CatalogService 的文件 cat-service.cds(请参阅下图)。

之前处理器讨论的内容类似,我们在 cat-service.js 文件中创建 cds.ApplicationService 的子类,我们将其称为 CatalogService

为了操作书名,我们现在需要一个处理程序,该处理器应该在 Books 实体上注册 READ 操作。为此,我们在创建的实施类中覆盖继承的 init() 方法(请参阅下图)。

要在 init() 方法中注册 after 处理程序,请通过 this.after() 调用继承的 after() 方法。after() 方法具有以下接口。可在 CAP 文档中找到各个参数的详细描述。

Code Snippet
12345
function after ( event : string | string[] | '*', entity? : CSN definition | CSN definition[] | string | string[] | '*', handler : function )

在所示示例中,我们为 Books 实体上的 READ 操作注册指定的函数 this.grantDiscount。为此,我们像上面讨论的前一个处理程序一样进行注册。

增强外向数据

现在,让我们了解如何在 CatalogService 类上实现已注册为 after 处理程序的 grantDiscount 函数。

处理程序收到两个参数

  • 结果

    之前运行的 on 处理器的结果

  • 请求

    的实例 cds.Request

在我们的示例中,我们仅需要 results 参数,该参数是检索到的书籍数组(请参阅下图)。

我们在包含书籍的数组上实现循环,并附加字符串 " -- 11% Discount!"至库存大于 200 的书籍的标题。

演示和练习:在事件处理器之后提供 .after

注意

在练习中,在 SAP Business Application Studio 中自行执行以下演示中的分步说明。

作为练习的起点,如果已成功完成,请使用之前的练习 在事件处理器之前提供 的结果。或者,您还可以使用以下 GitHub 资源库中的分支 11_.before_event_handler 作为起点:

https://github.com/SAP-samples/cap-development-learning-journey

可在 GitHub 资源库的 12_.after_event_handler 分支中找到模拟的完整实施。

有关资源库内容及其使用方法的详细信息,可在此处找到。

观看视频,了解如何提供 .after 事件处理程序。