ABAP SELECT CASE VS IF Condicional

ABAP SELECT CASE

ABAP SELECT CASE, esta combinación entre la sentencia ABAP SELECT, la cual recupera registros de la base de datos y la sentencia ABAP CASE, es muy poderosa. Ciertamente, nos permite recuperar registros desde nuestras tablas, aplicando expresiones condicionales desde un inicio para alterar o calcular el valor de algún campo de nuestra tabla interna. Sin embargo, en las antiguas versiones de SAP Netweaver nos encontramos que la manera de realizar esto era a través de una sentencia ABAP IF independiente.

Veamos un ejemplo del condicional CASE en nuestro SELECT y cómo se ve en comparación con la condicional IF independiente.

EJEMPLO CASE VS IF

Lo primero que haré será preparar mi clase de ejecución sobre ABAP On Cloud, no es necesario si estás trabajando desde el SAP GUI, bastará con un simple ABAP Report convencional.

Te dejo aquí un enlace con el código ABAP On Cloud Template ; te ahorrará un par de minutos.

Lo siguiente que voy a hacer es crear un par de métodos, en el primero utilizaré la sentencia ABAP SELECT IF y en el segundo haré lo mismo con la sentencia SELECT con CASE.

ABAP SELECT CASE

Yo utilizaré una de las tablas creadas en el servidor de prueba de SAP con los siguientes datos. Donde a el registro que contenga el course_name con el valor ABAP Objects, le asignaré un campo adicional llamado oferta y le colocaré el valor de 10.

Lo siguiente que haré será crear mis ABAP Types, una estructura y una table interna derivada de la estructura.

abap table type

Cómo puedes observar, he creado tres campos en la estructura ABAP, en el campo offer será donde estaré colocando el valor 10 si la condición se cumple.

El siguiente paso es crear la lógica dentro de los métodos, la cual queda de la siguiente manera

Sentencia IF Después del SELECT a base de datos

    select course_name, price
        from zam_course
            into table @rt_courses.

    loop at rt_courses assigning field-symbol(<ls_course>).
      if <ls_course>-course_name = 'ABAP Objects'.
        <ls_course>-offer = 10.
      endif.
    endloop.

Sentencia CASE Dentro del SELECT a base de datos

    select course_name,
           price,
     case when course_name = 'ABAP Objects' THEN 10 end as offer
        from zam_course
            into table @rt_courses.

Cómo puedes ver la cantidad de código que nos ahorramos es considerable, lo cual nos permite tener una mejor legibilidad en nuestros programa.

Por último, dentro de mi método main voy a ejecutar ambos métodos y corroborar que el resultado de ambos métodos sea el mismo.

ejemplo case abap

Código Ejemplo ABAP SELECT CASE