`
王三
  • 浏览: 175062 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ABAP Object 之 Event

    博客分类:
  • ABAP
阅读更多
OO特点是什么,封装,多态,继承. 在当下流行的编程语言中, 支持面向对象成为了最大的共同点,比如JAVA, C#.等. 而对于ABAP语言, 90年代后期, SAP对ABAP/4进行了扩展以支持面向对象, 称之为ABAP Objects. 其广泛应用在如SAP EnjoySAP controls, RTTS, Workflow, WebDynpro等之中. 比如说NW7.0中ALV的OO模型,将List与Grid的实现进行封装到一个类中, 而你只需要更改一下构造参数即可分别支持List与Grid输出.

ABAP Objects 同其它支持OO的语言一样也支持封装,多态,继承. 而比较有意思的一点是其在语言级别支持定义事件,使得在ABAP中非常容易实现订阅—发布机制. 这跟在JAVA中支持观察者模式差不多, 都是在当一个对象的状态发生改变时,可以通知多个依赖于它的对象, 而发布者对于有哪些订阅者并不感兴趣, 从而将两者之间的关系松耦合.事件发生时, 事件的触发者并不知道有哪些对象会作出回应, 其对事件如何进行处理.

看个实例

场景: 一个产品当改变价格时,需要通知多个客户, 价钱已更改, 另外由日志类记录日志.

1. 定义事件

priceChanged

CLASS lcl_product DEFINITION.

PUBLIC SECTION.

EVENTS: pricechanged.

PRIVATE SECTION.

DATA: price TYPE i.

ENDCLASS. "lcl_product DEFINITION

2. 定义如何触发

CLASS lcl_product DEFINITION.

PUBLIC SECTION.

EVENTS: pricechanged.

METHODS:

raise_event.

PRIVATE SECTION.

DATA: price TYPE i.

ENDCLASS. "lcl_product DEFINITION

CLASS lcl_product IMPLEMENTATION.

METHOD raise_event.

WRITE: / '------------------------------------'.

WRITE: / 'Before event trrigger'.

RAISE EVENT pricechanged.

WRITE: / 'After event trrigger'.

WRITE: / '------------------------------------'.

ENDMETHOD. "raise_event

ENDCLASS. "lcl_product IMPLEMENTATION

3. 定义事件处理

*----------------------------------------------------------------

* CLASS lcl_customer

*----------------------------------------------------------------

CLASS lcl_customer DEFINITION.

PUBLIC SECTION.

METHODS:

handle_price_changed FOR EVENT pricechanged OF lcl_product

IMPORTING sender.

ENDCLASS. "lcl_customer DEFINITION

CLASS lcl_customer IMPLEMENTATION.

METHOD handle_price_changed.

WRITE: / ' Customer handle changed price'.

ENDMETHOD. "handle_price_changed

ENDCLASS. "lcl_customer IMPLEMENTATION

*----------------------------------------------------------------

* CLASS lcl_logger

*----------------------------------------------------------------

CLASS lcl_logger DEFINITION.

PUBLIC SECTION.

METHODS:

handle_price_changed FOR EVENT pricechanged OF lcl_product

IMPORTING sender.

ENDCLASS. "lcl_logger DEFINITION

CLASS lcl_logger IMPLEMENTATION.

METHOD handle_price_changed.

WRITE: / ' Logger log changed price'.

ENDMETHOD. "handle_price_changed

ENDCLASS. "lcl_logger IMPLEMENTATION

4. 注册事件处理

* Create object instances

CREATE OBJECT grf_product.

CREATE OBJECT grf_customer.

CREATE OBJECT grf_logger.

* Register event

SET HANDLER grf_customer->handle_price_changed FOR grf_product.

SET HANDLER grf_logger->handle_price_changed FOR grf_product.

* Trigger event

grf_product->raise_event( ).

很美妙的事情, 我们并不需要直接发送消息给客户,日志类,就可以让他们知道价格已更改, 从而使代码松耦合.
分享到:
评论

相关推荐

    SAP ABAP OBJECT 面向对象开发 (IBM官方培训教程)

    ABAP中的事件处理使用`RAISE EVENT`和`HANDLE EVENT`关键字。 7. **构造函数与析构函数**:构造函数在对象创建时被调用,用于初始化对象的状态;析构函数在对象销毁前执行,释放资源。在ABAP中,`CONSTRUCTOR`和`...

    abap 如何刷新序号

    在ABAP中,ALV(Application List Viewer)是用于显示表格数据的强大工具之一。在处理大量数据时,ALV提供了丰富的功能来优化数据展示,包括排序、过滤、分组等操作。其中,序号控制是ALV中的一个重要功能,特别是在...

    sap abap oo实现alv框可编辑

    本文将详细介绍如何使用面向对象编程(Object-Oriented Programming,OOP)在SAP ABAP中实现ALV框的可编辑功能。 首先,我们需要定义一个事件接收器类(Event Receiver Class),用于处理ALV框中的事件。在这个类中...

    SAP ABAP基本语法

    `CLASS`,`DEFINITION`,`ENDCLASS`,`CREATE OBJECT`等关键字用于创建和使用类。 11. **数据库访问**: ABAP提供了丰富的数据库操作功能,如`SELECT`,`INTO`,`FROM`,`WHERE`用于查询数据库,`UPDATE`和`DELETE...

    ABAP ALV面向对象方法

    lo_grid->set_event_handler( EXPORTING event_handler = lo_grid_handler ). lo_grid->display( ). ``` 这段代码首先定义了一个包含材料编号和工厂编号的简单数据表`lv_data_tab`。然后创建了一个`cl_salv_table`...

    Abap编程手册.doc

    2. 报表(Reports):报表主要用于读取数据库并生成数据列表,它们是独立的程序模块,根据不同的事件(Depending Event)进行调用。 3. 对话(Dialog):对话模块专门处理与数据库交互的事务处理,如屏幕参数输入,...

    ABAP 个人笔记-我的SAP学习

    ABAP 有三种类型的处理块:Event blocks、Dialog Modules、Procedures。只有 Procedures 可以拥有自己的局部变量,而且程序语句是内部调用,而前两者处理块之间实行外部调用。 四、应用程序类型 应用程序类型可以...

    abap学习资料.zip

    - ABAP支持面向对象编程,包括类(Class)、对象(Object)和继承(Inheritance)。 - ABAP的对象模型基于公共接口(Interface)和抽象类(Abstract Class)。 - 构造函数(Constructor)用于创建对象,析构函数...

    abap4中文培训资料

    2. 对象(Object):类的实例,具有类定义的属性和行为。 3. 继承(Inheritance):一个类可以继承另一个类的属性和方法。 4. 封装(Encapsulation):通过访问控制(PUBLIC, PROTECTED, PRIVATE)来保护数据和方法...

    SAP ABAP4中文培训资料

    ABAP4引入了面向对象的概念,如类(CLASS)、对象(OBJECT)、继承(INHERITING FROM)、多态性(OVERLOADING)、接口(INTERFACE)等,使得代码更易于维护和扩展。 五、数据库访问 ABAP4提供了一系列的数据库通信...

    ABAP Objects

    - **对象(Object)**:对象是类的实例,它拥有类定义的属性和方法。每个对象都可以有自己的状态,即属性值的独立副本。 2. **继承(Inheritance)**: - ABAP Objects支持单继承,一个类可以从另一个类继承其...

    ABAP_ALV_知识整理

    CREATE OBJECT lo_cl_salv_table. lo_cl_salv_table->initialize( ). lo_cl_salv_table->set_table_for_first_display( itab = lt_data ). lo_cl_salv_table->display( ). ``` #### 四、注意事项 - **性能考虑**: ...

    TAW10 ABAP Certification Test Part 2.pdf

    根据提供的文件信息,我们可以推断出这是一份与ABAP(Advanced Business Application Programming)认证测试相关的文档,专注于面向对象编程(Object-Oriented Programming, OOP)的概念和技术。以下是对文档中提到...

    在ALV里编写回车事件

    * IMPORTINGe_objecte_interactive, user_command FOREVENTuser_commandOFcl_gui_alv_grid IMPORTINGe_ucomm, handle_data_changed FOREVENTdata_changedOFcl_gui_alv_grid IMPORTINGer_data_changed. ...

    sm30 change document

    ABAP中的event有很多,如01(显示)、02(输入)、03(新增)、04(修改)、05(删除)等,每个event都有其特定的用途和行为。 4. 对于参数的使用,需要特别注意Unicode系统和non-Unicode系统的不同。在non-Unicode...

    事件处理类的使用说明1

    CREATE OBJECT go_event_field EXPORTING io_alv = go_alv_field i_f4_form = 'HANDLE_F4' i_toolbar_form = 'HANDLE_TOOLBAR_FIELD' i_user_command_form = 'HANDLE_USER_COMMAND_FIELD' i_double_click_form...

    BASIS Discription

    1. **Object Navigator (SE80)** 是ABAP开发的核心工具,提供了对所有ABAP对象的访问,如程序、功能模块、类等。其他常用事务代码包括: - **SE38**:用于编辑和运行ABAP报告。 - **SE24**:用于编辑和维护ABAP类...

    手把手教你开发FPM程序

    2. OIF(Object Instance Floorplan):使用的时候引用 FPM_OIF_COMPONENT。进去之后默认只有一个 Tab UIBB 为主界面,所有其它的 UIBB 要加到这个 Tab UIBB 中去,缺点就是 raise 出来的 event 只有当前显示的那个 ...

Global site tag (gtag.js) - Google Analytics