ABAP_OBJECTS

SPAN { font-family: "Courier New"; font-size: 10pt; color: #000000; background: #FFFFFF; } .L1S31 { font-style: italic; color: #808080; } .L1S32 { color: #3399FF; } .L1S33 { color: #4DA619; } .L1S52 { color: #0000FF; } REPORTdemo_abap_objects.

*---------------------------------------------------------------------*
*GlobalSelectionScreen
*---------------------------------------------------------------------*

SELECTION-SCREENBEGINOFSCREEN100ASWINDOWTITLEtext-100.
PARAMETERS:button1RADIOBUTTONGROUPgrp,
button2RADIOBUTTONGROUPgrp,
button3RADIOBUTTONGROUPgrp,
button4RADIOBUTTONGROUPgrp.
SELECTION-SCREENENDOFSCREEN100.

*---------------------------------------------------------------------*
*INTERFACEstatus
*---------------------------------------------------------------------*
*Interfacedefinition*
*---------------------------------------------------------------------*
INTERFACEstatus.
METHODSwrite.
ENDINTERFACE.

*---------------------------------------------------------------------*
*CLASSvesselDEFINITION
*---------------------------------------------------------------------*
*Superclassdefinition*
*---------------------------------------------------------------------*
CLASSvesselDEFINITION.
PUBLICSECTION.
METHODS:constructor,
driveIMPORTINGspeed_upTYPEi,
get_idRETURNINGvalue(id)TYPEi.
PROTECTEDSECTION.
DATA:speedTYPEi,
max_speedTYPEiVALUE100.
PRIVATESECTION.
CLASS-DATAobject_countTYPEi.
DATAidTYPEi.
ENDCLASS.

*---------------------------------------------------------------------*
*CLASSvesselIMPLEMENTATION
*---------------------------------------------------------------------*
*Superclassimplementation*
*---------------------------------------------------------------------*
CLASSvesselIMPLEMENTATION.
METHODconstructor.
object_count=object_count+1.
id=object_count.
ENDMETHOD.
METHODdrive.
speed=speed+speed_up.
IFspeed>max_speed.
speed=max_speed.
ENDIF.
ENDMETHOD.
METHODget_id.
id=me->id.
ENDMETHOD.
ENDCLASS.

*---------------------------------------------------------------------*
*CLASSshipDEFINITION
*---------------------------------------------------------------------*
*Subclassdefinition*
*---------------------------------------------------------------------*
CLASSshipDEFINITIONINHERITINGFROMvessel.
PUBLICSECTION.
INTERFACESstatus.
DATAnameTYPEstringREAD-ONLY.
METHODS:constructorIMPORTINGnameTYPEstring,
driveREDEFINITION.
EVENTSemergency_call.
ENDCLASS.

*---------------------------------------------------------------------*
*CLASSshipIMPLEMENTATION
*---------------------------------------------------------------------*
*Subclassimplementation*
*---------------------------------------------------------------------*
CLASSshipIMPLEMENTATION.
METHODconstructor.
CALLMETHODsuper->constructor.
max_speed=30.
me->name=name.
ENDMETHOD.
METHODstatus~write.
DATAid.
id=me->get_id().
WRITE:/name,'isvessel',id,
'andhasspeed',speed.
ENDMETHOD.
METHODdrive.
speed=speed+speed_up.
IFspeed>max_speed.
max_speed=0.
speed=0.
RAISEEVENTemergency_call.
ENDIF.
ENDMETHOD.
ENDCLASS.

*---------------------------------------------------------------------*
*CLASScoast_guardDEFINITION
*---------------------------------------------------------------------*
*Eventhandlerdefinition*
*---------------------------------------------------------------------*
CLASScoast_guardDEFINITION.
PUBLICSECTION.
INTERFACESstatus.
METHODSreceiveFOREVENTemergency_callOFshipIMPORTINGsender.
ALIASESwriteFORstatus~write.
PRIVATESECTION.
DATAcallerTYPEstring.
ENDCLASS.

*---------------------------------------------------------------------*
*CLASScoast_guardIMPLEMENTATION
*---------------------------------------------------------------------*
*Eventhandlerimplementation*
*---------------------------------------------------------------------*
CLASScoast_guardIMPLEMENTATION.
METHODstatus~write.
IFcallerISINITIAL.
WRITE:/'Coastguardreceivednocall'.
ELSE.
WRITE:/'Coastguardreceivedacallfrom',caller.
ENDIF.
ENDMETHOD.
METHODreceive.
caller=sender->name.
CALLMETHODwrite.
ENDMETHOD.
ENDCLASS.

*---------------------------------------------------------------------*
*CLASSmainDEFINITION
*---------------------------------------------------------------------*
*Mainclassdefinition*
*---------------------------------------------------------------------*
CLASSmainDEFINITION.
PUBLICSECTION.
CLASS-METHODS:start,
objects,
inheritance,
interfaces,
events.
ENDCLASS.

*---------------------------------------------------------------------*
*CLASSmainIMPLEMENTATION
*---------------------------------------------------------------------*
*Mainclassimplementation*
*---------------------------------------------------------------------*
CLASSmainIMPLEMENTATION.

METHODstart.
CALLSELECTION-SCREEN100STARTINGAT103
ENDINGAT427.
IFsy-subrcNE0.
EXIT.
ELSEIFbutton1='X'.
CALLMETHODobjects.
ELSEIFbutton2='X'.
CALLMETHODinheritance.
ELSEIFbutton3='X'.
CALLMETHODinterfaces.
ELSEIFbutton4='X'.
CALLMETHODevents.
ENDIF.
ENDMETHOD.

METHODobjects.
DATA:vessel1TYPEREFTOvessel,
vessel2TYPEREFTOvessel.
DATA:vessel_idTYPEi.
CREATEOBJECT:vessel1TYPEvessel,
vessel2TYPEvessel.
CALLMETHOD:vessel1->drive(50),
vessel2->drive(80).
vessel_id=vessel1->get_id().
WRITE:/'VesselIDis',vessel_id.
vessel_id=vessel2->get_id().
WRITE:/'VesselIDis',vessel_id.
ENDMETHOD.

METHODinheritance.
DATA:vesselTYPEREFTOvessel,
shipTYPEREFTOship.
CREATEOBJECTshipTYPEshipEXPORTINGname='Titanic'.
CALLMETHODship->drive(20).
MOVEshipTOvessel.
CALLMETHODvessel->drive(10).
CALLMETHODship->status~write.
ENDMETHOD.

METHODinterfaces.
DATA:status_tabTYPETABLEOFREFTOstatus,
statusTYPEREFTOstatus.
DATA:shipTYPEREFTOship,
stationTYPEREFTOcoast_guard.
CREATEOBJECT:shipEXPORTINGname='Titanic'.
APPENDshipTOstatus_tab.
CREATEOBJECTstation.
APPENDstationTOstatus_tab.
LOOPATstatus_tabINTOstatus.
CALLMETHODstatus->write.
ENDLOOP.
ENDMETHOD.

METHODevents.
DATA:shipTYPEREFTOship,
stationTYPEREFTOcoast_guard.
CREATEOBJECT:shipEXPORTINGname='Titanic',
station.
SETHANDLERstation->receiveFORship.
DO5TIMES.
CALLMETHODship->drive(10).
ENDDO.
ENDMETHOD.

ENDCLASS.

*---------------------------------------------------------------------*
*SystemeventSTART-OF-SELECTION
*---------------------------------------------------------------------*
*TriggeredbytheABAPruntimeenvironmentautomatically*
*---------------------------------------------------------------------*

START-OF-SELECTION.
CALLMETHODmain=>start.

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

让 ABAP 代码真正可维护:把 ABAP Objects 当成默认编程模型 摘要: SAP ABAP 系统存在过程式与面向对象(ABAP Objects)两种编程范式并存的现象,这是历史演进与向下兼容的结果。面向对象范式在封装性、多态性、接口隔离等方面更具优势,能有效应对复杂业务系统的可维护性与扩展性挑战。尽管经典处理块在远程调用、动态程序生成等场景仍有必要,但 SAP 官方推荐新开发优先采用 ABAP Objects,将其作为默认编程模型,而将传统范式作为少数兼容入口。现代技术栈(如 S/4HANA、RAP、BTP)也更倾向于面向对象设计,以支持云原生与模块化架构。 阅读详情

相关推荐

在 ABAP Objects、RAP 与 ABAP Cloud 时代,如何正确使用 Function Module 与 Subroutine

摘要 在ABAP开发中,Function Module和Subroutine曾是结构化编程的核心,但随着面向对象编程(OOP)的普及,它们已演变为技术适配层而非业务逻辑载体。现代ABAP开发应遵循核心原则:能用Method就不在Procedure中实现业务逻辑。Function Module仍适用于RFC远程调用、Update Task异步处理等特定场景,但应仅作为技术入口包装类方法。Subroutine的使用更需谨慎,仅用于必须依赖特定语句(如ON COMMIT回调)的场景,同样应封装为对类方法的调用。这

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2066

【VC基础】 5、对象相关性(Object Dependencies)

对象相关性(Object Dependencies) 对象相关性的创建与分配 1、创建对象相关性 事务代码:CU01 之前我们在CS01中直接双击OD维护创建的对象相关性是局部的(系统会自动给号),只限于该BOM中使用,那么创建一个全局的对象相关性就需要用到CU01(可以外部手动给号)。 在“相关性编辑器”中按照语法要求维护好之后保存即可。 2、分配对象相关性 事务代码:CS02 需要在BOM中使用的时候直接分配即可(附加→对象相关性→分配)。...

少年休闲海 2042

COMMIT WORK 背后的真相:在 ABAP Object Services 里正确保存 Persistent Objects

摘要:ABAP中COMMIT WORK在Persistent Objects场景下的作用远超简单提交。它触发Persistence Service将对象变更打包注册到Update Task,并在提交后使对象失效。文章解析了该机制如何与SAP LUW协同工作,以及对象失效(INVALIDATE)的原因。同时指出在兼容模式下显式COMMIT WORK的必要性,并强调在OData服务等场景中需注意提交后重新加载对象的重要性。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1853

SAP|Dependency Syntax: General Rules 相关性语法规则

参考资料: https://help.sap.com/doc/saphelp_aii710/7.1/en-US/d8/fa9bd49ede11d1903b0000e8a49aad/frameset.htm Dependency Syntax: General Rules相关性语法规则 AND Two statements that are both either true ornot true are linked with AND. 两个同时为真或不为真的语句用AND关联。 Length .

xiaoguangli2013的博客 1792

在 ABAP 生态里把 Encapsulation 做到极致:从 ABAP Objects 到 SAP Gateway、RAP、CAP 的可维护性工程

本文探讨了ABAP项目中封装原则的重要性与实践方法。传统ABAP过程式编程中全局变量和表单的滥用会导致维护成本激增,而面向对象中的封装机制能有效解决这一问题。文章提出了ABAP封装的三个核心工具:可见性分区(PUBLIC/PROTECTED/PRIVATE)、受控对象创建(CREATE PRIVATE)和继承控制(FINAL类)。重点分析了公共接口设计原则,建议将公共方法作为能力暴露而非公共属性,并详细说明了READ-ONLY属性的使用边界。通过销售订单业务对象的代码示例,展示了如何实现受控创建、工厂方法和

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1414

ABAP 里最接近 JavaBean 的概念,是一类带封装属性和访问方法的 ABAP Objects 类

在 ABAP 里讨论 JavaBean,不能直接找一个一模一样的语法关键字。更准确的答案是,最接近 JavaBean 的,是一个普通的 ABAP Objects 类,它用保存对象状态,用暴露get_...和set_...方法,让外部代码通过方法读写属性,而不是直接改内部数据。这个答案看起来很朴素,但放到真实 SAP 开发里,它其实能解释很多老项目和新项目之间的差异。Java 世界里的 JavaBean,长期以来是一种约定,而不是一种特殊语法。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 191

非法修改系统中的程式

今天给大家提供两个非法修改系统程式的方法,比较实用。对于ABAPer,有时在写程式时总会遇到反复测试的问题,可是在DEV中,数据会不全,测不出效果。在QAS上测每次都要请BASIS传请求号到QAS,反反复复大家都不方便。用下面的...

cmcagfdvr09264907的博客 250

让枚举成为业务规则的护栏:ABAP Enumerated Objects 从语法到序列化的全景指南

文章摘要:本文深入解析了ABAP中的枚举对象(Enumerated Objects)及其在项目开发中的实际应用。枚举对象通过将允许值集合转化为类型系统约束,有效解决了魔法数字、状态码分散等问题。文章详细介绍了枚举类型的三种形态(变量、常量、结构组件),并通过订单查询接口案例展示了其在接口参数硬约束中的优势。同时阐述了枚举对象的操作规则、赋值语义和比较原则,强调应避免将其当作基础类型使用。最后指出枚举类型可传播到过程边界,为ABAP开发提供了一种类型安全的解决方案。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2162

SAP HANA中一些重要的系统表或视图(2)——查询依赖关系

此视图提供了如何在HANA中查询相关的查询依赖关系,解决“我想要知道我的视图用了哪些模型底表”和“我想要知道我的底表被哪些模型用了”

nigulasimao的博客 2384

用 ABAP Shared Objects 打造高性能共享缓存:锁机制、适用场景与封装实践

摘要:ABAP中的Shared Objects提供了一种带锁语义的共享内存对象模型,主要用于解决高并发读取和跨会话数据共享问题。其核心价值在于让大量会话安全读取同一份数据,同时控制写入一致性。文章指出Shared Objects最适合两类场景:少写多读的共享数据集(如配置数据)和长期存在的业务态数据(如购物车)。为避免误用,建议采用Loader与Broker模式进行封装,统一管理共享内存访问、锁策略和权限控制。通过产品目录案例展示了如何工程化实现Shared Buffer模式,强调封装层对提升系统稳定性的关

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2119

在 ABAP Objects 里读懂自我:自引用 me 的语义、陷阱与工程化用法

本文深入解析SAP ABAP中的自引用me机制。me是ABAP在实例方法中隐式创建的局部引用变量,始终指向当前执行方法的对象实例。文章从基础概念出发,阐述了me的静态类型特性及其在继承、多态中的行为表现,特别强调了构造阶段me的特殊限制。通过实例分析同名变量冲突、Gateway和RAP框架中的工程实践,展示了me在提升代码可读性、避免歧义方面的重要价值。文中还介绍了me在链式调用等高级用法中的应用,为ABAP开发者提供了全面而实用的指导。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1845

【转载】START-OF-SELECTION

START-OF-SELECTION Syntax 语法 START-OF-SELECTION. Effect 作用 This event keyword defines an event block whose event is triggered by the ABAP runtime environment when calling the executable program selection screen processing of a selection screen. 这个事件关键字.

ruci2010的博客 1928

实测OV5640 DVP/MIPI接口720p@60fps配置,为什么我的Zynq-7020开发板只有30帧?

本文深入解析了OV5640摄像头在Zynq-7020开发板上帧率减半的问题,从寄存器配置到硬件链路进行全面排查。重点分析了DVP/MIPI接口的720p@60fps配置,提供了关键寄存器设置、时序参数调整及硬件带宽验证方法,帮助开发者快速定位并解决帧率下降问题。

weixin_42634811的博客 344

测试驱动开发与ABAP Objects资源下载

测试驱动开发与ABAP Objects资源下载 去发现同类优质开源项目:https://gitcode.com/ 欢迎来到我们的资源下载仓库!这里为您提供了《测试驱动开发与ABAP Objects》的学习资料压缩包,文件名为“Test-Driven Development with ABAP Objects.zip”。 此压缩文件包含了SAP Press出版的相关文档,旨在帮助ABAP开发者深入理...

gitblog_06715的博客 363

R语言安装包镜像报错?5分钟教你快速切换国内镜像源(含清华/阿里云配置)

本文详细介绍了R语言安装包镜像报错的解决方案,包括如何快速切换国内镜像源(如清华、阿里云等),解决'无法读写貯藏處索引'等常见问题。通过图形界面和命令行两种方式,帮助用户高效配置镜像源,提升R语言包安装速度与稳定性。

weixin_29053073的博客 418

[ESP32S3N16R8][LVGL8.3.0][IDF5.2.3]ST7701S RGB屏幕驱动[vscode最详细配置]

ST7701S ESP32S3 基于ESP-IDF5.2.3编写,编程环境为vscode。本教程详细讲述了esp32s3配置st7701s屏幕驱动以及gt911触摸驱动并关联到lvgl8.3.0,使用IDF5.23示例rgb_panel进行测试删除了其里面的屏幕驱动,改为单独编写屏幕和触摸驱动,最后完成了实列。

qq_44022379的博客 2604

Multiple ALVs on Single Screen Using ABAP Objects

Keywords ABAP, ALV, Splitter, Custom Controller,Double click event of ALV  Introduction There aremany situations in which one needs to display multiple ALV’s in a single Report.In such a situation

抗体的博客 1596

开启虚拟人物互动新时代:探索相芯Avatar SDK驱动功能(Android)

相芯SDK提供了男孩和女孩Avatar驱动模型,这些模型具备半身驱动和全身驱动的功能,使得虚拟角色能够根据用户的面部表情和动作实时模仿和响应。半身驱动功能: 相芯SDK的男孩和女孩Avatar驱动模型具备上身驱动功能,即能够通过用户的面部表情和动作来驱动虚拟角色的上半身行为。这意味着用户的面部表情、头部转动和上半身姿态等动作可以直接映射到虚拟角色上,使得虚拟角色能够栩栩如生地模仿用户的动作。例如,用户微笑时,虚拟角色会展现出笑容;用户转动头部时,虚拟角色也会相应地转动头部。

Faceunity2023的博客 631

ABAP Objects: Overriding (Redefinition)

Lets check out how we can implement Overriding in ABAP Objects. This is also known as the Redefinition of the method. When do we need to use the Overriding: Overriding is useful, when we want to

sap_man的专栏 671

Quanto option期权公式推导(更新中)

Quanto期权不同于以标的股票或资产的计价货币支付最终收益的普通欧式期权,它以另一种货币以预先确定的汇率支付最后的收益。以股票B的计价货币来计价的quanto看涨期权的收益为F0×max⁡(Sa(T)−K,0)×Sb(T)F_0 \times \max(S_a(T)-K, 0) \times S_b(T)F0​×max(Sa​(T)−K,0)×Sb​(T) 其中SaS_aSa​以货币A计价,SbS_bSb​以货币B计价,F0F_0F0​是预先固定的汇率. 假设上述股票均遵循几何布朗运动,可以得到以下恒等式

qq_41782124的博客 3683

高德地图API如何使用

通过以上步骤,您可以成功接入并使用高德地图API来为您的应用添加丰富的地图功能。

QQ_778132974的博客 4784

abap TRINT_OBJECTS_CHECK_AND_INSERT

TRINT_OBJECTS_CHECK_AND_INSERT ,进入断点 把 ct_ko200 内表数据清空,可以编辑无法编辑的程序。

sinat_37511226的博客 143

解决QT5调用软键盘qvirtualkeyboard时崩溃问题ime_pinyin::MatrixSearch::init_user_dictionary

但是偶尔也会出现问题,譬如,我这边在Arm系统上跑着程序的时候,点击用户编辑框,输入法弹出,但是再次点击密码输入框,连程序都给我崩溃了。只是提示错误:void ime_pinyin::MatrixSearch::init_user_dictionary。首先确保你的Arm版QT库已经编译了软键盘,位置有时候就和lib同级目录,qtvirtualkeyboard。QT5中的软键盘qvirtualkeyboard很好用,很多人开发嵌入式端应用的时候都会用到。此外还有很多其他的输入法字典,像。

有问题或资源连接有缺失的可以私信公众号新潮看世界获取 2065

ABAP Objects

ABAP Objects ABAP Objects既指整个ABAP的运行环境,也指ABAP语言中新增的面向对象部分。学习OO,主要是因为SAP自带的程序很多是OO编写的,看不懂,感觉深入学习ABAP必须掌握OO。REPORT Z_XP_LEARN .class application definition. public section.methods show_text.priv

348

YOLOv8 Neck改进:BiFPN双向特征金字塔网络解析与实践

本文详细介绍了如何在YOLOv8中集成BiFPN双向特征金字塔网络,包括原理解析、代码实现、配置文件修改和性能分析。BiFPN通过双向特征融合和加权特征机制,显著提升了多尺度目标检测的性能。希望通过本文的讲解,大家能够深入理解BiFPN的工作原理,并成功将其应用到自己的目标检测项目中。如果你有任何问题或建议,欢迎在评论区留言讨论!在下一篇文章中,我们将探讨YOLOv8的其他改进技术,包括注意力机制、新的损失函数等,敬请期待!

QQ_778132974的博客 989

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

上一篇: DEMO_DYNPRO_SUBSCREENS
下一篇: REUSE_ALV_GRID_DISPLAY 编辑数据
java_smalltalk
博客等级 码龄20年 8粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值