Implementing Loops

Objective

After completing this lesson, you will be able to implementar bucles

Implementar bucles

Las palabras clave DO, ENDDO, LOOP y ENDLOOP se pueden utilizar para definir bucles

Los bucles en ABAP se definen en un bloque de código que se ejecuta varias veces.

La forma más simple de bucles consiste en un bloque de códigos rodeado de sentencias DO – ENDDO. Sin más medidas, estas afirmaciones podrían establecer un bucle sin fin que debe evitarse con una de las siguientes posibilidades:

Número especificado de bucles
Al ampliar la sentencia DO con una expresión de número entero seguida de la palabra clave TIMES, puede especificar explícitamente la frecuencia con la que se debe procesar el bloque de código. La expresión de enteros puede ser tan simple como un literal numérico, pero también se pueden utilizar cálculos aritméticos. Si el valor de la expresión es igual a 0, el bloque de código entre DO y ENDDO no se ejecuta en absoluto, y el programa continúa inmediatamente con el código después del ENDDO.
Cancelación basada en una condición lógica
Puede cancelar un loop en cualquier momento utilizando la sentencia EXIT. A continuación, el programa continúa con el código después de ENDDO. Tenga en cuenta que fuera del loop EXIT tiene un efecto diferente. Allí se cancela el procesamiento del bloque de procesamiento actual, por ejemplo, el método actual.

Normalmente, EXIT está rodeado por IF y ENDIF para finalizar el loop en función de una condición de cancelación. Tenga en cuenta que estos bucles pueden convertirse en bucles sin fin si la condición de abortar nunca es verdadera.

Por supuesto, es posible combinar las dos técnicas, es decir, especificar explícitamente el número de bucles y luego dejar el bucle con EXIT. Por lo tanto, el número de loops se convierte en un número máximo que puede que no se alcance en el tiempo de ejecución.

En el bloque de código entre DO y ENDDO, puede implementar accesos de lectura al objeto de datos integrado ABAP SY-INDEX. Esta variable entera sirve como contador de loop, es decir, el tiempo de ejecución ABAP aumenta la variable en uno al principio de cada bucle nuevo.

La variable incorporada ABAP SY-TABIX puede cumplir un propósito similar para los bucles. Pero tenga en cuenta que SY-TABIX no es realmente un contador, pero identifica la posición de la fila de la tabla que se procesa en el bucle actual.

Implementar un bucle DO – ENDDO

Ejemplo empresarial

Utilizando DO . .. ENDDO palabras clave, los usuarios pueden querer crear un bucle con un número especificado de bucles.

Pasos

  1. Cree una nueva clase ABAP ZCL_S4D100_XX_DO_ENDDO con la interfaz IF_OO_ADT_CLASSRUN.

    1. Cree una nueva clase ABAP con el nombre ZCL_S4D100_XX_ENDDO y añada la interfaz IF_OO_ADT_CLASSRUN.

    2. Asígnelo a su paquete y vincúlelo a su orden de transporte.

  2. Active la aplicación.

    1. Pulse Activar (Ctrl+F3).

  3. En el MÉTODO IF_OO_ADT_CLASSRUN~MAIN, defina un LOOP que repita 3 veces y emita un mensaje,

    1. Implemente el siguiente código en METHOD IF_OO_ADT_CLASSRUN~MAIN.

      Code Snippet
      123456789
      CONSTANTS: c_number0 TYPE i VALUE 3. out->write( '---------------------------------' ). out->write( 'Example 1: DO...ENDDO with TIMES' ). out->write( '---------------------------------' ). DO c_number0 TIMES. out->write( 'Hello World' ). ENDDO.
  4. Active y pruebe la clase.

    1. Pulse Activar (Ctrl+F3).

    2. Pulse F9 para ejecutar la clase.

    Practicar

Implementar un bucle DO – ENDDO con una condición de cancelación

Ejemplo empresarial

Utilizando DO . .. ENDDO palabras clave, es posible que los usuarios deseen crear un loop con una condición de cancelación utilizando la palabra clave EXIT.

Nota

En este ejercicio, XX hace referencia a su número.

Pasos

  1. Copie su clase ZCL_S4D100_XX_DO_ENDDO en ZCL_S4D100_XX_EXIT.

    1. Haga clic con el botón derecho en CLASS ZCL_S4D100_XX_DO_ENDDO en el Explorador de proyectos y seleccione Duplicar.

    2. Introduzca el paquete, el nombre y el nombre de la nueva clase ZCL_S4D100_XX_EXIT y pulse Siguiente.

    3. Añádalo a su solicitud de transporte y pulse Finalizar.

  2. Active la aplicación.

    1. Pulse Activar (Ctrl+F3).

  3. Cambie el código en if_oo_adt_classrun~main para establecer un nuevo número entero lv_number0 en un valor de c_number0 * c_number0. Crear un bucle DO y restar 1 de lv_number0 durante cada iteración del bucle. Salga del loop cuando lv_number0 sea igual a c_number0.

    1. Implemente el MÉTODO IF_OO_ADT_CLASSRUN~MAIN. con el siguiente código:

      Code Snippet
      123456789101112131415
      CONSTANTS: c_number0 TYPE i VALUE 3. DATA: lv_number0 TYPE i. lv_number0 = c_number0 * c_number0. * Count backwards from lv_number0 to c_number0 DO. out->write( |{ sy-index }: Value of lv_number0: { lv_number0 }| ). lv_number0 = lv_number0 - 1. * Abort condition IF lv_number0 <= c_number0. "If 3 = 3 EXIT. ENDIF. ENDDO.
  4. Active y pruebe el programa.

    1. Pulse Activar (Ctrl+F3).

    2. Pulse F9 para ejecutar la clase.

    Practicar