En este ejercicio, amplíe su clase local con atributos para el aeropuerto de salida y el aeropuerto de destino, y lea los valores para estos atributos de una tabla de base de datos.
Tarea 1: Copiar plantilla
Copie la clase de modelo. Como alternativa, copie la solución del ejercicio anterior.
Pasos
Copie la clase /LRN/CL_S4D400_CLS_CONSTRUCTOR en una clase de su propio paquete (nombre sugerido: ZCL_##_SELECT, donde ## representa su número de grupo).
Abra el código fuente de la clase global /LRN/CL_S4D400_CLS_CONSTRUCTOR.
Vincule la vista Explorador de proyectos con el editor.
En la vista Explorador de proyectos, haga clic con el botón derecho en la clase /LRN/CL_S4D400_CLS_CONSTRUCTOR para abrir el menú contextual.
En el menú contextual, seleccione Duplicar ....
Introduzca el nombre del paquete en el campo Paquete. En el campo Nombre, introduzca el nombre ZCL_##_SELECT, donde ## representa su número de grupo.
Ajuste la descripción y seleccione Siguiente.
Confirme la orden de transporte y seleccione Finalizar.
Tarea 2: Declarar atributos adicionales
Amplíe la clase local lcl_connection con los atributos de instancia privada airport_from_id y airport_to_id. Añada algunas salidas para los nuevos atributos a la implementación del método get_output.
Nota
Los nuevos atributos aún no se han rellenado. Para rellenarlos, añadiremos una sentencia SELECT al constructor en una de las siguientes tareas de este ejercicio.
Pasos
Cambie a la clase local lcl_connection.
En la clase global, seleccione Tipos locales.
Añada los siguientes atributos privados a la definición de clase:
Atributos
| Nombre de atributo | Alcance | Tipo de datos |
|---|
| airport_from_id | instancia | /DMO/AIRPORT_FROM_ID |
| aeropuerto_to_id | instancia | /DMO/AIRPORT_TO_ID |
Ajuste el código de la siguiente manera:
12345678910
PRIVATE SECTION.
DATA carrier_id TYPE /dmo/carrier_id.
DATA connection_id TYPE /dmo/connection_id.
DATA airport_from_id TYPE /dmo/airport_from_id.
DATA airport_to_id TYPE /dmo/airport_to_id.
ENDCLASS.
Amplíe la implementación del método get_output. Añada más plantillas de cadena al parámetro de retorno r_output. Incruste los nuevos atributos como expresiones en los modelos de cadena.
Navegue a la implementación del método get_output.
Ajuste el código de la siguiente manera:
1234567
APPEND |--------------------------------| TO r_output.
APPEND |Carrier: { carrier_id }| TO r_output.
APPEND |Connection: { connection_id }| TO r_output.
APPEND |Departure: { airport_from_id }| TO r_output.
APPEND |Destination: { airport_to_id }| TO r_output.
Active la clase. Ejecútelo y analice la salida de la consola.
Pulse Ctrl + F3 para activar la clase.
Pulse F9 para ejecutar la clase.
Tarea 3: Analizar la tabla de base de datos
Analice la definición de la tabla de base de datos /DMO/CONNECTION.
Pasos
Abra el objeto de desarrollo que contiene la definición de la tabla de base de datos /DMO/CONNECTION.
En la barra de herramientas de eclipse, seleccione Abrir objeto de desarrollo ABAP o pulse Ctrl + Mayús + A.
En el campo de entrada, introduzca /dmo/con como string de búsqueda.
En la lista de posiciones coincidentes, haga clic en /DMO/CONNECTION (Tabla de base de datos) y seleccione OK.
Abra la información de elemento (F2) para la tabla de base de datos /DMO/CONNECTION.
Haga clic en /dmo/connection después de la palabra clave define table y pulse F2 para mostrar la información del elemento.
Tarea 4: Leer datos de la base de datos
En el constructor de método de la clase local lcl_connection, implemente una sentencia SELECT que lea valores para los nuevos atributos de la tabla de base de datos /DMO/CONNECTION.
Pasos
Vuelva a la clase local lcl_connection en su clase global.
En la vista de editor de Eclipse, abra la pestaña ZCL_##_SELECT.
En la clase global, seleccione Tipos locales.
Navegue a la implementación del constructor de métodos.
Busque la línea de código METHOD constructor..
Después de la sentencia ENDIF., añada una sentencia SELECT que lea un registro individual de la tabla de base de datos /DMO/CONNECTION.
Ajuste el código de la siguiente manera:
123456789
IF i_carrier_id IS INITIAL OR i_connection_id IS INITIAL.
RAISE EXCEPTION TYPE cx_abap_invalid_value.
ENDIF.
SELECT SINGLE
FROM /dmo/connection
Implemente la cláusula FIELDS. Lea los campos de tabla airport_from_id y airport_to_id.
Consejo
Utilice la finalización automática (Ctrl + Espacio) para introducir los nombres de campo.
Después de FROM /DMO/CONNECTION, introduzca FIELDS.
Después de un espacio en blanco, pulse Ctrl + Espacio y seleccione airport_from_id.
Después de una coma y en blanco, pulse Ctrl + Espacio de nuevo y seleccione airport_to_id.
La cláusula FIELDS completa debería tener el siguiente aspecto:
123
FIELDS airport_from_id, airport_to_id
Implemente la condición WHERE. Restrinja todos los campos clave de la tabla de base de datos (excepto el campo de cliente) con los valores de los parámetros de importación i_carrier_id e i_connection_id. No olvide escapar de los parámetros con el prefijo @.
Consejo
Utilice la finalización automática (Ctrl + Espacio) para introducir los nombres de los elementos y los nombres de los parámetros.
Añada el siguiente código después de la cláusula FIELDS:
1234
WHERE carrier_id = @i_carrier_id
AND connection_id = @i_connection_id
Implemente la cláusula INTO. Almacene el resultado SELECT en los atributos airport_from_id y airport_to_id. No olvide escapar de los atributos con el prefijo @.
Consejo
Utilice la finalización automática (Ctrl + Espacio) para introducir los nombres de atributo.
Ajuste el código de la siguiente manera:
123456
WHERE carrier_id = @i_carrier_id
AND connection_id = @i_connection_id
INTO ( @airport_from_id, @airport_to_id ).
La sentencia SELECT completa debería tener el siguiente aspecto:
12345678
SELECT SINGLE
FROM /dmo/connection
FIELDS airport_from_id, airport_to_id
WHERE carrier_id = @i_carrier_id
AND connection_id = @i_connection_id
INTO ( @airport_from_id, @airport_to_id ).
Implemente el tratamiento de errores después de la sentencia SELECT. Verifique el contenido del campo de sistema sy-subrc. Si no es igual a cero, emita la excepción CX_ABAP_INVALID_VALUE.
Añada el siguiente código después de la sentencia SELECT:
12345
IF sy-subrc <> 0.
RAISE EXCEPTION TYPE cx_abap_invalid_value.
ENDIF.
Active la clase. Ejecútelo y analice la salida de la consola. Verifique que la salida de los nuevos atributos muestre datos.
Pulse Ctrl + F3 para activar la clase.
Pulse F9 para ejecutar la clase.