Introducción
Aplicación de técnicas y conceptos básicos
Trabajar con clases locales
Lectura de datos de la base de datos
Trabajar con objetos de datos estructurados
Trabajar con tablas internas complejas
Implementación de actualizaciones de base de datos mediante business objects
Descripción del modelo de programación de aplicaciones ABAP RESTful

Datos de procesamiento

Objectives

After completing this lesson, you will be able to:
  • Realizar cálculos aritméticos.
  • Aplicar procesamiento de cadena.

Cálculos aritméticos

Las expresiones aritméticas son expresiones ABAP con una combinación de valores, operadores y funciones que el sistema de tiempo de ejecución procesa para calcular un resultado. Para expresiones aritméticas, el tipo de resultado depende del tipo de operandos utilizados como entrada para la expresión.

Puede utilizar una expresión aritmética en cualquier posición de operando de lectura, por ejemplo, en la parte derecha de una valoración.

El siguiente vídeo ilustra los conceptos básicos de las expresiones aritméticas.

Pruébelo: Cálculos aritméticos

  1. Como en el primer ejercicio de este curso, cree una nueva clase global que implemente la interfaz IF_OO_ADT_CLASSRUN.
  2. Copie el siguiente fragmento de código en la parte de implementación del método if_oo_adt_classrun~main( ):
    Code Snippet
    12345678910111213141516171819202122232425262728293031
    * Declarations ********************************************************************** " comment/uncomment these line for different result types TYPES t_result TYPE p LENGTH 8 DECIMALS 2. * TYPES t_result TYPE p LENGTH 8 DECIMALS 0. * TYPES t_result TYPE i. DATA result TYPE t_result. * Calculations ********************************************************************** " comment/uncomment these lines for different calculations result = 2 + 3. * result = 2 - 3. * result = 2 * 3. * result = 2 / 3. * * result = sqrt( 2 ). * result = ipow( base = 2 exp = 3 ). * * result = ( 8 * 7 - 6 ) / ( 5 + 4 ). * result = 8 * 7 - 6 / 5 + 4. * Output ********************************************************************** out->write( result ).
  3. Pulse CTRL + F3 para activar la clase y F9 para ejecutarla como una aplicación de consola.
  4. Juega con el código fuente para familiarizarte con los conceptos.
    • Anule el comentario de diferentes cálculos y definiciones de tipo.
    • Implemente sus propios cálculos.

Procesamiento de strings

Los modelos de string son expresiones ABAP del tipo de resultado string. Puede utilizar modelos de string en cualquier posición de operando de lectura, por ejemplo, en la parte derecha de una valoración.

Una plantilla de cadena empieza y termina con un símbolo de barra vertical ( | ). El modelo de cadena más simple posible no contiene más que texto literal. En este formulario, un modelo de string no es realmente diferente de un literal de string.

Lo que distingue un modelo de cadena de un literal de cadena es la capacidad de incrustar expresiones. Una expresión incrustada es una expresión ABAP entre corchetes ( { y } ). En tiempo de ejecución, ABAP evalúa la expresión integrada y convierte el resultado en una cadena. En el resultado final, esta cadena sustituye la expresión incrustada (junto con los corchetes circundantes).

Nota

La sintaxis ABAP requiere al menos un espacio en blanco después del paréntesis de apertura y al menos un espacio en blanco antes del paréntesis de cierre.

Por supuesto, una plantilla de cadena puede contener más de una expresión incrustada.

Dentro de los corchetes puede colocar cualquier tipo de expresión ABAP: expresiones aritméticas, como en el ejemplo anterior, pero las variables individuales o incluso los literales pueden servir como expresiones incrustadas.

Un caso de uso importante para los modelos de cadena es el formato controlado de los datos para la salida.

En el primer ejemplo, la variable the_date es del tipo d y contiene una fecha en el formato interno (raw) AAAAMMDD (donde AAAA representa el año, MM el mes de dos dígitos y DD la fecha de dos dígitos). Cuando utiliza la variable the_date como expresión integrada en un modelo de string, el resultado será el mismo que el formato interno. Pero cuando añade la opción de formato DATE = <date_format> entre corchetes, el sistema formateará el valor como una fecha. Si añade DATE = ISO, la salida estará en formato ISO. Con DATE = USER, el formato de salida depende de las opciones de usuario del usuario actual.

El segundo ejemplo ilustra algunas de las opciones que puede utilizar para dar formato a números. Mediante NUMBER se controla el formato general de los números, por ejemplo, si se utiliza un punto decimal o una coma decimal. Mediante SIGN se controla la posición del signo y si se visualiza o no un signo más (+). Utilizando STYLE puede elegir entre varios estilos predefinidos, como un estilo científico o un estilo de ingeniería.

Puede unir campos con el operador de concatenación &&. Puede unir cualquier combinación de objetos de datos y expresiones de cadena.

Las partes constituyentes de la expresión están enlazadas sin espacio u otros separador entre ellos. Si necesita espacios u otro carácter separador, deberá acordarse de insertarlo como parte de la expresión, como aparece en el segundo ejemplo.

Pruébelo: Procesamiento de cadenas

  1. Como en el primer ejercicio de este curso, cree una nueva clase global que implemente la interfaz IF_OO_ADT_CLASSRUN.
  2. Copie el siguiente fragmento de código en la parte de implementación del método if_oo_adt_classrun~main( ):
    Code Snippet
    123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
    METHOD if_oo_adt_classrun~main. * Declarations ********************************************************************** TYPES t_amount TYPE p LENGTH 8 DECIMALS 2. DATA amount TYPE t_amount VALUE '3.30'. DATA amount1 TYPE t_amount VALUE '1.20'. DATA amount2 TYPE t_amount VALUE '2.10'. DATA the_date TYPE d VALUE '19891109'. DATA my_number TYPE p LENGTH 3 DECIMALS 2 VALUE '-273.15'. DATA part1 TYPE string VALUE `Hello`. DATA part2 TYPE string VALUE `World`. * String Templates ********************************************************************** " comment/uncomment the following lines for different examples DATA(text) = |Hello World|. * DATA(text) = |Total: { amount } EUR|. * DATA(text) = |Total: { amount1 + amount2 } EUR|. * Format Options ********************************************************************** "Date * DATA(text) = |Raw Date: { the_date }|. * DATA(text) = |ISO Date: { the_date Date = ISO }|. * DATA(text) = |USER Date:{ the_date Date = USER }|. "Number * DATA(text) = |Raw Number { my_number }|. * DATA(text) = |User Format{ my_number NUMBER = USER }|. * DATA(text) = |Sign Right { my_number SIGN = RIGHT }|. * DATA(text) = |Scientific { my_number STYLE = SCIENTIFIC }|. * String expression (concatenation Operator) ********************************************************************** * DATA(text) = part1 && part2. * DATA(text) = part1 && | | && part2. * DATA(text) = |{ amount1 } + { amount2 }| && * | = | && * |{ amount1 + amount2 }|. * Output ********************************************************************** out->write( text ).
  3. Pulse CTRL + F3 para activar la clase y F9 para ejecutarla como una aplicación de consola.
  4. Juega con el código fuente para familiarizarte con los conceptos.
    • Anule el comentario de diferentes valoraciones para el texto de variable declarado en línea para ver un resultado diferente.
    • Pruebe sus propias asignaciones.

Declarar variables y datos de proceso

En este ejercicio, creará un programa que realice un cálculo basado en dos números, luego formatee y emita el resultado.

Modelo:

  • ninguno

Solución:

  • /LRN/CL_S4D400_BTS_COMPUTE (clase global)

Tarea 1: Declaración variable

En su propio paquete, cree una nueva clase global y defina variables numéricas para la entrada.

Pasos

  1. Cree una nueva clase global que implemente la interfaz IF_OO_ADT_CLASSRUN (nombre sugerido: ZCL_##_COMPUTE, donde ## representa su número de grupo).

    1. Seleccione ArchivoNuevoClase ABAP.

    2. Introduzca el nombre del paquete en el campo Paquete. En el campo Nombre, introduzca el nombre ZCL_##_COMPUTE, donde ## representa su número de grupo.

    3. Introduzca una descripción.

    4. En el marco de grupo Interfaces, seleccione Añadir.

    5. Introduzca IF_OO_ADT_CLASSRUN. Cuando la interfaz aparezca en la lista de aciertos, haga doble clic en ella para añadirla a la definición de clase.

    6. Seleccione Siguiente.

    7. Marque su orden de transporte y seleccione Finalizar.

  2. En el método IF_OO_ADT_CLASSRUN~MAIN, declare dos variables para valores enteros (nombres sugeridos: number1 y number2).

    1. Añada el código siguiente:

      Code Snippet
      1234
      DATA number1 TYPE i. DATA number2 TYPE i.
  3. Implemente una valoración para cada una de las dos variables numéricas. Asigne un valor negativo a la primera variable y un valor positivo a la segunda variable.

    1. Añada el código siguiente:

      Code Snippet
      1234
      number1 = -8. number2 = 3.

Tarea 2: Procesamiento de datos

Calcule un ratio y escriba el resultado en la consola.

Pasos

  1. Implemente una expresión aritmética que calcule el ratio de los dos números. Almacene el resultado en una variable que declare mediante una declaración en línea (nombre sugerido: resultado).

    1. Añada el código siguiente:

      Code Snippet
      123
      DATA(result) = number1 / number2.
  2. Implemente un modelo de cadena que agrupe un texto como este:"6 / 3 = 2", con los valores reales de las variables en lugar de 6, 3 y 2. Almacene el resultado en una variable que declare mediante una declaración en línea (nombre sugerido: salida).

    1. Añada el código siguiente:

      Code Snippet
      123
      DATA(output) = |{ number1 } / { number2 } = { result }|.
  3. Llame el método out->write( … ) para escribir el texto en la consola.

    1. Proceda como lo ha hecho en el ejercicio anterior.

Tarea 3: Activar y realizar un test

Active y pruebe la aplicación de consola.

Pasos

  1. Active la clase.

    1. Pulse Ctrl + F3 para activar la clase.

  2. Ejecute la aplicación de consola.

    1. Pulse F9 para ejecutar la aplicación de consola.

  3. Pruebe la aplicación con diferentes valores de entrada.

    1. Edite las valoraciones y, a continuación, actívelas y ejecútelas como antes.

Tarea 4: Controlar la precisión del resultado

Asegúrese de que el resultado se redondea a un valor con 2 decimales y no a un valor entero.

Pasos

  1. En lugar de una declaración en línea, utilice una declaración explícita de resultado variable. Utilice un tipo numérico que permita especificar el número de decimales.

    1. Al principio del método if_oo_adt_classrun~main, añada el siguiente código:

      Code Snippet
      123
      DATA result TYPE p LENGTH 8 DECIMALS 2.
    2. En la línea de código con la declaración en línea, sustituya DATA(result) por result.

  2. Active la clase y vuelva a realizar el test.

    1. Proceda como lo ha hecho antes.

    2. Compare su código con el siguiente extracto de la solución modelo:

      Code Snippet
      12345678910111213141516171819202122232425262728293031323334
      METHOD if_oo_adt_classrun~main. * Declarations ************************** DATA number1 TYPE i. DATA number2 TYPE i. DATA result TYPE p LENGTH 8 DECIMALS 2. * Input Values ************************** number1 = -8. number2 = 3. * Calculation ************************** * DATA(result) = number1 / number2. "with inline declaration result = number1 / number2. DATA(output) = |{ number1 } / { number2 } = { result }|. * Output ************************** out->write( output ). ENDMETHOD.