20240106

SWITCH (inline)

* SWITCH
* S W I T C H
*
* 'CASE' em forma de expressão

   X = SWITCH dtype|#(Y WHEN A then A WHEN B then B ELSE C).
   X = SWITCH dtype|#(Y
                      WHEN A then A
                      WHEN B then B
                      ELSE C
       ).

data: a  type char1 VALUE '5'.
data: b  type char10.

b = SWITCH #(
              a
              WHEN 1 THEN 'Hum'
              WHEN 2 THEN 'Dois'
              ELSE 'Outro numero'
            ).

write:/ '..A..', a.
write:/ '..B..', b.



*
* Uso em uma entrada de método
*
**METHOD desconto
**  importing
**    iv_price  type f
**    iv_mode   type char1
**  returning
**    value(rv_result)   type f.
**ENDMETHOD.

data: v_cheio        type f .
data: v_com_desc     type f .
data: v_promocao     type char1 .

v_com_desc = desconto(
                iv_price = v_cheio
                iv_mode  = SWITCH #(
                              v_promocao
                              WHEN 'X' THEN 'A'
                              WHEN ' ' THEN 'B'
                           )
             ).



*
* Usando com um retorno de método
*

***  get_mode
***    RETURNING
***      VALUE(rv_mode) type char1.

data: v_cheio     type f.
data: v_com_desc  type f.

v_cheio = 150 .

v_com_desc =
   SWITCH #(
       get_mode()
       when 'A'
       then v_cheio * '0.8'
       else v_cheio * '0.9'
   )



**
** Usando no preenchimento de um VALUE
**
TYPES: begin of y_entry,
          valor type i,
          descr type char10,
       end of y_entry.

data: v_vlr  type i.
data: v_vlr2 type i.

v_vlr = 5.

data(s_entry1) = VALUE y_entry(
                       valor = v_vlr
                       descr = SWITCH #(
                                   v_vlr
                                   when 1 THEN 'Hum'
                                   when 2 THEN 'Dois'
                                   ELSE  'Sei lá...'
                                   )
                       ).

write:/ '..Descrição ..', s_entry1-descr.