New Keyword in ABAP-LET CONV SWITCH COND
New Keyword in ABAP-LET CONV SWITCH COND
LET
使用 LET 引入短生命周期变量,可以用来简化部分冗余代码
1 *---------------------------------------------------------------------* 2 * LET关键字可以使用在VALUE,SWITCH,COND等语句中; 3 * 与 FOR 语句类似,LET 语句中定义的临时变量同样只能在当前语句中使用, 4 * 在其他语句中使用时会检查出语法错误 5 *---------------------------------------------------------------------* 6 TYPES: BEGIN OF TY_DATA, 7 MATNR TYPE MARA-MATNR, 8 MTART TYPE MARA-MTART, 9 MATKL TYPE MARA-MATKL, 10 TEXT1 TYPE CHAR50, 11 END OF TY_DATA. 12 13 DATA LT_DATA TYPE TABLE OF TY_DATA. 14 15 LT_DATA = VALUE #( 16 ( MATNR = 'MATRIAL-001' 17 MTART = 'WATR' 18 MATKL = '1020' 19 TEXT1 = 'FIRST material' ) 20 ( MATNR = 'MATRIAL-002' 21 MTART = 'FOOD' 22 MATKL = '1030' 23 TEXT1 = 'SECOND material' ) 24 ( MATNR = 'MATRIAL-003' 25 MTART = 'WATR' 26 MATKL = '1040' 27 TEXT1 = 'THIRD material' ) 28 ). 29 30 DATA(LW_LINE) = VALUE TY_DATA( LET 31 LW_DATA = VALUE #( LT_DATA[ MATNR = 'MATRIAL-001' ] OPTIONAL ) 32 LV_STR = 'Date:' && SY-DATUM 33 IN 34 MATNR = LW_DATA-MATNR 35 MTART = LW_DATA-MTART 36 MATKL = LW_DATA-MATKL 37 TEXT1 = LV_STR 38 ). 39 40 CALL METHOD CL_DEMO_OUTPUT=>DISPLAY( LW_LINE ).

CONV
数据类型的转换可以用 CONV 实现,部分类型不再需要通过中间变量来转换
1 *---------------------------------------------------------------------* 2 * 合理的使用 CONV 可以避免因为类型不一致而导致的 dump 问题, 3 * 例如下例的LV_RESULT,即在调用方法时做参数的类型转换 4 * 另外,在接口中处理传入参数时,一般情况下也会对数据的类型做对应的转换, 5 * 但不是所有类型都可以互相转换,例如将含有非数字的 CHAR 类型数据 6 * 强制转换成 INT 类型时,会抛出异常CX_SY_CONVERSION_ERROR 7 *---------------------------------------------------------------------* 8 DATA(LV_STR) = '001001.001'. 9 DATA(LV_INT) = CONV I( LV_STR ). 10 CALL METHOD CL_DEMO_OUTPUT=>DISPLAY( LV_INT ). 11 DATA(LV_FLOAT) = CONV F( LV_STR ). 12 CALL METHOD CL_DEMO_OUTPUT=>DISPLAY( LV_FLOAT ). 13 DATA(LV_DIVISION) = 1 / 3. 14 CALL METHOD CL_DEMO_OUTPUT=>DISPLAY( LV_DIVISION ). 15 DATA(LV_DIV) = CONV DECFLOAT34( 1 / 3 ). 16 CALL METHOD CL_DEMO_OUTPUT=>DISPLAY( LV_DIV ).

SWITCH 动态赋值语句,通常根据同一变量的不同数据来动态处理,用法类似于 CASE 语句
1 *---------------------------------------------------------------------* 2 * SWITCH语句的判断条件相对单一,WHEN关键字后只能使用常量, 3 * THEN/ELSE后面可以使用表达式进行赋值 4 *---------------------------------------------------------------------* 5 DATA(LV_INDICATOR) = 1. 6 DATA(LV_DAY) = SWITCH CHAR10( LV_INDICATOR 7 WHEN 1 THEN 'MONDAY' 8 WHEN 2 THEN 'TUESDAY' 9 WHEN 3 THEN 'WEDNESDAY' 10 WHEN 4 THEN 'THURSDAY' 11 WHEN 5 THEN 'FRIDAY' 12 WHEN 6 THEN 'SATURDAY' 13 WHEN 7 THEN 'SUNDAY' 14 ELSE '404' && '-ERROR' 15 ). 16 CALL METHOD CL_DEMO_OUTPUT=>DISPLAY( LV_DAY ).

COND 动态赋值语句,可以根据不同条件来动态处理,用法类似于CASE/IF语句
1 *---------------------------------------------------------------------* 2 * COND语句中允许使用较为复杂的判断条件,因此VALUE语句中动态赋值通常会使用COND 3 *---------------------------------------------------------------------* 4 DATA(LV_INDICATOR) = 7. 5 DATA(LV_DAY) = COND CHAR10( WHEN LV_INDICATOR = 1 THEN 'MONDAY' 6 WHEN LV_INDICATOR = 2 THEN 'TUESDAY' 7 WHEN LV_INDICATOR = 3 THEN 'WEDNESDAY' 8 WHEN LV_INDICATOR = 4 THEN 'THURSDAY' 9 WHEN LV_INDICATOR = 5 THEN 'FRIDAY' 10 WHEN LV_INDICATOR = 6 THEN 'SATURDAY' 11 WHEN LV_INDICATOR = 7 AND SY-LANGU EQ 'E' THEN 'SUNDAY' 12 WHEN LV_INDICATOR = 7 AND SY-LANGU EQ 'F' THEN 'DIMANCHE' 13 WHEN LV_INDICATOR = 7 AND SY-LANGU EQ '1' THEN '星期天' 14 ELSE '404' && '-ERROR' 15 ). 16 CALL METHOD CL_DEMO_OUTPUT=>DISPLAY( LV_DAY ).


浙公网安备 33010602011771号