ABAP新语法(1)
(2022-09-03 13:58:43)
标签:
abapalvf4liumengsap |
我自己多多少少有点怀旧,不太使用新语法。
但是这个项目,周边小孩都比我小十来岁,人家还是很喜欢研究新东西的,而且项目里很多代码,确实都是用的新语法。
不用也得能看懂吧。索性也鼓捣鼓捣。
比较简单的,不用提前定义声明的情况
* oldDATA LT_DATA TYPE TABLE OF SPFLI.SELECT * FROM SPFLI INTO TABLE LT_DATA.*new SELECT * FROM SPFLI INTO TABLE @DATA(LT_DATA).-----------------------------------------------* oldDATA LT_DATA TYPE TABLE OF SPFLI.DATA LS_DATA LIKE LINE OF LT_DATA. LOOP AT LT_DATA INTO LS_DATA.ENDLOOP. READ TABLE LT_DATA INTO LS_DATA INDEX 1. *new LOOP AT LT_DATA INTO DATA(LS_DATA).ENDLOOP.READ TABLE LT_DATA INTO DATA(LS_DATA) INDEX 1.READ TABLE LT_DATA ASSIGNING FIELD-SYMBOL() INDEX 1.
内表赋值:
RANGES RT_BUKRS FOR T001-BUKRS.RT_BUKRS[] = VALUE #(( SIGN = 'I' OPTION = 'BT' LOW = '1001' HIGH = '1099' )( SIGN = 'I' OPTION = 'EQ' LOW = '2001' )).CL_DEMO_OUTPUT=>DISPLAY( RT_BUKRS[] ).
base:内表基础上附加额外数据
RANGES RT_BUKRS FOR T001-BUKRS.RT_BUKRS[] = VALUE #(( SIGN = 'I' OPTION = 'BT' LOW = '1001' HIGH = '1099' )( SIGN = 'I' OPTION = 'EQ' LOW = '2001' ))."内表基础上附加额外数据RT_BUKRS[] = VALUE #( BASE RT_BUKRS[]( SIGN = 'I' OPTION = 'EQ' LOW = '3001' )).CL_DEMO_OUTPUT=>DISPLAY( RT_BUKRS[] ).
关于 CORRESPONDING
DATA:LS_TMP1 TYPE SBOOK.DATA:LS_TMP2 TYPE SBOOK.DATA:LS_TMP3TYPE SBOOK. SELECT SINGLE * FROM SFLIGHT INTO @DATA(LS_DATA) WHERE CARRID = 'AA'.LS_TMP1-BOOKID = '99999999'.LS_TMP1-CUSTOMID = '88888888'.LS_TMP1-FLDATE = '20210101'.LS_TMP2-BOOKID = '99999999'.LS_TMP2-CUSTOMID = '88888888'.LS_TMP2-FLDATE = '20210101'.LS_TMP3-BOOKID = '99999999'.LS_TMP3-CUSTOMID = '88888888'.LS_TMP3-FLDATE = '20210101'.LS_TMP1= CORRESPONDING #( BASE ( LS_TMP1 ) LS_DATA ). "不指定BASE 初始值会丢失 LS_TMP2= CORRESPONDING #( LS_DATA ). "不指定BASE 初始值会丢失 MOVE-CORRESPONDING LS_DATA TO LS_TMP3.CL_DEMO_OUTPUT=>WRITE(LS_TMP1 ). CL_DEMO_OUTPUT=>WRITE(LS_TMP2 ). CL_DEMO_OUTPUT=>WRITE(LS_TMP3 ). CL_DEMO_OUTPUT=>DISPLAY( ).
CORRESPONDING
Width/Alignment/Padding
DATA:LV_MANTR1TYPE MATNR VALUE '11'. DATA:LV_MATNR2 TYPE MATNR .DATA:LV_MATNR3 TYPE MATNR .DATA:LV_MATNR4TYPE MATNR . * Width/Alignment/Padding 宽度/对齐/填充LV_MATNR2 = |{ LV_MANTR1 WIDTH = 18 ALIGN = RIGHT PAD = '0' }|.CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'EXPORTINGINPUT = LV_MANTR1IMPORTINGOUTPUT = LV_MATNR3EXCEPTIONSLENGTH_ERROR = 1OTHERS = 2.IF SY-SUBRC <> 0.* Implement suitable error handling hereENDIF.LV_MATNR4 = |{ LV_MATNR3 ALPHA = OUT }|.CL_DEMO_OUTPUT=>WRITE( 'LV_MANTR1:' && LV_MANTR1 ).CL_DEMO_OUTPUT=>WRITE( 'LV_MATNR2:' && LV_MATNR2 ).CL_DEMO_OUTPUT=>WRITE( 'LV_MATNR3:' && LV_MATNR3 ).CL_DEMO_OUTPUT=>WRITE( 'LV_MATNR4:' && LV_MATNR4 ).CL_DEMO_OUTPUT=>DISPLAY( ).
日期格式
DATA(P_DATE) = SY-DATUM.WRITE / |{ P_DATE DATE = ISO }|. "Date Format YYYY-MM-DDWRITE / |{ P_DATE DATE = USER }|. "As per user settingsWRITE / |{ P_DATE DATE = ENVIRONMENT }|. "Formatting setting of language environment
字符串内表拼接
SELECT WERKS FROM t001w INTO TABLE @DATA(gt_data).DATA(lv_concat_lines) = concat_lines_of( table = gt_data sep = '/' ).DATA:lt_tmp like gt_data.SPLIT lv_concat_lines AT '/' INTO TABLE lt_tmp.CL_DEMO_OUTPUT=>WRITE( lv_concat_lines ).CL_DEMO_OUTPUT=>WRITE( lt_tmp[] ).CL_DEMO_OUTPUT=>DISPLAY( ).
关于内表的几个操作
SELECT * FROM SPFLI INTO TABLE @DATA(GT_DATA) WHERE carrid = 'AZ'."输出查询结果CL_DEMO_OUTPUT=>WRITE( GT_DATA )."找到数据DATA(LV_INDEX) = LINE_INDEX( GT_DATA[ CARRID = 'AZ' CONNID = '0788' ] ).IF LV_INDEX NE 0 AND LINE_EXISTS( GT_DATA[ LV_INDEX ] ) .DATA(LS_DATA) = GT_DATA[ LV_INDEX ]. "取该行数据ENDIF.CL_DEMO_OUTPUT=>WRITE( LS_DATA )."看看多条记录的时候,找到的第几条SORT GT_DATA by CITYFROM.DATA(LV_INDEX_tmp) = LINE_INDEX( GT_DATA[ CITYFROM = 'ROME' ] ).CL_DEMO_OUTPUT=>WRITE( LV_INDEX_tmp ).CL_DEMO_OUTPUT=>DISPLAY( ).
另外一个demo,里面有个大括号{}的使用。跟直接&& 拼接有空格的差别。
SELECT* FROM SPFLI INTO TABLE @DATA(GT_DATA) WHERE CARRID = 'AZ'. CL_DEMO_OUTPUT=>WRITE( GT_DATA ).CL_DEMO_OUTPUT=>WRITE( GT_DATA[ CONNID = '0788' ] ).CL_DEMO_OUTPUT=>WRITE( GT_DATA[ CONNID = '0788' ]-CONNID ).CL_DEMO_OUTPUT=>WRITE( |CONNID: { GT_DATA[ CONNID = '0788' ]-CONNID }| ).CL_DEMO_OUTPUT=>WRITE( 'CONNID:'&& GT_DATA[ CONNID = '0788' ]-CONNID ).CL_DEMO_OUTPUT=>DISPLAY( ).
前一篇:ALV相关文章清单
后一篇:ABAP新语法(2)

加载中…