Implementação de manipuladores de eventos personalizados

Objective

After completing this lesson, you will be able to use .after manipuladores de eventos para enriquecer dados de saída

Registrando .after manipuladores de eventos

Tendo discutido um exemplo de um manipulador before acima, vejamos a implementação de um manipulador after.

Depois que os manipuladores são executados após os manipuladores de on e são frequentemente usados para enriquecer dados de saída.

Como exemplo, criaremos um pós-manipulador para nosso CatalogService: Queremos conceder um desconto de 11% para livros com estoque superior a 200. Para isso, a cadeia de caracteres " -- 11% de desconto!" deve ser anexado ao título de todos os livros cujo estoque exceda 200 por meio de um manipulador posterior.

Procedemos da mesma forma que com a implementação do manipulador before. Em outras palavras, criamos um arquivo chamado cat-service.js na pasta srv do nosso projeto, já que essa pasta também contém o arquivo cat-service.cds, que é usado para definir o CatalogService (veja a figura a seguir).

De forma análoga ao que discutimos com o manipulador anterior, criamos uma subclasse de cds.ApplicationService no arquivo cat-service.js, que chamamos de CatalogService.

Para manipular o título do livro, agora precisamos de um manipulador after, que deve ser registrado para operações de LEITURA na entidade Livros. Para isso, sobregravamos o método init() herdado na classe de implementação criada (consulte a figura a seguir).

Para registrar um manipulador After-Handler no método init() , chame o método after() herdado via this.after(). O método after() tem a seguinte interface. Uma descrição detalhada dos parâmetros individuais pode ser encontrada na documentação CAP.

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

No exemplo mostrado, registramos a função nomeada this.grantDiscount para operações de LEITURA na entidade Livros. Para isso, procedemos de forma análoga ao registro do manipulador anterior discutido acima.

Enriquecimento de dados de saída

Agora, vamos explorar como a função grantDiscount, que foi registrada como um manipulador posterior, pode ser implementada na classe CatalogService.

Depois que os manipuladores recebem dois argumentos:

  • resultados

    os resultados do manipulador de entrada que funcionavam antes

  • req

    uma instância de cds.Request

Para nosso exemplo, só precisamos do parâmetro de resultados, que é uma matriz dos livros recuperados (veja a figura a seguir).

Implementamos um loop sobre a matriz com os livros e acrescentamos a cadeia de caracteres " -- 11% Discount!" ao título dos livros cuja ação é superior a 200.

Demonstração e exercício: fornecer um .after manipulador de eventos

Nota

Como exercício, execute as instruções passo a passo na demonstração a seguir no SAP Business Application Studio.

Como ponto de partida para o exercício, utilize o resultado do exercício anterior Fornecer um .antes do manipulador de eventos se você o tiver concluído com êxito. Como alternativa, você também pode utilizar a ramificação 11_.before_event_handler do seguinte repositório GitHub como ponto de partida:

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

A implementação completa da simulação pode ser encontrada no ramo 12_.after_event_handler do repositório GitHub.

Informações detalhadas sobre o conteúdo do repositório e como usá-lo podem ser encontradas aqui.

Assista ao vídeo para ver como fornecer um manipulador de eventos .after.