在新语法中,可以使用COND、SWITCH来根据逻辑表达式或情况的不同确定指定变量的结果。
语法格式:
...COND dtype | # ( WHEN log_exp1 THEN result1
[ WHEN log_exp2 THEN result2 ]
....
[ ELSE resultn ] ) ...
...SWITCH dtype | # ( operand
WHEN const1 THEN result1
[ WHEN const2 THEN result2 ]
....
[ ELSE resultn ] ) ...
[ ] 里可填,THEN后面都是返回的结果。在SWITCH中 operand 是一个变量类似case operand: when...
例一:
DATA(time) = COND string(
WHEN sy-timlo < '120000' THEN |{ sy-timlo TIME = ISO } AM|
WHEN sy-timlo > '120000' THEN |{ CONV t( sy-timlo - 12 * 3600 ) TIME = ISO } PM|
WHEN sy-timlo = '120000' THEN |High noon|
* ELSE
).
WRITE: time.
sy = '120000' 就是时间12点。 程序就是根据sy-timlo是否超过12点 然后设置不同的格式赋值给time。
例二:
DATA(a) = 11.
DATA(text) = SWITCH #( a
WHEN '11' THEN '11yyagd'
WHEN '12' THEN '12dkdkkd'
* ELSE
).
WRITE: text.
这段代码就是根据变量a的值,赋不同的值给text。
例三:来自系统标准DEMO
嵌套使用
TYPES:
BEGIN OF result,
operand TYPE string,
result TYPE string,
fdpos TYPE sy-fdpos,
END OF result.
DATA results TYPE STANDARD TABLE OF result WITH EMPTY KEY.
DATA: f1 TYPE c LENGTH 5 VALUE 'BD ',
f2 TYPE c LENGTH 5 VALUE 'ABCDE'.
cl_demo_input=>new(
)->add_field( CHANGING field = f1
)->add_field( CHANGING field = f2 )->request( ).
results = VALUE #( BASE results
( operand = 'CO'
result = COND #( WHEN f1 CO f2 THEN abap_true )
fdpos = sy-fdpos ) ).
results = VALUE #( BASE results
( operand = 'CN'
result = COND #( WHEN f1 CN f2 THEN abap_true )
fdpos = sy-fdpos ) ).
results = VALUE #( BASE results
( operand = 'CA'
result = COND #( WHEN f1 CA f2 THEN abap_true )
fdpos = sy-fdpos ) ).
results = VALUE #( BASE results
( operand = 'NA'
result = COND #( WHEN f1 NA f2 THEN abap_true )
fdpos = sy-fdpos ) ).
results = VALUE #( BASE results
( operand = 'CS'
result = COND #( WHEN f1 CS f2 THEN abap_true )
fdpos = sy-fdpos ) ).
results = VALUE #( BASE results
( operand = 'NS'
result = COND #( WHEN f1 NS f2 THEN abap_true )
fdpos = sy-fdpos ) ).
results = VALUE #( BASE results
( operand = 'CP'
result = COND #( WHEN f1 CP f2 THEN abap_true )
fdpos = sy-fdpos ) ).
results = VALUE #( BASE results
( operand = 'NP'
result = COND #( WHEN f1 NP f2 THEN abap_true )
fdpos = sy-fdpos ) ).
cl_demo_output=>new(
)->write( |'{ f1 WIDTH = 5 }' operand '{ f2 WIDTH = 5 }'|
)->display( results ).
例四、个人在实际项目中常用于BAPI或方法返回消息的拼接
CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
EXPORTING
DOCUMENTHEADER = LS_DOCUMENTHEADER
IMPORTING
* OBJ_TYPE =
OBJ_KEY = LV_KEY
* OBJ_SYS =
TABLES
ACCOUNTGL = LT_ACCOUNTGL
ACCOUNTRECEIVABLE = LT_ACCOUNTRECEIVABLE
* ACCOUNTPAYABLE = LT_ACCOUNTPAYABLE
CURRENCYAMOUNT = LT_CURRENCYAMOUNT
EXTENSION2 = LT_EXTENSION2
RETURN = LT_RETURN.
LOOP AT LT_RETURN INTO DATA(LS_RETURN) WHERE TYPE CA 'AEX'.
LS_OUT-MESSAGE =
COND #( WHEN LS_OUT-MESSAGE = SPACE THEN LS_RETURN-MESSAGE
ELSE |{ LS_OUT-MESSAGE }/{ LS_RETURN-MESSAGE }| ).
ENDLOOP.