Skip to Content
10
Mar 08 at 07:46 PM

Weird behaviour with VALUE and SWITCH

335 Views Last edit Mar 08 at 07:50 PM 2 rev

Today I encountered a strange behaviour after I added a SWITCH statement in a VALUE assignment.

Let's assume there is a simple table with two columns ID and TXT:

  TYPES: BEGIN OF _test,
           id   TYPE char02,
           txt  TYPE string,
         END OF _test,
         _test_t TYPE STANDARD TABLE OF _test WITH DEFAULT KEY.

Then there is a simple VALUE statement to fill the table:

  DATA(test) =  VALUE _test_t(
      ( id = 'AA'   txt = 'AAA' )
      ( id = 'bb'   txt = 'bbb' )
      (             txt = 'CCC' )     ).

Not a big deal and works as expected:

ID | TXT
---+-----
AA | AAA
bb | bbb
   | CCC

Then I added the SWITCH statement because line #2 should have a different value depending on a variable:

  DATA(test) =  VALUE _test_t(
      ( id = 'AA' txt = 'AAA' )
      ( SWITCH #( sy-uname(1)
         WHEN 'E' THEN VALUE #( id = 'BB'  txt = 'BBB' )
                  ELSE VALUE #( id = 'bb'  txt = 'bbb' ) ) )
      ( txt = 'CCC' ) ).

As my username starts with E the result looks - also expected - like this:

ID | TXT
---+-----
AA | AAA
BB | BBB
   | CCC

But then for any reason I didn't want to have the field ID filled in the first line and changed my code accordingly:

  DATA(test) =  VALUE _test_t(
      ( txt = 'AAA' )              "Value for ID deleted!
      ( SWITCH #( sy-uname(1)
         WHEN 'E' THEN VALUE #( id = 'BB'  txt = 'BBB' )
                  ELSE VALUE #( id = 'bb'  txt = 'bbb' ) ) )
      ( txt = 'CCC' ) ).

The expected result would be, that line #2 is the only line where field ID is filled:

ID | TXT
---+-----
   | AAA
BB | BBB
   | CCC

But the result is the following:

ID | TXT
---+-----
   | AAA
BB | BBB
BB | CCC

Line #3 is filled with ID = "BB" although I do not tell the system to do so...

I tested on two different SAP-Systems:

  • SAP_ABA 750/ SAP_BASIS 750
  • SAP_ABA 75E/ SAP_BASIS 754

Can anyone proof this behavior or tell me what I am doing wrong?

Thanks in advance
~Enno