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

Definición y llamada de métodos

Objective

After completing this lesson, you will be able to definir y llamar métodos.

Definición de método

En la parte de definición de una clase se utiliza METHODS para definir un método de instancia y CLASS-METHODS para definir un método estático. El nombre del método va seguido de la firma del método; es decir, el conjunto de valores que el método intercambia con su programa de llamada y las excepciones que pueden surgir durante el método.

La firma de un método consta de parámetros y excepciones. Cada parámetro tiene un nombre y un tipo.

ABAP conoce los siguientes tipos de parámetros:

Parámetros de importación

Los parámetros de importación son valores que el método recibe del programa de llamada. Un método puede tener cualquier número de parámetros de importación.

Por defecto, los parámetros de importación son obligatorios, pero existen dos maneras de convertirlos en parámetros opcionales:

  • Mediante el suplemento OPTIONAL. El parámetro es opcional y su valor por defecto es el valor inicial adecuado al tipo del parámetro
  • Mediante el suplemento DEFAULT <val>. El parámetro es opcional y su valor por defecto es el valor que ha especificado como <val>.

Dentro de un método, no puede modificar los parámetros de importación. Si intenta modificarlos, provocará un error de sintaxis.

Parámetros de exportación

Los parámetros de exportación son los resultados que devuelve el método. Un método puede tener cualquier número de parámetros de exportación. Todos los parámetros de exportación son opcionales: un programa de llamada solo utiliza los valores que realmente necesita.

Modificar parámetros

Los parámetros changing son valores que el método recibe del programa de llamada. A diferencia de los parámetros de importación, el método puede modificar los valores de estos parámetros. A continuación, se devuelven al programa de llamada con el mismo nombre. Un método puede tener cualquier número de parámetros changing. Los parámetros de modificación son obligatorias por defecto; puede hacer que sean opcionales de la misma manera que los parámetros de importación.

Parámetros de devolución

Un parámetro de retorno es un resultado de método que se puede utilizar directamente en una expresión. Un método solo puede tener un parámetro de retorno. Los parámetros de retorno deben utilizar una forma especial de transferencia de parámetros que se denomina valor de transferencia. Esta forma de transferencia de parámetros se define rodeando el nombre del parámetro entre paréntesis (sin espacios en blanco). y precediéndola con la palabra clave VALUE.

La palabra clave RAISING se utiliza para enumerar las excepciones que puede generar el método para indicar una situación de error. El programa de llamada puede reaccionar al error.

Como ejemplo, agregue dos métodos a nuestra clase lcl_connection.

Un método set_attributes( ) para fijar los valores para el atributo carrier_id y connection_id y un método get_attributes( ) para devolver los valores de estos atributos. Donde set_attributes( ) necesita dos parámetros de importación, uno para cada atributo, el método get_attributes( ) necesita dos parámetros de exportación.

Para cada método que defina, también debe crear una implementación en la parte de implementación de la clase. Hasta que no lo haga, verá errores de sintaxis en su clase; la verificación de sintaxis le indica que falta la implementación del método.

Consejo

ADT ofrece una solución rápida para añadir la implementación que falta. Para utilizar esta solución rápida, proceda de la siguiente manera:
  1. Sitúe el cursor en una sentencia METHODS con un error y pulse Ctrl + 1.
  2. En la lista de posibles correcciones rápidas, seleccione Añadir implementación para … y pulse Intro. Si falta la implementación para varios métodos, el título Corrección rápida dice Añadir … métodos no implementados.

Cómo definir métodos

Implementación de método

Debe implementar todos los métodos que define. Esto se realiza en la parte de implementación de la clase añadiendo un par de sentencias METHOD <method _name> y ENDMETHOD.

La implementación del método contiene sentencias ABAP que pueden acceder a los parámetros del método (no tiene permiso para modificar los parámetros de importación) y todos los tipos, atributos y constantes que haya declarado en la clase, independientemente de su visibilidad. Los métodos de instancia puede acceder tanto a atributos de instancia como a atributos estáticos. Los métodos estáticos solo pueden acceder a componentes estáticos.

Dentro de la parte de implementación de una clase, puede acceder a los atributos de esa clase sin una variable de referencia y "->" (o el nombre de clase y "=>", en caso de atributos estáticos).

Solo en la implementación de métodos de instancia, ABAP ofrece ME variable integrada. ME es una variable de referencia, tipificada con la clase actual y rellenada en tiempo de ejecución con la dirección de la instancia actual. El uso de ME es opcional y debe evitarse, a menos que el nombre de un atributo colisione con el nombre de otro objeto de datos, por ejemplo, un nombre de parámetro.

En el ejemplo, los parámetros de importación del método set_attributes( ) tienen los mismos nombres que los atributos correspondientes. En tal situación, el nombre por sí mismo denota el parámetro. Solo poniendo me-> delante queda claro que se debe acceder a un atributo de la instancia actual.

Si se produce un error durante la ejecución de un método, el método puede desencadenar una excepción utilizando la sentencia RAISE EXCEPTION TYPE, seguida del nombre de la excepción.

Nota

Técnicamente, los nombres de excepción son los nombres de las clases ABAP especiales y la sentencia RAISE EXCEPTION TYPE crea una instancia de la clase referenciada. La instancia se denomina objeto de excepción y el tipo especial de clases ABAP se denomina clases de excepción.

En el momento en que se emite una excepción, se cancela la ejecución del método.

El control se devuelve al programa de llamada si se cumplen todos los requisitos previos. De lo contrario, todo el programa se cancela con un error en tiempo de ejecución.

Los requisitos previos para continuar el programa son los siguientes:

  • La excepción emitida se declara en la cláusula RAISING de la firma del método
  • La llamada de método está rodeada por una estructura de control TRY … ENDTRY
  • La estructura de control TRY … ENDTRY contiene un bloque CATCH para la excepción

Nota

Para algunas excepciones, el editor ABAP muestra una advertencia de sintaxis con una corrección rápida cuando emite una excepción que aún no se ha declarado en la cláusula RAISING del método.

Cómo implementar métodos

Llamadas de métodos

Se llama un método de instancia mediante una variable de referencia y el selector de componentes de instancia (->). El selector de componentes va seguido del nombre del método que desea llamar. Para los métodos estáticos se utiliza el nombre de clase y el selector de componente estático (=>). En ambos casos, el traspaso de parámetros tiene lugar entre paréntesis. Los paréntesis son necesarios en cualquier caso. Permanecen vacíos si no se deben transferir parámetros.

Nota

No se permiten espacios en blanco entre el nombre del método y el paréntesis de apertura. Por otro lado, necesita al menos un espacio en blanco después del paréntesis de apertura y antes del corchete de cierre.

Los parámetros de importación se enumeran después de la palabra clave EXPORTING porque el programa de llamada exporta los valores que importa el método llamado. Los nombres de parámetro se enumeran en la parte izquierda de un signo igual (=) y una expresión en la parte derecha. Esta expresión puede ser tan simple como un literal, constante o variable, pero cualquier otra expresión también está permitida siempre que el tipo de la expresión coincida con el tipo del parámetro.

Los parámetros de exportación se enumeran después de la palabra clave IMPORTING. Tenga en cuenta que para exportar el parámetro el nombre del parámetro también se enumera en la parte izquierda del signo igual. La variable de la derecha debe tener el mismo tipo que el parámetro.

Los parámetros changing se enumeran después de la palabra clave CHANGING. El tipo de la variable de la derecha debe coincidir con el tipo del parámetro de la izquierda.

El ejemplo ilustra la llamada de los métodos de instancia set_attributes( ) y get_attributes( ). Los nombres de parámetro siempre están en la parte izquierda del signo igual (=).

Consejo

Puede utilizar la compleción de código en ADT para generar la llamada de método, incluida la transferencia de parámetros. Para ello, proceda de la siguiente manera:

  1. Escriba la variable de referencia (o el nombre de clase) y el selector de componentes.
  2. Una vez que haya escrito el selector de componentes, pulse Ctrl + Espacio para visualizar una lista de componentes a los que puede dirigirse.
  3. Seleccione un método y pulse Mayús + Intro para insertar el nombre del método y su firma completa en su código. Los parámetros opcionales se enumeran en líneas de comentario.

Al llamar un método, la palabra clave IMPORTING siempre es necesaria para recibir el valor de los parámetros de exportación. Pero la palabra clave EXPORTING se convierte en opcional si solo desea proporcionar parámetros de importación.

Para métodos con solo un parámetro de importación obligatorio, incluso puede omitir la asignación de parámetros explícita. En el ejemplo, el parámetro i_carrier_id es opcional con el valor predeterminado "LH". Por lo tanto, el valor entre paréntesis se asigna al parámetro de importación obligatorio restante i_connection_id.

Cómo llamar métodos

Tratamiento de excepciones

En una sección anterior de este curso, aprendió a tratar errores de tiempo de ejecución con estructuras de control TRY … ENDTRY.

Las excepciones declaradas en la cláusula RAISING de una definición de método se tratan exactamente de la misma manera:

  • Coloque la llamada de método en el bloque TRY de la estructura de control TRY … ENDTRY.
  • Defina un bloque CATCH con el nombre de la excepción que desea tratar.

Nota

Si hay un código que desea omitir en caso de que la llamada de método haya fallado, puede colocar este código dentro del bloque TRY, después de la llamada de método.

Pruébelo: Llamadas de método y tratamiento de excepciones

  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
    123456789101112131415161718192021222324252627282930
    CONSTANTS c_carrier_id TYPE /dmo/carrier_id VALUE 'LH'. CONSTANTS c_connection_id TYPE /dmo/connection_id VALUE '0400'. DATA connection TYPE REF TO lcl_connection. DATA connections TYPE TABLE OF REF TO lcl_connection. * Create Instance ********************************************************************** connection = NEW #( ). * Call Method and Handle Exception ********************************************************************** out->write( |i_carrier_id = '{ c_carrier_id }' | ). out->write( |i_connection_id = '{ c_connection_id }'| ). TRY. connection->set_attributes( EXPORTING i_carrier_id = c_carrier_id i_connection_id = c_connection_id ). APPEND connection TO connections. out->write( `Method call successful` ). CATCH cx_abap_invalid_value. out->write( `Method call failed` ). ENDTRY.
  3. Vaya a la pestaña Tipos locales e inserte el siguiente fragmento de código allí:
    Code Snippet
    12345678910111213141516171819202122232425262728293031323334
    CLASS lcl_connection DEFINITION. PUBLIC SECTION. * Attributes DATA carrier_id TYPE /dmo/carrier_id. DATA connection_id TYPE /dmo/connection_id. * Methods METHODS set_attributes IMPORTING i_carrier_id TYPE /dmo/carrier_id DEFAULT 'LH' i_Connection_id TYPE /dmo/connection_id RAISING cx_abap_invalid_value. ENDCLASS. CLASS lcl_connection IMPLEMENTATION. METHOD set_attributes. IF i_carrier_id IS INITIAL OR i_connection_id IS INITIAL. RAISE EXCEPTION TYPE cx_abap_invalid_value. ENDIF. carrier_id = i_carrier_id. connection_id = i_connection_id. ENDMETHOD. ENDCLASS.
  4. Pulse CTRL + F3 para activar la clase y F9 para ejecutarla como una aplicación de consola.
  5. Analice la salida de la consola. Depurar el programa, jugar con el código fuente para familiarizarse con los conceptos. En particular, modifique los valores de las dos constantes para depurar la emisión de la excepción.

Métodos funcionales

Los métodos que tienen un parámetro de retorno se denominan métodos funcionales. No es posible definir más de un parámetro de retorno para el mismo método. Es obligatorio definir el parámetro de retorno en la forma VALUE(<nombre_parámetro>). Además del parámetro de retorno, un método funcional puede tener cualquier combinación de otros parámetros. Sin embargo, lo más común es añadir solo parámetros de importación. El motivo es que, con parámetros adicionales de exportación o modificación, pierde la mayor ventaja de los métodos funcionales, es decir, que puede utilizar el resultado de un método funcional directamente en otras expresiones ABAP.

La figura muestra dos ejemplos de cómo puede utilizar métodos funcionales en expresiones; el primero es un ejemplo simple en el que el parámetro de retorno se asigna directamente a una variable. El segundo ejemplo muestra cómo se utiliza la llamada del método funcional como entrada para otro método. El sistema ejecuta el método funcional y, a continuación, utiliza el valor del parámetro de retorno como entrada para el método write( ).

Pruébelo: Métodos funcionales

  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
    123456789101112131415161718192021222324252627282930313233343536
    DATA connection TYPE REF TO lcl_connection. DATA connections TYPE TABLE OF REF TO lcl_connection. * Create Instance ********************************************************************** connection = NEW #( ). connection->set_attributes( EXPORTING i_carrier_id = 'LH' i_connection_id = '0400' ). APPEND connection TO connections. * Calling Functional Method ********************************************************************** " in a value assignment (with inline declaration for result) DATA(result) = connection->get_output( ). " in logical expression IF connection->get_output( ) IS NOT INITIAL. " as operand in a statement LOOP AT connection->get_output( ) INTO DATA(line). ENDLOOP. " to supply input parameter of another method out->write( data = connection->get_output( ) name = ` ` ). ENDIF.
  3. Vaya a la pestaña Tipos locales e inserte el siguiente fragmento de código allí:
    Code Snippet
    12345678910111213141516171819202122232425262728293031323334353637383940414243
    CLASS lcl_connection DEFINITION. PUBLIC SECTION. * Attributes DATA carrier_id TYPE /dmo/carrier_id. DATA connection_id TYPE /dmo/connection_id. * Methods METHODS set_attributes IMPORTING i_carrier_id TYPE /dmo/carrier_id DEFAULT 'LH' i_Connection_id TYPE /dmo/connection_id. " Functional Method METHODS get_output RETURNING VALUE(r_output) TYPE string_table. * PROTECTED SECTION. * PRIVATE SECTION. ENDCLASS. CLASS lcl_connection IMPLEMENTATION. METHOD set_attributes. carrier_id = i_carrier_id. connection_id = i_connection_id. ENDMETHOD. METHOD get_output. APPEND |------------------------------| TO r_output. APPEND |Carrier: { carrier_id }| TO r_output. APPEND |Connection: { connection_id }| TO r_output. ENDMETHOD. ENDCLASS.
  4. Pulse CTRL + F3 para activar la clase y F9 para ejecutarla como una aplicación de consola.
  5. Analice la salida de la consola. Depurar el programa, jugar con el código fuente para familiarizarse con los conceptos. En particular, depure las diferentes llamadas del método funcional get_output( )..

Definir y llamar métodos

En este ejercicio, definirá e implementará métodos en su clase local lcl_connection. A continuación, llamará estos métodos desde el método main( ) de su clase global.

Modelo:

  • /LRN/CL_S4D400_CLS_INSTANCES (clase global)

Solución:

  • /LRN/CL_S4D400_CLS_METHODS (clase global)

Tarea 1: Copiar plantilla (opcional)

Copie la clase de modelo. Si ha finalizado el ejercicio anterior, puede omitir esta tarea y continuar editando su clase ZCL_##_LOCAL_CLASS o su clase ZCL_##_INSTANCES.

Pasos

  1. Abra el código fuente de la clase global /LRN/CL_S4D400_CLS_INSTANCES en el editor ABAP.

    1. En la barra de herramientas de Eclipse, seleccione Abrir objeto de desarrollo ABAP. Como alternativa, pulse Ctrl + Mayús + A.

    2. Introduzca /LRN/CL_S4D400_CLS como string de búsqueda.

    3. En la lista de objetos de desarrollo, seleccione /LRN/CL_S4D400_CLS_INSTANCES y, a continuación, seleccione OK.

  2. Vincule la vista Explorador de proyectos con el editor.

    1. En la barra de herramientas Explorador de proyectos, busque el botón Vincular con editor. Si aún no se ha pulsado, selecciónelo. Como resultado, el objeto de desarrollo, que está abierto en el editor, debería resaltarse en el Explorador de proyectos.

  3. Copie la clase /LRN/CL_S4D400_CLS_INSTANCES en una clase de su propio paquete (nombre sugerido: ZCL_##_METHODS, donde ## representa su número de grupo).

    1. En la vista Explorador de proyectos, haga clic con el botón derecho en la clase /LRN/CL_S4D400_CLS_INSTANCES para abrir el menú de contenido.

    2. En el menú contextual, seleccione Duplicar ....

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

    4. Ajuste la descripción y seleccione Siguiente.

    5. Confirme la orden de transporte y seleccione Finalizar.

Tarea 2: Definir métodos

En su clase local lcl_connection, defina los métodos de instancia get_output y set_attributes.

Pasos

  1. Navegue a la definición de la clase local lcl_connection.

    1. En la clase global, seleccione Tipos locales.

  2. Añada un método get_output a la sección pública de la clase. Debería tener un parámetro de retorno r_output del tipo de tabla global STRING_TABLE.

    Nota

    Recuerde rodear el nombre del parámetro de retorno con VALUE( ).
    1. Ajuste el código de la siguiente manera:

      Code Snippet
      1234567891011121314
      PUBLIC SECTION. DATA carrier_id TYPE /dmo/carrier_id. DATA connection_id TYPE /DMO/Connection_id. CLASS-DATA conn_counter TYPE i. METHODS get_output returning value(r_output) type string_table. PROTECTED SECTION.

      Nota

      Por el momento, ignore el error de sintaxis Falta implementación para el método "GET_OUTPUT".
  3. Añada un método set_attributes a la sección pública de la clase. Debería tener un parámetro de importación para cada atributo de instancia de la clase. Utilice los mismos tipos para los parámetros que ha utilizado para tipificar los atributos. Para distinguir los parámetros de los atributos, añada el prefijo i_ a los nombres de parámetro. Además, el método debe emitir la excepción CX_ABAP_INVALID_VALUE.

    1. Ajuste el código de la siguiente manera:

      Code Snippet
      123456789101112131415161718192021
      PUBLIC SECTION. DATA carrier_id TYPE /dmo/carrier_id. DATA connection_id TYPE /DMO/Connection_id. CLASS-DATA conn_counter TYPE i. METHODS set_attributes IMPORTING i_carrier_id TYPE /dmo/carrier_id i_connection_id TYPE /dmo/connection_id RAISING cx_abap_invalid_value. METHODS get_output returning value(r_output) type string_table. PROTECTED SECTION.

      Nota

      Por el momento, ignore el error de sintaxis Falta implementación para el método "SET_ATTRIBUTES".

Tarea 3: Implementar métodos

Pasos

  1. Utilice una corrección rápida para añadir las implementaciones de método a la clase.

    1. Sitúe el cursor en el nombre de uno de los métodos en el editor y pulse Ctrl + 1.

    2. Haga doble clic en la sugerencia Añadir 2 métodos no implementados.

  2. Implemente el método get_output. Añada algunos modelos de cadena para devolver el parámetro r_output. En los modelos de cadena, utilice expresiones integradas para añadir los valores de los atributos carrier_id y connection_id.

    1. En la clase local, añada el siguiente código entre las sentencias METHOD get_output. y ENDMETHOD.

      Code Snippet
      12345
      APPEND |------------------------------| TO r_output. APPEND |Carrier: { carrier_id }| TO r_output. APPEND |Connection: { connection_id }| TO r_output.
  3. Implemente el método set_attributes. Si alguno de los dos parámetros de importación está vacío (IS INITIAL), emita la excepción CX_ABAP_INVALID_VALUE. De lo contrario, rellene los dos atributos de instancia con los valores de los parámetros de importación.

    1. Ajuste el código de la siguiente manera:

      Code Snippet
      123456789101112
      METHOD set_attributes. IF i_carrier_id IS INITIAL OR i_connection_id IS INITIAL. RAISE EXCEPTION TYPE cx_abap_invalid_value. ENDIF. carrier_id = i_carrier_id. connection_id = i_connection_id. ENDMETHOD.
  4. Active su clase.

    1. Seleccione Ctrl + F3 para activar la clase.

Tarea 4: Llamar un método funcional

En el método principal de su clase global, llame el método funcional get_output.

Pasos

  1. Cambie a la implementación del método if_oo_adt_classrun~main en la clase global.

    1. En la clase global, seleccione Clase global, desplácese hacia abajo hasta la implementación del método if_oo_adt_classrun~main.

  2. Al final del método, añada un loop sobre las conexiones de tabla internas con una conexión de variable de referencia como área de trabajo.

    1. Añada el siguiente código antes de ENDMETHOD..

      Code Snippet
      12345
      LOOP AT connections INTO connection. ENDLOOP.
  3. En el loop, llame el método funcional get_output para cada instancia a su vez y escriba el resultado en la consola.

    Consejo

    Puede utilizar la llamada del método get_output directamente como entrada para out->write( ).
    1. Ajuste el código de la siguiente manera:

      Code Snippet
      1234567
      LOOP AT connections INTO connection. out->write( connection->get_output( ) ). ENDLOOP.
  4. Active la clase. Ejecútela como una aplicación de consola y analice la salida de la consola.

    1. Pulse Ctrl + F3 para activar la clase.

    2. Pulse F9 para ejecutar la clase.

    3. Analice la salida en la ventana Consola.

Tarea 5: Utilizar finalización de código y tratar excepciones

Utilice la compleción de código para llamar el método set_attributes y tratar la excepción que emite el método.

Pasos

  1. Para la primera instancia de la clase lcl_connection, sustituya el acceso directo a los atributos carrier_id y connection_id por una llamada del método de instancia set_attributes( ). Utilice la compleción de código para insertar la firma completa del método.

    Consejo

    Pulse Ctrl + Espacio después de escribir el componente select (->) para visualizar una lista de atributos y métodos disponibles. Seleccione el método y, a continuación, pulse Mayús + Intro para insertar la firma completa del método.
    1. Coloque el cursor en la siguiente línea después de la primera connection = NEW #( )..

    2. Escriba connection-> y pulse Ctrl + Espacio.

    3. Seleccione set_attributes y pulse Mayús + Intro.

    4. Transfiera valores a los parámetros de importación. Utilice los mismos literales que ha utilizado anteriormente para fijar los atributos de esta instancia.

    5. Elimine o comente el acceso directo a los atributos de instancia para esta instancia.

  2. Trate la excepción. Rodee la llamada de método con TRY. y ENDTRY.. Añada un bloque CATCH para tratar la excepción CX_ABAP_INVALID_VALUE. Asegúrese de que la nueva instancia solo se añada a las conexiones de tabla internas si la llamada de método se ha realizado correctamente.

    1. Anule el comentario de la línea de código generada CATCH cx_abap_invalid_value..

    2. Añada TRY. antes de la llamada de método.

    3. Añada ENDTRY. después de la sentencia CATCH.

    4. Entre la sentencia CATCH y la sentencia ENDTRY agregue out->write( `Method call failed` ).

    5. Mueva la sentencia APPEND hacia arriba entre la llamada de método y la sentencia CATCH.

    6. La llamada de método completa ahora debería tener el siguiente aspecto:

      Code Snippet
      1234567891011121314151617
      TRY. connection->set_attributes( EXPORTING i_carrier_id = 'LH' i_connection_id = '0400' ). * connection->carrier_id = 'LH'. * connection->connection_id = '0400'. APPEND connection TO connections. CATCH cx_abap_invalid_value. out->write( `Method call failed` ). ENDTRY.
  3. Repita el paso anterior para las otras dos instancias de la clase lcl_connection.

    1. Después de este paso, la implementación del método if_oo_adt_classrun~main debería tener un aspecto similar al siguiente:

      Code Snippet
      12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
      METHOD if_oo_adt_classrun~main. DATA connection TYPE REF TO lcl_connection. DATA connections TYPE TABLE OF REF TO lcl_connection. * First Instance ********************************************************************** connection = NEW #( ). TRY. connection->set_attributes( EXPORTING i_carrier_id = 'LH' i_connection_id = '0400' ). * connection->carrier_id = 'LH'. * connection->connection_id = '0400'. APPEND connection TO connections. CATCH cx_abap_invalid_value. out->write( `Method call failed` ). ENDTRY. * Second instance ********************************************************************** connection = NEW #( ). TRY. connection->set_attributes( EXPORTING i_carrier_id = 'AA' i_connection_id = '0017' ). * connection->carrier_id = 'AA'. * connection->connection_id = '0017'. APPEND connection TO connections. CATCH cx_abap_invalid_value. out->write( `Method call failed` ). ENDTRY. * Third instance ********************************************************************** connection = NEW #( ). TRY. connection->set_attributes( EXPORTING i_carrier_id = 'SQ' i_connection_id = '0001' ). * connection->carrier_id = 'SQ'. * connection->connection_id = '0001'. APPEND connection TO connections. CATCH cx_abap_invalid_value. out->write( `Method call failed` ). ENDTRY. * Output ********************************************************************** LOOP AT connections INTO connection. out->write( connection->get_output( ) ). ENDLOOP. ENDMETHOD.
  4. Active la clase. Ejecútelo y depure las llamadas de método.

    1. Pulse Ctrl + F3 para activar la clase.

    2. Pulse F9 para ejecutar la clase.