ALV com Evento – Usando a Técnica “Pura”
Problema
Alterar o relatório ZPURE_ALV_FIELDCAT implementado nesse post, para que seja monstrado uma mensagem quando o usuário der um duplo clique.
Nessa mensagem, deve ser apresentado “Você deu duplo clique na coluna & e linha &.”, onde & deverá ser substituído pelo nome da coluna e linha onde ocorreu o duplo clique.
Solução
Passo 1: Criar um novo include no programa principal. Para isso, colocar a instrução INCLUDE na seguinte posição:
Dar um duplo clique no nome do include e confirmar a criação do novo objeto. Garanta que o novo objeto seja to tipo include:

Passo 2: Criar uma classe local para receber e manipular o evento double_click do ALV:
Passo 3: Criar um objeto e registrar o evento no module PBO:
Agora você pode ativar o seu programa e testar.
Execução e Teste
Para executar e testar o programa, apenas pressione F8 ou :
Dar um duplo clique em qualque linha e aí uma mensagem deverá ser apresentada:

Discussão
Introdução a Eventos
Para eventos sempre temos dois objetos envolvidos, um sender e outro handler. Ou seja, um objeto que dispara o evento e outro que recebe o evento.
A principal característica é que o objeto que envia/dispara o evento não sabe quem é que receberá esse evento. Essa é a grande diferênça entre eventos e chamada de métodos. Quando chamamos um método temos que necessariamente saber de qual objeto estamos invocando aquele método.
Um bom exemplo do conceito de eventos é o caso dos passageiros no avião. No avião temos um botão em nossa poltrona que chama o comissário ou comissária para nos atender em alguma solicitação.
Quando apertamos o botão (disparamos um evento) um aviso é dado na “sala de comissários”, e um dos deles virá lhe atender. Repare que você não sabe qual comissário (classe) irá lhe atender, até que o comissário apareça (objeto).
Implementando Eventos
Para implementar um evento, precisamos de 4 passos:
Na classe Sender:
i – Declarar o nome do evento, usando a declaração EVENTS na DEFINITION da classe sender.
ii – Disparar o evento no método onde o evento deve ser disparado, usando o comando RAISE EVENT .
Na classe Handler:
iii – Definir qual método irá responder ao evento, adicionando a cláusula … FOR EVENT FOR .
iv – Registrar o evento, com o comando SET HANDLER.
O registro do evento é responsável por ativar e desativar o evento em tempo de execução (run time).
Voltando ao nosso exemplo do avião, há determinados momentos que os comissários não atenderão a nenhuma solicitação, como por exemplo nas decolagens e aterrisagens. Ou seja, o evento continua sendo disparado (passageiro apertando o botão de chamado) e o sinal continua sendo tocado na “sala de comissários”. No entanto, os comissários não lhe atenderão.
O registro de um evento também pode ser seletivo quando a qual objeto o evento será registrado. Por isso temos FOR ALL INSTANCES no comando SET HANDLER. Nesse ponto, podemos definir para qual objeto queremos registrar o evento.
Isso é vital para os casos que temos mais de um grid na tela e queremos responder ao evento de apenas um deles.
Implementando o Evento no ALV
No programa implementado acima, os passos i e ii já foram implementados pela classe standard CL_GUI_ALV_GRID e não precisamos nos preocupar com isso.
Precisamos apenas definir qual classe e método irá responder ao evento. Além disso devemos registrar o evento.
Para isso, devemos identificar o evento e parâmetros que esse evento usará:

Com o evento selecionado, clicar em para acessar os parâmetros do evento:
Anexos
Veja Também
ALV at SAP Help
Introdução ao ALV – Série Especial
ALV Simples – Usando a Técnica “Pura”
ALV com Field Catalog – Usando a Técnica “Pura”

Ótimo post!!!
Bom ver dicas orientadas a objeto.
Eu costumo registrar um FORM que recebe o evento, mas é muito limitado.
Não sei porque mas nunca pego programas com ALV orientadas a objeto para manutenção ou expansão. Quando é um novo desenvolvimento, a especificação nunca vem citando classes, nem interfaces para implementar =[, somente módulos de funções…