En SAP hay dos tipos de clases, las que podemos desarrollar en un reporte Z, como vimos en el post anterior, o las clases globales que son las que definimos en la transacción SE24.
La principal diferencia entre una clase global y una local es que las locales son especificas a un reporte, mientras las clases globales pueden ser usadas desde cualquier lado.
Para definir una clase, vamos a la transacción SE24, para seguir con el ejemplo anterior vamos a volver a crear la clase vehículo.
Hacemos click en “Create”
En la siguiente ventana ingresamos una descripción y hacemos click en “SAVE”
Creamos el objeto como un objeto local.
Nos aparecerá la siguiente ventana donde debemos especificar el método a crear, visibilidad, tipo, etc.
El siguiente paso es definir los parámetros de los métodos, para eso seleccionamos un método y hacemos click en el botón “Parameters”.
Vamos a la solapa “Attributes” y definimos nuestra variable protegida.
Con nuestra clase con los métodos y variable definidas le damos click a activar.
Nos aparecerá una ventana como la siguiente en donde seleccionamos todos los objetos y le damos OK.
Nuestra clase debería haber quedado activa.
Finalmente hay que hacer el código que en cada método para que la clase haga algo.
Metodo obtener tipo:
WRITE 'AUTO'.
Método obtener marca:
WRITE 'FORD'.
Método set_notas:
lv_notas = notas.
Método ver_notas:
notas = lv_notas.
En este punto ya tenemos nuestra clase lista, solo nos resta volver a activarla para asegurarnos que esta todo OK.
Ahora nuestra clase estará disponible para ser usada desde cualquier reporte que se quiera crear.
Abajo dejo un ejemplo de uso.
*&---------------------------------------------------------------------*
*& Report Z_CLASE_GLOBAL
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT Z_CLASE_GLOBAL.
DATA: lc_cg TYPE REF TO ZCL_VEHICULO.
CREATE OBJECT lc_cg.
lc_cg->set_notas( 'Una nota' ).
lc_cg->obtener_tipo( ).
NEW-LINE.
lc_cg->obtener_marca( ).
NEW-LINE.
DATA: lv_notas TYPE string.
lc_cg->ver_notas( IMPORTING notas = lv_notas ).
WRITE lv_notas.