变量及对象声明 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 ) ).
|