Unit 8Modularization Lesson: Modularization - Basics and Overview Figure 118: Options for Using Modularization Units Una unidad de modularización. Es una parte de un programa en el que una función particular es encapsulada. La modularización hace más fácil mantener los programas. Local Program Modularization Figure 119: Local Program Modularization Hay dos técnicas para la modularización de programas locales en el lenguaje de programación ABAP: Subrutinas, también conocidas como form subrutines. Los métodos de las clases locales Las clases locales, métodos y subrutinas pueden tener el mismo nombre en diferentes programas sin que se produzca en los conflictos. Global Modularization Figure 120: Global Modularization También existen dos técnicas para la modularización global en el lenguaje de programación ABAP: Módulos de función que se organizan en grupos de funciones Los métodos de las clases globales Las unidades de modularización definidas Globalmente pueden ser utilizadas por cualquier número de programas a la vez. Las unidades de modularización definidas globalmente se almacenan de forma centralizada en el repositorio y se carga cuando sea necesario. Encapsulating Data Figure 121: Separating Data Lo ideal sería que las unidades de modularización que son llamados no utilicen los objetos de datos del programa que llama directamente. Este principio es conocido como encapsulación de datos. La encapsulación de datos es una ayuda importante en el desarrollo de código transparente, fuente fácil de mantener. Parameters and Interface Figure 122: Data Transports Between the Program and the Modularization Unit Los parámetros se utilizan para intercambiar datos entre el programa y el módulo. La unidad de modularización (importing parameters). devuelve los datos de la unidad de modularización de la persona que llama (exporting parameters). El número total de parámetros en una unidad de modularización es llamado la interfaz o firma. . Los parámetros disponibles se determinan cuando se define la unidad de modularización. o pasa datos a la unidad de modularización y devuelve los datos después de que ha sido cambiado (parameters changing).Data Transports. Lesson Summary Ahora tu deberias ser capaz de: . Nombrar las técnicas básicas de modularización. . Lesson: Modularization with Subroutines La modularización con subrutinas es una de las técnicas más antiguas de programación en ABAP. Parameter Definition for Subroutines Figure 124: Passing Parameters . Puede usar todas las variables (globales) definidas en el programa principal de una subrutina. estos son visibles a nivel global dentro del programa y se puede cambiar en cualquier punto de todo el programa. .Visibility of Global Variables Si las variables se definieron en el programa principal. Internal Program Modularization with Subroutines Figure 123: Simple Example of a Subroutine Una subrutina es una unidad de modularización dentro de un programa. Estos son reemplazados por las variables requeridas globales cuando la subrutina se llama. Sin embargo. Estos marcadores se llaman parámetros formales y juntos forman la interfaz de subrutina.Figure 125: Passing Parameters . . usted no utiliza variables globales en la subrutina sino los marcadores de posición. Usted tiene que declarar la interfaz cuando se define la subrutina.Defining an Interface Usted puede abordar todas las variables (globales) definidas en el programa principal de una subrutina. con el fin de llamar a una subrutina con los objetos de datos diferentes para cada situación. Hay tres tipos de paso para subrutinas: Llamada por valor: Se realiza una copia del parámetro real FORM xyz USING value(F1)… “ Call by Value Llamada por valor y resultado: Lo mismo se aplica para este tipo de paso que para. el valor que se cambió a este punto de la copia se escribe de nuevo a la original. al final regular de la subrutina. FORM xyz CHANGING value(F2)… “ Call by Value and Result Llamada por referencia: El parámetro actual se asigna directamente al parámetro formal. Sin embargo. FORM xyz CHANGING f3… “ Call by Reference . Llamada por valor.Figure 126: Ways of Passing Interface Parameters La manera en que estas variables de programa principal se pasan a los parámetros formales de la subrutina se llama el tipo de paso y se especifica para cada parámetro de la interfaz de la subrutina. Figure 127: Defining and Calling Subroutines Estructura de una subrutina: A subroutine is introduced with FORM. Los parámetros actuales de cualquier tipo pueden ser transferidos a dicho parámetro. Figure 128: Typing the Interface Parameters Un parámetro formal se escribe de forma genérica si se escriba usando TYPE ANY. o no se escribe nada en absoluto. The ENDFORM. el tipo del parámetro actual se determina y se asigna al parámetro formal (herencia de tipo) cuando la subrutina se llama. Specify the name and the interface. En tiempo de ejecución. Statements. . ya que sólo existen en la subrutina relevante . Los parámetros formales y los objetos de datos locales de una subrutina no pueden tener los mismos nombres. Local and Global Data Objects Figure 130: Visibility of Global and Local Data Objects Las variables definidas en el programa principal son los objetos de datos globales. Las variables definidas dentro de una subrutina se llaman locales.al igual que los parámetros formales. así como en cada subrutina llamada. . Son visibles en el programa principal entero.Figure 129: Typing the Interface Parameter for Structures and Internal Tables Usted será introducido a las estructuras de las tablas internas en una lección posterior. Los parámetros formales para los objetos de datos siempre se deben tipear a fin de que sus componentes puedan ser accedidos dentro de la subrutina. . el resultado del cálculo de porcentaje se debe redondear internamente al número entero más cercano con un decimal. Cuando a continuación. se crea una variable local con un solo decimal y almacenar el resultado del cálculo del primero. El sistema de ejecución automáticamente redondea el resultado al número entero más cercano de acuerdo con el número disponible de lugares decimales.Figure 131: Syntax Example: Local Auxiliary Variables for Rounding En el ejemplo anterior. Para ello. copiar el resultado en el parámetro de retorno. pero sin embargo. un cero sólo es necesario añadir la segunda cifra decimal. volvió con dos decimales. (Si lo prefiere. definen la subrutina y guarda el programa principal. .Calling Subroutines Figure 132: Implementing a Subroutine Call La sentencia PERFORM para llamar a una subrutina puede generarse en el código fuente. definen la subrutina y guardas el programa principal. La ventaja de generar la llamada es que es imposible perderse o mezclar parámetros. Mover hasta el punto de llamada deseado en su programa de arrastrar y soltar. La subrutina recién definida aparece en el área de navegación. también puede poner en práctica la generación de la llamada con botón Pattern en el Editor de ABAP). En primer lugar. Todo lo que tienes que hacer ahora es cambiar los parámetros formales en el código fuente generado con los correspondientes parámetros actuales. En primer lugar. y continuar) también están disponibles en el clásico depurador ABAP con el mismo significado. regresar. ejecutar. . (F5) Puede ejecutar el resto de la subrutina sin pasar por la elección de Return. (F7) Todas las funciones de control del depurador (solo paso. puede ejecutar la subrutina completa sin pasar por la elección de Execute. (F6) Puede utilizar un Single Step para parar en la primera declaración de la subrutina y rastrear sus operaciones en más detalle.Modularization Units in the Debugger Figure 133: Subroutines in Debugging Mode Si la instrucción actual es una llamada a subrutina. Llamar subrutinas . Lesson Summary Ahora tu deberias ser capaz de: . . Definir subrutinas . Analizar la ejecución de subrutinas en modo Debug. La herramienta para esto es la Call Stack..Figure 134: Debugging .Call Stack Bajo la página de Standar Tab en el depurador se puede ver en los programas de la subrutina se llama. Los módulos de función se asignan a los grupos de funciones. Pantallas: Estas pueden ser llamados desde todos los módulos de función en el grupo. . Subrutinas: Estos pueden ser llamados desde todos los módulos de función en el grupo. Cada módulo de función tiene una interfaz con los parámetros para la importación o exportación de datos. que son visibles para y se puede cambiar por todos los módulos de función dentro del grupo.Lesson: Modularization with Function Modules Working with Function Modules Figure 135: Function Group Un módulo de función es una subrutina con la función correspondiente que se almacena centralmente en la librería de funciones del sistema SAP. es decir. Un grupo de función puede contener los mismos componentes que un programa ejecutable: Objetos de datos: Son global en relación con el grupo de funciones. La interfaz de un módulo de función puede contener los siguientes elementos: Import parameter. Los parámetros opcionales no tienen que ser suministrados con los datos durante la llamada. . Pueden ser incrementados en el módulo de funciones en situaciones de error determinados y proporcionar información sobre el error de procesamiento respectivo en el módulo de funciones. Estos sólo pueden ser vistos en el módulo de función. Los parámetros de exportación son siempre opcionales. una breve descripción y el grupo de funciones al que pertenece. Exceptions. En general. El programa de llamada acepta la salida del módulo de funciones por medio de la asignación de una “Variable de recepción” a un parámetro de exportación. Export parameter.Figure 136: Function module Las propiedades de un módulo de funciones incluyen. Las excepciones deben ser manejados por el programa de llamada. Changing parameter. Los valores o variables del programa de llamada puede ser transferida a ellos cuando el módulo de función es llamada. Como es el caso de subrutinas. entre otras cosas. Puedes transferir las variables del programa de llamada que son cambiado por el módulo de funciones a los parámetros Changing. los parámetros de interfaz se asignan a los tipos del diccionario ABAP. un módulo de función puede contener su propio tipo local y definiciones de datos de objeto. Cuando se llama a otro módulo de la función de este grupo. otros módulos de función en el mismo grupo de funciones se pueden acceder a estos datos. Así. un módulo de función también puede acceder a sus propios objetos de datos definidos a nivel local. así como sus parámetros de la interfaz. Además de los datos globales de su grupo de funciones.Figure 137: Data Objects Within a Function Group “If a program calls a function module. the entire corresponding function group is loaded and the function module is executed. cuando son llamados en la ejecución del programa mismo.” El grupo de funciones sigue siendo cargado en la memoria de trabajo hasta que el programa de llamada esté cerrado. Este último es utilizado para aceptar los datos o devolverlo al programa de llamada. si un módulo de función que escribe los valores de los datos globales del grupo de función es llamada. . por lo tanto se procesa sin necesidad de ser recargada y con los mismos datos globales del grupo de funciones. cambio de parámetros. No parámetros opcionales deben debe facilitarse con datos cuando el módulo de función se llama. Function Module Interface Figure 139: Function Module Interface La interfaz del módulo de función consiste en la importación.Searching for Function Modules Figure 138: Searching for Function Modules El gráfico de arriba se describen varios escenarios de búsqueda. y las excepciones Al igual que con las subrutinas se puede distinguir entre el paso por valor y paso por referencia. . exportación. Documentation and Testing Figure 140: Documentation and Test Environment Los módulos de función que están previstos y aprobados para uso en otros programas deben estar documentados. El tiempo de ejecución también se muestra. Si el módulo de funciones provoca una excepción debido a una situación de error. Por lo tanto. . puede almacenar los datos de prueba en un directorio de datos de prueba y crear secuencias de prueba. este es mostrado. con su mensaje de texto. debe repetir las pruebas varias veces utilizando los mismos datos. Se hace una distinción entre la documentación del módulo de función que se describe la función del módulo y la documentación del parámetro que le indica cómo los parámetros individuales o excepciones se utilizan. en su caso. Estos valores están sujetos a las mismas restricciones que el análisis de tiempo de ejecución. Además. En la sintaxis de llamada. los parámetros actuales se asignan a los parámetros de exportación. .Calling Function Modules Figure 141: Calling a Function Module Los módulos de función son llama con la instrucción CALL FUNCTION. el sistema pasa valores a los parámetros de importación del módulo de función. Desde la perspectiva del programa de llamada. En el bloque EXPORTING. siempre hay que especificar el nombre del parámetro de la interfaz (parámetro formal) en el lado izquierdo de la asignación del parámetro y el objeto de datos o el valor de la programa de llamada (parámetro actual) en el lado derecho. los valores se exportan a los parámetros de importación del módulo de función y los valores se importan para las variables que reciben que se asignan a los parámetros de exportación del módulo de función. Usted las puede utilizar para acceder a los resultados de la llamada. En el bloque IMPORTING de la llamada. El nombre del módulo de función sigue en letras mayúsculas y entre comillas simples. utilice el botón Pattern para generar la llamada cuando se implementa una llamada en el código fuente. . así como las excepciones se indican. lo que significa que todos los parámetros de la interfaz. si es necesario. La información opcional se comenta en la llamada. Después. Esto genera la sintaxis de llamada completa. puede mostrar el grupo de funciones en el área de navegación y arrastrar y soltar el módulo de función en el área de edición para generar la llamada en el código fuente. poner en práctica el manejo de excepciones. usted debe llenar los parámetros actuales y. Como alternativa.Figure 142: Creating Source Code for a Function Module Call A fin de evitar errores de ortografía. la SY-SUBRC del programa de llamada se pone a cero. Si la excepción está en la lista (capturado) en el bloque EXCEPTIONS de la llamada. por lo tanto se puede determinar si. y. Para ello. el código de retorno especificado se introduce en el campo del sistema SY-SUBRC del programa de llamada. y el establecimiento de un código de retorno distinto para todas las excepciones no mencionadas. . Si no es una excepción planteada por el módulo de función. Al marcar este campo después de la llamada. en su caso. Esto hace que el procesamiento del módulo de función se cancele y el sistema vuelva al programa llamante. que se planteó una excepción para que pueda actuar en consecuencia. anote las OTHERS a las excepciones formales con el código de retorno deseado. un valor no es adecuado para el cálculo). Usted también tiene la opción de establecer un código de retorno de forma explícita para algunas de las posibles excepciones.Exception Handling Figure 143: Handling Exceptions Si los errores de aplicación se producen cuando un módulo de funciones se procesa (por ejemplo. el módulo de funciones provoca la excepción correspondiente. Creating Function Groups and Function Modules Create function groups Figure 144: Creating a Function Group Creating Function Modules Figure 145: Creating a Function Module . Sugerencia: Tenga en cuenta que el bloque de comentarios directamente en la función de palabra clave se crea automáticamente por el generador de funciones y se cambia cuando se realizan cambios en los parámetros.Figure 146: Editing the Source Code Después de haber definido los parámetros IMPORTING y EXPORTING correspondientes tu puedes cambiar a la pestaña de código fuente con el fin de poner en práctica las funciones del módulo de función. . BAPI por lo general existen para las funciones básicas de un objeto de negocio. Un objeto de negocio tiene BAPI (Business Application Programming Interfaces) como métodos. tales como: Creación de un objeto Recuperar los atributos de un objeto Cambio de los atributos de un objeto Listado de los objetos Las funciones de una BAPI son encapsulados en un módulo de función que pueden ser llamados de forma remota.Working with BAPIs Figure 147: Business Objects and BAPIs El Repositorio de Objetos de Negocios (BOR) en el sistema SAP contiene objetos de negocio. pueden ser llamados por los programas ABAP del mismo sistema SAP. BAPI por lo tanto. Usted puede llamar a estos BAPI para acceder a la tabla correspondiente (s). así como por programas externos. . Change. GetDetail: Devuelve información detallada (atributos) de un objeto (la clave completa se debe especificar). Hay métodos estándar en la forma de BAPI con nombres estandarizados. modificar y eliminar objetos AddItem. Cancel: Le permite crear. el ítem de una orden) . Algunos de las BAPI estándar más importantes se enumeran aquí. Create. RemoveItem: Agrega y quita subobjetos (por ejemplo.Figure 148: Using BAPIs ¿Por qué las BAPIS no manejan excepciones? Porque otros sistemas implementan EXCEPCIONES pero no el sy-subrc como lo hace ABAP. Delete. Standard BAPIs GetList: Devuelve una lista de objetos disponibles que cumplan con los criterios de selección especificados. Usted puede navegar a su pantalla con el Function Builder. Una vez que haya encontrado el objeto de negocio requerido o BAPI. Para llamar al BAPI Explorer utilice la siguiente ruta en el SAP Easy Access menú : Tools → Business Framework → BAPI Explorer o la transacción BAPI.Figure 149: BAPI Explorer Usted puede utilizar el BAPI Explorer de para listar los objetos de negocio. haga doble clic en el módulo de función que se muestra. así como los correspondientes BAPIs con referencia a la aplicación. . puede visualizar los detalles pertinentes a la derecha de la pantalla mediante la selección de la BAPI. Figure 150: Properties of a BAPI Function Module Los módulos de función para BAPI debe cumplir los siguientes requisitos técnicos: Naming convention BAPI_<business_object_name>_<method_name> Remote enabled Contain neither user dialogs nor messages Interface parameters are typed with components of structures from the ABAP Dictionary that were created for this BAPI. (Name prefix for such structures: BAPI_) Must not contain any changing parameters until release 4. .6 Raise no exceptions: Errors are reported to the user through the special export parameter RETURN. .Figure 151: BAPI Call in an ABAP Program Si desea utilizar una BAPI dentro del mismo sistema SAP. Tenga en cuenta las restricciones ya mencionadas. usted tiene que llamar al módulo de función relevante directamente. Lesson Summary Tu ahora deberías ser capaz de: Buscar módulos de función Adquirir información sobre la funcionalidad y el uso de módulos de función Llamar a los módulos de función en su programa Crear un grupo de funciones Crear un módulo de función Explicar el rol de BAPI e identificar sus propiedades especiales . es necesario conocer algunos de los términos básicos de programación orientada a objetos. también contienen objetos de datos globales.Lesson: Modularization with Methods of Global Classes Principles of Object-Oriented Programming Antes de poder utilizar las clases y métodos globales. Classes. De la misma manera que los objetos de datos globales de un grupo de funciones se pueden acceder por todos los módulos de función en el grupo. and Methods Figure 152: Representation of a Global Class Al igual que los módulos de funciones. los métodos también tienen una interfaz. conoce como atributos. conocida como una firma. las clases tienen otros componentes también. Además de los métodos. Attributes. todos los métodos de una clase pueden acceder a los atributos de dicha clase. Entre otras cosas. exportación y cambio de parámetros y excepciones. que comprende importación. . . sólo métodos públicos están disponibles fuera de la clase. Los atributos también son normalmente encapsulados en la clase. En contraste con los módulos de función. Una distinción por lo tanto entre los atributos públicos y privados. Esta distinción se puede aplicar no sólo a los atributos.Encapsulating Data. las clases también te permiten hacer que los atributos específicos visibles para los usuarios de la clase. por lo que son bastante similares en este aspecto a las subrutinas (las rutinas) dentro de un grupo de funciones. sino también a los métodos. Los métodos privados sólo pueden ser llamados por otros métodos de la misma clase. y por lo tanto sólo se pueden leer o modificar con los métodos de la misma clase. sabemos que los objetos de datos globales que contienen no son visibles fuera del grupo de funciones. Public and Private Components Figure 153: Example of the Access Options for a Global Class Con grupos de funciones. Considerando que todos los módulos de función se pueden llamar desde fuera del grupo de funciones. Esto se denomina la encapsulación de datos en el grupo de funciones. Esto se conoce como instanciación múltiple de la clase. mientras que una clase global se puede cargar tantas veces como desee. . Tienes que generar una instancia de la clase de forma explícita en el código fuente ABAP utilizando la sentencia CREATE OBJECT.Multiple Instantiation of Classes Figure 154: Classes and Objects La principal diferencia entre las clases y grupos globales de función es que un grupo de funciones con sus objetos de datos globales sólo se pueden cargar a la vez el contexto del programa para cada programa principal. Using Methods of Global Classes Como es el caso con los objetos de otro repositorio. Con los métodos también. haga doble clic en el nombre de la clase requerida en el subnodo Class Library → Classes. a continuación. la pantalla y el procesamiento de clases globales se incorpora en el Object Navigator. Por supuesto. Como de costumbre. todas las instancias ven el mismo valor. Si sólo desea utilizar la clase. por ejemplo. .. Loa atributos estáticos existen sólo una vez para cada contexto del programa. Por el contrario. Si los métodos de instancia acceder a un atributo estático. usted tiene varias opciones para la apertura de una clase global: En el área de navegación. también puede mostrar la lista de objetos para un primer paquete y. los métodos estáticos pueden ser llamados. con el fin de distinguirlos de los atributos estáticos (o atributos de la clase). entonces sólo los atributos identificados como Public son de interés.Instance Components and Static Components Los atributos que pueden tener un valor diferente para cada caso se conocen como atributos de la instancia. sin instancia previa de la clase. Puede direccionar estos directamente fuera de la clase. La principal diferencia es que un método de instancia sólo se puede llamar si una instancia de la clase se ha generado con anterioridad. se hace una distinción entre los métodos estáticos y métodos de instancia. sin importar cuántos instancias de la clase se generan cuando se ejecuta un programa. elegir la Class / Interface e introduzca el nombre de la clase en el campo de entrada justo debajo del nombre. un método de instancia puede cambiar el valor y todos los otros casos. Por encima de todo. Attributes of Global Classes Figure 155: Definition of Attributes Seleccione la pestaña Atributes para abrir la lista de las definiciones de atributos en la clase. entonces verá el nuevo valor. .Methods and Their Signature Figure 156: Definition of Methods Seleccione la pestaña Methods para abrir la lista de todas las definiciones de método en la clase. sin la necesidad de generar una instancia de la primera clase (ver más adelante). Todos los otros métodos se utilizan para la modularización de la clase global. se le puede llamar directamente. Si un método es identificado como un “Método estático”. Sólo estos métodos pueden ser llamados externamente. primero hay que generar una instancia y luego llamar al método específicamente para esta instancia. Con los métodos también. sólo las entradas identificadas como Public son de interés para el usuario. por el contrario. En circunstancias normales. el método de instancia accede entonces los atributos de instancia que contienen valores diferentes para las distintas instancias. Con “Métodos de instancia”. Figure 158: Method Exceptions Usted también tiene que desplazarse a una ventana de visualización independiente para mostrar las excepciones de un método. . importación y cambio de parámetros. En contraste con los módulos de función no existe una lista separada para la exportación. Se accede a la lista de métodos. El tipo de parámetro se introduce en el lugar Type de columna.Figure 157: Method Parameters Hay una ventana separada para visualizar los parámetros de un método. colocando el cursor sobre el método deseado y hacer clic en el botón Exceptions. Usted acceder a él desde la lista de métodos. colocando el cursor sobre el método deseado y hacer clic en el botón de Parameters. El manejo de estas excepciones es muy diferente al manejo de las excepciones clásicas a partir de módulos de función. .10. No es posible mezclar ambos conceptos. Una casilla de verificación te indica que concepto de excepción utiliza el método respectivo. con el concepto de nueva excepción que tiene que especificar los nombres de las clases especiales. Un método puede levantar sólo nuevas excepciones basadas en clase o sólo excepciones clásicas. los llamados excepciones basadas en clase. Mientras que el concepto clásico de excepción le permite elegir cualquier identificador de excepción.Con el lanzamiento de Basis 6. las clases de excepción llamados. El concepto de excepción basada en la clase también está disponible para los módulos de función. un concepto nuevo de excepción se introdujo en ABAP. Después de haber suministrado los parámetros con los valores que puede probar el método. Si los parámetros de importación de existen éstas aparecerán en la pantalla después de haber elegido Execute. Esto debería ser posible para ejecutar el método estático inmediatamente. Si quieres poner a prueba un método estático no es necesario generar una instancia. vaya a la lista correspondiente. Los métodos pueden ser probados utilizando el icono Execute Method. Para los componentes estáticos. seleccione el componente deseado con el cursor y a continuación. seleccione el botón Documentation. . Figure 159: The Class Builder Testing Environment Usted puede probar clases globales activos: El almacenamiento temporal se asigna para los componentes de la clase. se asigna inmediatamente.Documentation and Testing Con la documentación de la clase globales. mientras que para los componentes de la instancia que se asigna después de haber elegido el botón Instance. Puedes acceder a la documentación de la clase eligiendo el botón de Class Documentation. se hace una distinción entre la documentación de la clase como un todo y la documentación de los componentes individuales. El sistema sólo muestra los componentes públicos. y el resultado del parámetro de exportación se mostrará. Para consultar la documentación de un método individual o atributo. Con los métodos estáticos el campo Instance no necesita ser llenado. Los parámetros se pasa entonces de una manera muy similar a la llamada módulo de función tanto en un bloque EXPORTING y un bloque IMPORTING. . también puede pulsar el botón “Pattern”. Hay que distinguir aquí entre un método de instancia o un método estático. A continuación. Con los métodos estáticos.Calling Static Methods Figure 160: Method Calls Using Drag and Drop Los métodos son llamados utilizando la sentencia ABAP CALL METHOD. Aquí se introduce la clase en la Class / Interface y el nombre del método en el Method. seleccione un nombre de método y arrastrarlo a la zona de edición manteniendo pulsado el botón izquierdo del ratón. En la declaración que se genera de esta manera. esta especificación comprende el nombre de la clase y el nombre del método. separados por el selector de componente estática “=>” (flecha de dos puntas). Después de esto tu especificas el método. encontrará la opción Call Method. En el área de navegación. usted sólo tendrá que añadir el parámetro actual. Alternativamente. Exception Handling Los métodos pueden levantar excepciones. WRITE ’Result value was too high’. ENDCASE. En comparación. Donde < exception class > significa la clase de excepción que se va a manejar. . WHEN 2. el programa de llamada puede reaccionar a la excepción. (Véase más arriba). Al consultar SY-SUBRC. Si la excepción correspondiente se planteó en algún lugar dentro del bloque TRY-ENDTRY. La excepción actual es manejada en un bloque de procesamiento que comienza con la sentencia CATCH < exception class >. Cuando el método termina con esta excepción clásica. el tratamiento se termina y el sistema pasa directamente al bloque CATCH correspondiente. el manejo de excepciones basadas en la clase es mucho más complejo: Handling Class-Based Exceptions La llamada se debe enlazar entre la sentencia TRY y ENDTRY. En el bloque EXCEPCTIONS de la llamada al método. WHEN 1. WRITE ’Max Value for Power is 4’. WHEN 0. CASE sy-subrc. WRITE gv_result. este código de retorno se coloca en el campo del sistema SY-SUBRC. ya sea clásico o las excepciones basadas en la clase más modernos. Handling Classic Exceptions cl_bc400_compute=>get_power EXPORTING iv_base = pa_int1 iv_power = pa_int2 IMPORTING ev_result = gv_result EXCEPTIONS POWER_VALUE_TOO_HIGH = 1 RESULT_VALUE_TOO_HIGH = 2. un código de retorno se asigna a la excepción. Las excepciones clásicas se manejan de la misma manera que ha encontrado con los módulos de función. Generating Instances and Calling Instance Methods Figure 162: Creating Objects and Calling Methods Como las instancias no tienen nombres.Figure 161: Handling Exceptions with Exception Classes Si usted genera las llamadas al método por Drag and Drop o usando Pattern. Las variables de referencia se definen mediante: DATA reference_name TYPE REF TO class_name. sólo tiene que convertir estas declaraciones en un comentario y poner en práctica los bloques catch. A continuación. usted tiene que definir las variables de referencia a fin de ser capaces de generar y hacer frente a las instancias de clases. . los estados para el manejo de las excepciones basadas en la clase se generan también. Estas son indicadores que pueden ser dirigidas a las instancias correspondientes. Las variables de referencia cada uno tiene un nombre que se puede utilizar para tratar la instancia correspondiente. Sentencia para generar una instancia de la clase que fue especificado en la definición de las variables de referencia. usted aprenderá cómo crear una clase global con un método para encapsular una función para su reutilización. Usted llama a los métodos de una instancia mediante la sentencia: CALL METHOD reference_name->method_name. la variable de referencia apunta a la instancia recién creada. Nos limitaremos a la creación de un método estático aquí. Una vez que ha sido utilizado para crear una instancia. es posible que tenga que proporcionar los parámetros de importación del método especial CONSTRUCTOR con los datos. Creating Global Classes Figure 163: Creating Global Classes in the Object Navigator .Cuando se inicia el programa. una variable de referencia todavía tiene su valor inicial (No apunta a una instancia). ya que es posible que el programa tenga varias instancias de esa clase. así. Cuando se utiliza CREATE OBJECT. Luego. Usted tiene que especificar la instancia pertinente. Este método especial es ejecutado automáticamente justo después de la creación de la instancia. sobre la base de un ejemplo sencillo. el nombre del método por sí solo no es suficiente aquí. Usted puede usar el: CREATE OBJECT reference_name. ya no tiene el valor inicial y apunta a esa instancia. Creating Global Classes and Static Methods En esta sección. que mantiene los atributos correspondientes de la nueva instancia. A diferencia de llamar a un módulo de función. Con sus parámetros de importación. En el cuadro de diálogo que aparece. Figure 164: Calling the Source Code Editor Para implementar el código fuente de un método. . Cambie a cambiar el modo y escriba el nombre del parámetro en la lista. escriba el nombre de la nueva clase en el campo de abajo. Poner en práctica el código fuente de la forma habitual entre la sentencia METHOD <method_name>. en el área de navegación se puede elegir la clase / interfaz de la lista desplegable. Después de haber guardado las entradas.) y especificar un tipo asociado. asigne estas a una corrección en la forma habitual. una breve descripción y otras propiedades. Usted puede mantener la visibilidad y el tipo de método (estático o de instancia) con la ayuda de entrada correspondiente.. . Para crear un parámetro para un método. seleccione el método en la lista de métodos y elegir el botón de código fuente. Poder de la forma habitual a la lista de parámetros para el método correspondiente. exportación. ingrese el nombre de la clase. Confirme que desea crear esta nueva clase. Creating a Static Method Para crear el método estático. abra el menú contextual de su paquete en el área de navegación y seleccione Crear → Librería de clases → Clases.. todo lo que necesitas hacer es introducir su nombre en la lista de métodos.Para crear una clase global. y seleccione Mostrar. Utilice la entrada de ayudar a mantener el tipo de parámetro (importación. Por otra parte. y ENDMETHOD. Lesson Summary Tú ahora deberías saber: Explicar los términos básicos de programación orientada a objetos Adquirir información sobre la función y el uso de clases global y sus métodos Llamar a los métodos de las clases globales en sus programas Crear clases globales Crear y aplicar métodos simples en las clases globales .Figure 165: Showing the Signature in the Source Code Editor Mientras que usted está editando el código fuente. puede mostrar la firma para el método. seleccione el botón de firma (véase el gráfico). Para ello.