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 ).

 

posted @ 2022-04-05 18:36  ultraluck  阅读(135)  评论(0)    收藏  举报