ABAP
Kontrollflödesanalyser
Sök…
IF / ElseIf / ELSE
IF lv_foo = 3.
WRITE: / 'lv_foo is 3'.
ELSEIF lv_foo = 5.
WRITE: / 'lv_foo is 5'.
ELSE.
WRITE: / 'lv_foo is neither 3 nor 5'.
ENDIF.
FALL
CASE lv_foo.
WHEN 1.
WRITE: / 'lv_foo is 1'.
WHEN 2.
WRITE: / 'lv_foo is 2'.
WHEN 3.
WRITE: / 'lv_foo is 3'.
WHEN OTHERS.
WRITE: / 'lv_foo is something else'.
ENDCASE
KOLLA UPP
CHECK är ett enkelt uttalande som utvärderar ett logiskt uttryck och lämnar det aktuella behandlingsblocket om det är felaktigt.
METHOD do_something.
CHECK iv_input IS NOT INITIAL. "Exits method immediately if iv_input is initial
"The rest of the method is only executed if iv_input is not initial
ENDMETHOD.
HÄVDA
ASSERT används i känsliga områden där du vill vara helt säker på att en variabel har ett specifikt värde. Om det logiska tillståndet efter ASSERT visar sig vara felaktigt kastas ett obehandlingsbart undantag ( ASSERTION_FAILED ).
ASSERT 1 = 1. "No Problem - Program continues
ASSERT 1 = 2. "ERROR
COND / SWITCH
SWITCH och COND erbjuder en speciell form av villkorat programflöde. Till skillnad från IF och CASE representerar de olika värden baserade på ett uttryck snarare än att utföra uttalanden. Det är därför de räknar som funktionella.
COND
När flera villkor måste beaktas kan COND göra jobbet. Syntaxen är ganska enkel:
COND <type>(
WHEN <condition> THEN <value>
...
[ ELSE <default> | throw <exception> ]
).
exempel
" Set screen element active depending on radio button
screen-active = COND i(
WHEN p_radio = abap_true THEN 1
ELSE 0 " optional, because type 'i' defaults to zero
).
" Check how two operands are related to each other
" COND determines its type from rw_compare
rw_compare = COND #(
WHEN op1 < op2 THEN 'LT'
WHEN op1 = op2 THEN 'EQ'
WHEN op1 > op2 THEN 'GT'
).
VÄXLA
SWITCH är ett snyggt verktyg för att kartlägga värden, eftersom den endast kontrollerar för jämlikhet och därmed är kortare än COND i vissa fall. Om en oväntad inmatning gavs är det också möjligt att kasta ett undantag. Syntaxen är lite annorlunda:
SWITCH <type>(
<variable>
WHEN <value> THEN <new_value>
...
[ ELSE <default> | throw <exception> ]
).
exempel
DATA(lw_language) = SWITCH string(
sy-langu
WHEN 'E' THEN 'English'
WHEN 'D' THEN 'German'
" ...
ELSE THROW cx_sy_conversion_unknown_langu( )
).