Syntax

SET HANDLER handler1 handler2 ... FOR { oref |{ALL INSTANCES} } 
                                  [ACTIVATION act].

Extras:

1. ... FOR oref

2. ... FOR ALL INSTANCES

3. ... ACTIVATION act

Effect

This statement registers the event handlers handler1 handler2 ... for the associated instance events of the objects specified after FOR. The addition ACTIVATION can be used to deregister event handlers or perform a dynamic registration.

An event handler is raised if the associated instance event is raised using RAISE EVENT in an object for which it is registered. An event handler handler can be specified as follows, where the names have the same meaning as in the explicit method call:

  • meth
  • oref->meth
  • class=>meth

Methods meth can be specified from the same class or from other classes defined as instance event handlers using the addition FOR EVENT evt OF {class|intf} of the statements [CLASS-]METHODS. No event handlers for static events can be specified. At least one name must be specified.

The type class or intf specified after FOR EVENT OF in the definition of an instance event handler defines the objects whose events it can handle. Single objects or all handleable objects can be specified after FOR.

Addition 1

... FOR oref

Effect

This addition registers or deregisters the event handlers of the list handler1 handler2 ... for exactly one object. oref is an object reference that must point to an object whose events can be handled by the specified event handlers. The class of the object must be class or a subclass of class, or must implement the interface intf directly or through a superclass.

oref is a functional operand position.

Example

Registers an event handler for an ALV event.

CLASS demo DEFINITION.
PUBLIC SECTION.
METHODS main.
PRIVATE SECTION.
DATA itab TYPE TABLE OF scarr.
METHODS handle_double_click
FOR EVENT double_click OF cl_salv_events_table.
ENDCLASS. CLASS demo IMPLEMENTATION.
METHOD main.
DATA alv TYPE REF TO cl_salv_table.
...
TRY.
cl_salv_table=>factory(
IMPORTING r_salv_table = alv
CHANGING t_table = itab ).
SET HANDLER handle_double_click FOR alv->get_event( ).
CATCH cx_salv_msg.
...
ENDTRY.
ENDMETHOD.
METHOD handle_double_click.
...
ENDMETHOD.
ENDCLASS.

  

Addition 2

... FOR ALL INSTANCES

Effect

This addition registers or deregisters the event handlers of the list handler1 handler2 ... for all objects whose events they can handle. These are all objects whose classes are either class or the subclass of class, or which implement the interface intf directly or through a superclass. A registration of this type is also valid for all raising instances created after the statement SET HANDLER.

Note

Registration with FOR ALL INSTANCES applies also in particular for temporary instances as they can be created when using the instantiaion operator NEW.

Addition 3

... ACTIVATION act

Effect

A single-character text-like field act can be specified after the addition ACTIVATION. If act has the value "X" (the default value), the event handlers handler are registered. If act has the value " ", however, the registration of the event handlers handler is canceled. A single registration cannot, on the other hand, be deregistered using mass deregistration. Conversely, individual raising objects cannot be excluded from registration after a mass registration.

Note

As long as the registration of an instance method as an event handler for an instance event is not canceled using ACTIVATION " " or all raising instances are deleted, the associated object cannot be deleted by the garbage collector. This is because it is still used by the runtime environment.

Example

Registers an event handler with FOR ALL INSTANCES. The events of all temporary instances created with NEW are handled until registration is stopped. The program can be executed as DEMO_SET_HANDLER_FOR_ALL.

CLASS cls DEFINITION.
PUBLIC SECTION.
EVENTS evt
EXPORTING VALUE(p) TYPE string DEFAULT `nop`.
METHODS meth
IMPORTING p TYPE string.
ENDCLASS. CLASS cls IMPLEMENTATION.
METHOD meth.
RAISE EVENT evt EXPORTING p = p.
ENDMETHOD.
ENDCLASS. CLASS hdl DEFINITION.
PUBLIC SECTION.
METHODS meth FOR EVENT evt OF cls
IMPORTING p.
ENDCLASS. CLASS hdl IMPLEMENTATION.
METHOD meth.
cl_demo_output=>write( p ).
ENDMETHOD.
ENDCLASS. START-OF-SELECTION.
DATA(href) = NEW hdl( ).
SET HANDLER href->meth FOR ALL INSTANCES. NEW cls( )->meth( `Ping 1`).
NEW cls( )->meth( `Ping 2`).
NEW cls( )->meth( `Ping 3`).

  

SET HANDLER href->meth FOR ALL INSTANCES ACTIVATION ' '.

NEW cls( )->meth( `Ping 4`). 
  NEW cls( )->meth( `Ping 5`). 
  NEW cls( )->meth( `Ping 6`).

cl_demo_output=>display( ).

SET HANDLER - FOR的更多相关文章

  1. android Handler介绍

    Handler使用介绍: Handler根据接收的消息,处理UI更新.Thread线程发出消息,通知Handler更新UI. Handler mHandler = new Handler() {  p ...

  2. Handler

    1.1 继承AbstractController优点:能定制请求方式 package cn.happyl.controller; import javax.servlet.http.HttpServl ...

  3. Android消息处理机制(Handler、Looper、MessageQueue与Message)

    Android是消息驱动的,实现消息驱动有几个要素: 消息的表示:Message 消息队列:MessageQueue 消息循环,用于循环取出消息进行处理:Looper 消息处理,消息循环从消息队列中取 ...

  4. Android笔记——Handler Runnable与Thread的区别

    在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口:Thread类是在java.lang包中定义的.一个类只要继承了Thread类同时覆写了本类中的run() ...

  5. Android消息传递之Handler消息机制

    前言: 无论是现在所做的项目还是以前的项目中,都会遇见线程之间通信.组件之间通信,目前统一采用EventBus来做处理,在总结学习EventBus之前,觉得还是需要学习总结一下最初的实现方式,也算是不 ...

  6. Handler系列之内存泄漏

    本篇简单的讲一下平常使用Handler时造成内存泄漏的问题. 什么是内存泄漏?大白话讲就是分配出去的内存,回收不回来.严重会导致内存不足OOM.下面来看一下造成内存泄漏的代码: public clas ...

  7. Handler系列之创建子线程Handler

    上一篇我介绍了Handler机制的工作原理,默认情况下,ActivityThread类为我们创建的了主线程的Looper和消息队列,所以当你创建Handler之后发送消息的时候,消息的轮训和handl ...

  8. Handler系列之原理分析

    上一节我们讲解了Handler的基本使用方法,也是平时大家用到的最多的使用方式.那么本节让我们来学习一下Handler的工作原理吧!!! 我们知道Android中我们只能在ui线程(主线程)更新ui信 ...

  9. Handler系列之使用

    作为一个Android开发者,我们肯定熟悉并使用过Handler机制.最常用的使用场景是"在子线程更新ui",实际上我们知道上面的说话是错误的.因为Android中只有主线程才能更 ...

  10. 阶段一:用Handler和Message实现计时效果及其中一些疑问

    “阶段一”是指我第一次系统地学习Android开发.这主要是对我的学习过程作个记录. 本来是打算继续做天气预报的优化的,但因为某些原因,我要先把之前做的小应用优化一下.所以今天就插播一下用Handle ...

随机推荐

  1. 天池精准医疗大赛——人工智能辅助糖尿病遗传风险预测

    作为天池上的新手,第一次参加天池阿里云线上的比赛,糖尿病预测, 一般的数据挖掘比赛,流程:数据清洗,特征工程(找特征,特征组合),不断的尝试的不同算法,不断调参,也可以考虑将多个模型进行线性组合 大赛 ...

  2. FLV视频封装格式详解

    FLV视频封装格式详解 分类: FFMpeg编解码 2012-04-04 21:13 1378人阅读 评论(2) 收藏 举报 flvheaderaudiovideocodecfile 目录(?)[-] ...

  3. There was a problem confirming the ssl certificate: [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:661) - skipping

    Could not fetch URL https://pypi.python.org/simple/xlrd/: There was a problem confirming the ssl cer ...

  4. JavaScript 变量声明提升

    JavaScript 变量声明提升 一.变量提升的部分只是变量的声明,赋值语句和可执行的代码逻辑还保持在原地不动 二.在基本的语句(或者说代码块)中(比如:if语句.for语句.while语句.swi ...

  5. BZOJ1089:[SCOI2003]严格n元树(DP,高精度)

    Description 如果一棵树的所有非叶节点都恰好有n个儿子,那么我们称它为严格n元树.如果该树中最底层的节点深度为d (根的深度为0),那么我们称它为一棵深度为d的严格n元树.例如,深度为2的严 ...

  6. 【[SDOI2014]数数】

    被慎老师教育数位\(dp\)怎么写了 看来我数位\(dp\)的写法太落后了 这道题很显然就是一个\(AC\)自动机上的数位\(dp\),按照套路 我们可以设计\(dp[i][j][0/1]\)表示匹配 ...

  7. indexzero/http-server-1-简介

    ethereumjs-vm的例子有用到这个 看完ethereumjs-vm,再看他ethereumjs/browser-builds,然后最后看他http-server,然后就能了解ethereumj ...

  8. Windows下Python3.6安装PIL

    PIL是Python平台事实上的图像处理标准库,需要用到图片的需要导入该模块 一 安装pip https://pip.pypa.io/en/stable/installing/#id8 python ...

  9. 关于SpringMVC整合freemarker报错问题

    错误信息: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'FreeMa ...

  10. js判断字符长度 汉字算两个字符

    方法一:使用正则表达式,代码如下: function getByteLen(val) { var len = 0; for (var i = 0; i < val.length; i++) { ...