Gadgets para Blogger

Clases de excepción en SAP ABAP

Definiendo Excepciones
Las excepciones se representan mediante objetos que son instancias de clases de excepción. Definir una excepción es, por lo tanto, lo mismo que crear una clase de excepción.

Todas las clases de excepción deben heredar de la superclase común CX_ROOT y una de sus clases subordinadas:

· CX_STATIC_CHECK

· CX_DYNAMIC_CHECK

· CX_NO_CHECK

. La asignación de clases de excepción a una de estas tres rutas de la jerarquía de herencia determina la forma en que se propagan las excepciones asociadas. Hay un registro de clases de excepciones predefinidas CX_SY _... cuyas excepciones se producen en situaciones de error en el entorno de tiempo de ejecución. Todas estas clases heredan de CX_DYNAMIC_CHECK o CX_NO_CHECK, pero no de CX_STATIC_CHECK (consulte la jerarquía en la documentación de la palabra clave ABAP).

Todas las clases de excepción deben comenzar con el prefijo CX_. Generalmente se definen globalmente con el Generador de clases de ABAP Workbench. Sin embargo, también se pueden definir clases de excepciones locales.

Se pueden definir clases de excepción (abstractas) individuales que se usan como la superclase de clases de excepciones adicionales. Las excepciones de las clases subordinadas se pueden manejar juntas usando una superclase.

Las clases de excepción tienen las siguientes características:

· Constructor
El constructor debe tener una estructura predefinida y una interfaz específica. Con las clases globales, el Generador de clases genera el constructor correcto y lo establece en un estado inmutable. El constructor tiene dos parámetros de IMPORTACIÓN:

TEXTID del tipo SOTR_CONC

Este parámetro se puede usar para determinar cuál de los textos de excepción usará la excepción.

ANTERIOR del tipo CX_ROOT

Este parámetro se puede usar para asignar al atributo PREVIOUS una excepción previa.

· Métodos
En clases de excepción, puede definir sus propios métodos. Los siguientes dos métodos predefinidos se heredan de la clase raíz CX_ROOT:

GET_TEXT

Envía los textos de excepción de una clase (controlada por el atributo TEXTID) como una cadena.

GET_SOURCE_POSITION

Devuelve el nombre del programa, el nombre de un posible programa de inclusión y el número de línea de la declaración que generó la excepción.

· Atributos
Los atributos de las clases de excepción se utilizan para transportar información adicional sobre una situación de error al controlador. La información principal es, sin embargo, siempre el hecho de que se ha producido una excepción de una clase en particular. Los siguientes atributos se heredan de CX_ROOT:

TEXTID

Se usa para especificar la excepción de una clase de manera más precisa mediante el uso de varios textos de excepción. Se evalúa en el método GET_TEXT.

ANTERIOR

Si se asigna una excepción a otra excepción, se puede definir una referencia a la excepción original en este atributo a través de la entrada EXPORTING de la instrucción RAISE EXCEPTION y mediante el parámetro IMPORTING del constructor con el mismo nombre. Esto puede generar una cadena de objetos de excepción. En caso de error de tiempo de ejecución, se envían los textos de excepción de todas las excepciones de la cadena. El mapeo de una excepción a otra excepción solo es beneficioso si el contexto en el que ocurrió la excepción original es importante para caracterizar la situación de error.

KERNEL_ERRID

El nombre del error de tiempo de ejecución asociado se almacena en este atributo si la excepción fue provocada por el entorno de tiempo de ejecución, por ejemplo, COMPUTE_INT_ZERODIVIDE con una división por cero. Si no se maneja la excepción, se produce precisamente este error de tiempo de ejecución.

Los parámetros no se pueden transferir al constructor para este atributo. Si la excepción se plantea con RAISE EXCEPTION, el atributo se establece en inicial.

Clases de excepción global
Las clases de excepción global se definen y administran en el Generador de clases. Si se elige la convención de nomenclatura correcta (prefijo CX_) y la clase de clase de clase de excepción cuando se crea una nueva clase, el Generador de clases se convierte automáticamente en el Creador de excepciones.

El generador de excepciones ofrece precisamente la funcionalidad requerida para definir clases de excepción y genera componentes definidos de manera independiente que no deben modificarse. Cuando se crean clases, se debe especificar la categoría de la excepción, en otras palabras, si se debe heredar de CX_STATIC_CHECK, CX_DYNAMIC_CHECK o CX_NOCHECK.

Páginas de pestañas del Creador de excepciones
El Creador de excepciones tiene las páginas de pestaña Propiedades, Atributos, Métodos y Textos.

· Las propiedades normalmente no necesitan ser cambiadas.

· Excepto por los cuatro atributos heredados mencionados anteriormente, el Creador de excepciones puede generar más atributos públicos. Los contenidos de estos atributos especifican la excepción más claramente y gestionan los textos de excepción.

· Todos los métodos se heredan de CX_ROOT. Nuevos métodos no pueden ser agregados. El constructor de la instancia se genera automáticamente. Asegura que, cuando se produce una excepción, los atributos tienen los valores correctos. También transfiere el texto de la superclase para una clase de excepción cuyo texto de excepción no se especifica explícitamente.
La instancia constructor se genera sobre la base de los atributos, que se configuran sobre la base de los textos de excepción. Cambiar los atributos en las superclases puede, por lo tanto, invalidar los constructores de las clases subordinadas. Los constructores de clases subordinadas se pueden regenerar en Utilidades → Limpieza → Constructor. · Los textos son una característica especial de las clases de excepciones y del generador de excepciones. Para obtener más información, consulte Textos de excepción. Clases de excepciones locales Las clases de excepciones locales se pueden definir para excepciones específicas que solo se producen dentro de un solo programa ABAP. La condición para una clase de excepción local es que hereda de una de las tres clases CX_STATIC_CHECK, CX_DYNAMIC_CHECK, o CX_NO_CHECK, o de sus clases subordinadas. Se puede crear un constructor individual y atributos individuales. Sin embargo, no se deben crear métodos individuales, y los métodos de las superclases no se deben redefinir. Ejemplos de clases de excepciones locales Ejemplo de informe DEMO_LOCAL_EXCEPTION_1. clase CX_LOCAL_EXCEPTION definición que hereda de CX_STATIC_CHECK. clase final inicio de la selección. tratar. elevar el tipo de excepción CX_LOCAL_EXCEPTION. atrapa CX_LOCAL_EXCEPTION. mensaje 'Excepción local!' Tipo i'. Endtry.

Este ejemplo muestra una clase de excepción local mínima, que es simplemente la representación local de una de las tres clases subordinadas directas de CX_ROOT. Se puede usar en el programa. Informe de ejemplo DEMO_LOCAL_EXCEPTION_2. clase CX_LOCAL_EXCEPTION definición que hereda de CX_STATIC_CHECK. sección pública. datos LOCAL_TEXT tipo STRING. métodos CONSTRUCTOR importando tipo de texto STRING. clase final clase CX_LOCAL_EXCEPTION implementación. método CONSTRUCTOR. SUPER-> CONSTRUCTOR (). LOCAL_TEXT = TEXTO. endmethod. clase final datos tipo OREF ref a CX_LOCAL_EXCEPTION. inicio de la selección. tratar. elevar el tipo de excepción CX_LOCAL_EXCEPTION exportando TEXT = `Excepción local`. atrapa CX_LOCAL_EXCEPTION en OREF. mensaje OREF-> LOCAL_TEXT tipo 'I'. Endtry. En este ejemplo, la clase de excepción del ejemplo anterior se amplía para incluir un atributo individual y un constructor. El parámetro IMPORTING del constructor se debe suministrar cuando se produce la excepción (se requiere aquí). El atributo se puede evaluar en el controlador de la excepción. Informe de ejemplo DEMO_LOCAL_EXCEPTION_3. definición de la clase CX_LOCAL_EXCEPTION que hereda de CX_SY_ARITHMETIC_ERROR. sección pública. métodos CONSTRUCTOR importando SITUACIÓN tipo STRING. clase final clase CX_LOCAL_EXCEPTION implementación. método CONSTRUCTOR. SUPER-> CONSTRUCTOR (OPERACIÓN = SITUACIÓN). endmethod. clase final datos tipo OREF ref a CX_LOCAL_EXCEPTION. datos TEXTO tipo STRING. inicio de la selección. tratar. elevar el tipo de excepción CX_LOCAL_EXCEPTION exportando SITUACIÓN = `START-OF-SELECTION`. atrapa CX_LOCAL_EXCEPTION en OREF. TEXT = OREF-> GET_TEXT (). mensaje TEXTO tipo 'I'. Endtry.


En este ejemplo, una clase de excepción se deriva de una de las clases de excepciones predefinidas para situaciones de error en el entorno de tiempo de ejecución. Un constructor individual se define con un parámetro de IMPORTAR individual que suministra el constructor de la superclase con este parámetro. Cuando se maneja la excepción, el texto de excepción, tal como se define en la superclase, se lee con GET_TEXT.

No hay comentarios:

Publicar un comentario

Esperamos tus comentarios y sugerencias para mejorar el sitio.

Related Posts