SAP ABAP新语法

变量及对象声明

1.1 变量声明

Before:

DATA text TYPE string.

text = ....

After:

DATA(text) = ....

1.2 使用工作区

Before:

DATA wa like LINE OF itab.

LOOP AT itab INTO wa.

ENDLOOP.

After:

LOOP AT itab INTO DATA(wa).

ENDLOOP.

1.3 返回参数

Before:

DATA xml TYPE xstring.

CALL TRANSFORMATION … RESULT XML xml.

After:

CALL TRANSFORMATION … RESULT XML DATA(xml).

1.4 引用声明

Before:

DATA ixml TYPE REF TO if_ixml.

DATA stream_factory TYPE REF TO if_ixml_stream_factory.

DATA document TYPE REF TO if_ixml_document.

ixml = cl_ixml=>create( ).

stream_factory = ixml->create_stream_factory( ).

document = ixml->create_document( ).

After:

DATA(ixml) = cl_ixml=>create( ).

DATA(stream_factory) = ixml->create_stream_factory( ).

DATA(document) = ixml->create_document( ).

1.5 对象实例化

Before:

DATA lo_human TYPE REF TO class_human.

CREATE OBJECT lo_human EXPORTING NAME = ‘TONY’.

After:

lo_human = NEW class_human( name = ‘TONY’ ).

内表操作

2.1 READ TABLE

2.1.1 Read Table with key

Before:

READ TABLE flight_schedules INTO DATA(flight_schedule)

WITH KEY carrid = ‘AA’

connid = ‘0017’.

After:

DATA(flight_schedule) = flight_schedules[ carrid = ‘AA’ connid = ‘0017’ ].

2.1.2 Read Table index

Before:

READ TABLE itab INDEX idx

INTO wa.

After:
wa = itab[ idx ].

2.1.3 Read Table using key

Before:

READ TABLE itab INDEX idx

USING KEY key
INTO wa.
After:
wa = itab[ KEY key INDEX idx ].

2.1.4 Read Table index

Before:

DATA idx type sy-tabix.

READ TABLE …

TRANSPORTING NO FIELDS.

idx = sy-tabix.

After:

DATA(idx) = line_index( itab[ … ] ).

2.1 READ TABLE ASSIGNING

Before:

FIELD-SYMBOLS: type …

READ TABLE itab

ASSIGNING .

After:

READ TABLE itab

ASSIGNING FIELD-SYMBOL( ).

2.2 获得内表行数

Before:

DATA: lv_rows TYPE i.

LV_ROWS = LINES( ITAB)

After:

DATA(lv_rows) = LINES( itab ).

2.3 填充内表的值到目标内表中

Before:

DATA: gt_citys TYPE ty_citys,

gs_ship TYPE ty_ship,

gs_city TYPE ort01.

LOOP AT gt_ships INTO gs_ship.

gs_city = gs_ship-city.
APPEND gs_city TO gt_citys.

ENDLOOP.

After:

DATA(gt_citys) = VALUE ty_citys( FOR ls_ship IN gt_ships ( ls_ship-city ) ).

Open SQL

3.1 取数到内表

Before:

DATA itab TYPE TABLE OF dbtab.

SELECT * FROM dbtab

INTO TABLE itab

WHERE fld1 = lv_fld1.

After:

SELECT * FROM dbta

INTO TABLE DATA(itab)

WHERE fld1 = @lv_fld1

3.2 宿主变量

在ABAP 7.40之前,OPEN SQL 中我们通常会添加一些变量,用来作为取数的限制条件,这种方式下,Open SQL parser将open SQL语句进行解析成与底层数据可相对应SQL时,可能会出现误差,为了能清晰的区分算符两端的东西到底是ABAP变量、还是数据库内容,从而发送相应的内容给数据库。为了完成这一任务,Open SQL中的ABAP变量因此成为了完全的宿主变量(host variables)。

宿主变量用”@ ”来标记。

3.3 宿主表达式

Before:

没有宿主变量之前,书写SQL时,可能会出现下面的错误。并且不容易察觉。
1)SELECT carrid connid fldate seatsocc seatsmax
FROM sflight INTO TABLE sflight_tab
WHERE seatsmax < sflight-seatsocc.

2)SELECT carrid, connid, fldate, seatsocc, seatsmax
FROM sflight

WHERE seatsmax < sflight~seatsocc

INTO TABLE sflight_tab.

第一种情况 sflight-seatsocc表示的是变量,而第二种sflight~seatsocc则表示的是数据库字段

他们的执行结果是不同的。
After:

3)SELECT carrid, connid, fldate, seatsocc, seatsmax

FROM sflight

WHERE seatsmax < @sflight-seatsocc
INTO TABLE @sflight_tab.

引入宿主变量之后,通过@符号,我们能准确区分@sflight-seatsocc

是宿主变量,也就是程序中的变量,执行结果不会出现误差。

其他语法

4.1 FILTER

语法定义:

FILTER type( itab [EXCEPT] [IN ftab] [USING KEY keyname]

WHERE c1 op f1 [AND c2 op f2 […]] ).

实例:

TYPES: BEGIN OF ty_filter,

cityfrom TYPE spfli–cityfrom,

cityto TYPE spfli–cityto,

f3 TYPE i,

END OF ty_filter,

ty_filter_tab TYPE HASHED TABLE OF ty_filter

WITH UNIQUE KEY cityfrom cityto.

DATA: lt_splfi TYPE STANDARD TABLE OF spfli.

SELECT * FROM spfli APPENDING TABLE lt_splfi.

DATA(lt_filter) = VALUE ty_filter_tab( f3 = 2

( cityfrom = ‘NEW YORK’ cityto = ‘SAN FRANCISCO’ )
( cityfrom = ‘FRANKFURT’ cityto = ‘NEW YORK’ ) ).

DATA(lt_myrecs) = FILTER #( lt_splfi IN lt_filter

WHERE cityfrom = cityfrom

AND cityto = cityto ).

“Output filtered records

LOOP AT lt_myrecs ASSIGNING FIELD–SYMBOL(<ls_rec>).

WRITE: / <ls_rec>–carrid,8 <ls_rec>–cityfrom,30

<ls_rec>–cityto,45 <ls_rec>–deptime.

ENDLOOP.

4.2 REDUCE

语法定义:

… REDUCE type(
[let_exp]
INIT {x1 = rhs1}|{ = wrexpr1}|{x1| TYPE dtype1}
{x2 = rhs2}|{ = wrexpr2}|{x2| TYPE dtype2}

FOR for_exp1
FOR for_exp2

NEXT …
{x1 = rhs1}|{ = wrexpr1}
{x2 = rhs2}|{ = wrexpr2}
… ) …

实例:

DATA itab TYPE STANDARD TABLE OF i WITH EMPTY KEY.
itab = VALUE #( FOR j = 1 WHILE j <= 10 ( j ) ).

DATA(sum) = REDUCE i( INIT x = 0 FOR wa IN itab NEXT x = x + wa ).

4.3 使用类转换字符串 conv

Before:

DATA text TYPE c LENGTH 255.

DATA helper TYPE string.

DATA xstr TYPE xstring.

helper = text.

xstr = cl_abap_codepage=>convert_to( source = helper ).

After:

DATA text TYPE c LENGTH 255.

DATA(xstr) = cl_abap_codepage=>convert_to( source = CONV string( text ) ).

OR

DATA(xstr) = cl_abap_codepage=>convert_to( source = CONV #( text ) ).

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更这些源码资源,以适应各平台技术的最发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值