Try OpenEdge Now
skip to main content
ABL Reference
ABL Syntax Reference : CASE statement
 

CASE statement

Provides a multi-branch decision based on the value of a single expression.

Syntax

CASE expression :
{ WHEN value [ OR WHEN value ] ... THEN
{ block | statement }
} ...
[ OTHERWISE
{ block | statement }
]
END [ CASE ]
expression
The expression that determines which branch of code to execute. The expression parameter can be any valid ABL expression. It can include comparisons, logical operations, and parentheses.
WHEN value[ OR WHEN value] . . . THEN
Each value is an expression that evaluates to a possible value for expression. If value matches the current value of expression, then the associated block or statement executes.
OTHERWISE
Introduces a block or statement to execute when the value of expression does not match any value in any of the WHEN clauses.
block
A DO, FOR, or REPEAT block. If you do not use a block, then you can only use a single statement for the WHEN or OTHERWISE clause.
statement
A single ABL statement. If you want to use more than one statement, you must enclose them in a DO, FOR, or REPEAT block.
END [ CASE ]
Indicates the end of the CASE statement. You can include the CASE keyword here to improve readability; it has no effect on the code.

Example

The following fragment shows a simple example of a CASE statement:
r-case.p
DEFINE VARIABLE pay-stat AS INTEGER NO-UNDO INITIAL 1.

UPDATE pay-stat VIEW-AS RADIO-SET
RADIO-ITEM unpaid 1 LABEL "Unpaid"
RADIO-ITEM part 2 LABEL "Partially paid"
RADIO-ITEM paid 3 LABEL "Paid in full".

CASE pay-stat:
WHEN 1 THEN
MESSAGE "This account is unpaid.".
WHEN 2 THEN
MESSAGE "This account is partially paid.".
WHEN 3 THEN
MESSAGE "This account is paid in full.".
END CASE.

Notes

*Each value must have the same data type as expression. If the data types do not match, the compiler reports an error.
*Both value and expression can be enums, including ABL and .NET enums, but each value must be the same enum type as expression.
*You can specify any number of WHEN clauses within the CASE statement.
*You can specify only one OTHERWISE clause for a CASE statement. If you use the OTHERWISE clause, it must be the last branch in the statement.
*When a CASE statement is executed, the AVM evaluates expression and evaluates each value for each branch in order of occurrence until it finds the first value that satisfies the condition. At that point the AVM executes that branch and does not evaluate any other value for that branch or any other branches. If no matching value is found, then the OTHERWISE branch is executed, if given. If the OTHERWISE branch is not given and no matching value is found, then no branch of the CASE statement is executed and execution continues with the statement after the CASE statement.
*After a branch of the CASE statement is executed, the AVM leaves the CASE statement and execution continues with the statement following the CASE statement.
*If a LEAVE statement is executed within any branch of a CASE statement, the AVM leaves the closest block (other than a DO block) that encloses the CASE statement.