20240106

SWITCH (inline)

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

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

dataa  type char1 VALUE '5'.
datab  type char10.

SWITCH #(
              a
              WHEN THEN 'Hum'
              WHEN 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.

datav_cheio        type .
datav_com_desc     type .
datav_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.

datav_cheio     type f.
datav_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
**
TYPESbegin of y_entry,
          valor type i,
          descr type char10,
       end of y_entry.

datav_vlr  type i.
datav_vlr2 type i.

v_vlr 5.

data(s_entry1VALUE y_entry(
                       valor v_vlr
                       descr SWITCH #(
                                   v_vlr
                                   when THEN 'Hum'
                                   when THEN 'Dois'
                                   ELSE  'Sei lá...'
                                   )
                       ).

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