Módulos de función

[sap6.JPG]

Una función es una subrutina externa especial que se almacena en una “biblioteca central” de SAP. Hay muchas predefinidas, de librería, así como subrutinas, que pueden ser llamados desde cualquier programa Abap/4. Se pueden crear otras nuevas (indicando el grupo de funciones al que van a pertenecer). Las funciones se crean por menú en Workbench Abap/4 – Biblioteca de Funciones. También se pueden ver y testar(probar su funcionamiento introduciendo valores en los parámetros de entrada de forma manual, al pulsar en el botónTest).

  • Grupo de funciones: Sirve para reutilizar funciones (son programas que calculan algo, que devuelven algo como parámetro(s) de salida). Es análogo a un pool de subrutinas(agrupación de subprogramas). El grupo de funciones crea un programa module pool (se compone sólo de sentencias INCLUDE) de nombre SAPLXXXX, con XXXX el nombre del grupo de funciones.
  • Sintaxis de la llamada a una función: Con esta sentencia se llama a un módulo de función desde programa. Conviene escribir la sintaxis de esta sentencia usando el botón deTraer Modelo del Editor Abap/4, para que aparezcan automáticamente los parámetros de concretos de la función.CALL FUNCTION nombre [ EXPORTING f1 = a1 … fn = an ][ IMPORTINGf1 = a1 … fn = an ] [ CHANGING f1 = a1 … fn = an ][ TABLES f1 = a1 … fn = an ] [ EXCEPTIONS f1 = a1 … fn = an ].
  • EXPORTING: Parámetros que van hacia el módulo, son los de entrada (la función por tanto no los modifica). Se dan valores actuales a1 … an a los parámetros formales f1 … fnde la función (que estarán declarados como IMPORT en la función).
  • IMPORTING: Parámetros de salida (en la función estarán declarados como EXPORT). CHANGING: Parámetros de entrada / salida (son modificables). TABLES: Se usa para pasar tablas internas como parámetros.
  • EXCEPTIONS: Se usa para gestionar excepciones y errores. Cuando se activa la excepción fi, en el campo de retorno SY-SUBRC se tendrá el valor ai. Así se puede saber qué ocurrió al ejecutar la función. Con OTHERS = a se da tratamiento a errores no contemplados.
  • ERROR-MESSAGE = re. Se usa para tratar errores generando un mensaje. Se tendrá el valor re en SY-SUBRC. Se podrá mandar el mensaje desde el programa llamante, accediendo a los campos del sistema: SY-MSGID (nombre del mensaje), SY-MSGNR (número del mensaje), SY-MSGTY (tipo del mensaje), SY-MSGV1 … SY-MSGV4 (4 textos para los 4 posibles parámetros &del mensaje).
    Ejemplo:  

    DATA: text(20),
          front(20),
          end(20).
    
    text = 'testing: string-split'.
    
    CALL FUNCTION 'STRING-SPLIT'               " módulo de función predefinido
      EXPORTING delimiter = ':' string = text  " parámetros de entrada
      IMPORTING head = front tail = end        " parámetros de salida
      EXCEPTIONS not_found = 1 OTHERS = 2.     " excepciones
    
    CASE sy-subrc. … ENDCASE.                  " tratamiento de los errores

  • Objetos parciales de una función:
    • Atributos y parámetros: Una función tiene los siguientes parámetros: EXPORTING (de entrada a la función), IMPORTING (de salida. Resultado de la función), CHANGING(de entrada / salida), TABLES (tablas internas de entrada / salida), EXCEPTIONS(excepciones producidas por la función. Se usa para el manejo de errores).
    • Texto fuente: Código Abap/4 de la función.
    • Documentación: Asociada a la función, dependiente del idioma.
    • Datos globales: Código Abap/4 con las sentencias declarativas del grupo de función.
    • Programa principal: Programa que llama a la función. Cada módulo de función tiene su correspondiente “include” (CALL FUNCTION) en el programa.
  • Sintaxis de la definiciónde la función:FUNCTION nombre [ EXPORT f1 … fn ] [ IMPORT f1 … fn ] [ TABLES f1 … fn ][ EXCEPTION f1 … fn ]. bloque. ENDFUNCTION.

Se usa esta sentencia para crear el código fuente de un módulo de funciones. El nombre son 4 caracteres. No debe escribirse REPORT ni PROGRAM. El resto es similar a una subrutina, pero no se declaran con DATA variables para los parámetros EXPORT ni IMPORT (ya lo hace SAP automáticamente). Puede usarse en toda función de grupo de funciones XXXX un include llamado LXXXXTOP. El resto de includes que use la función se llamarán: LZZZZUYY, con ZZZZel nombre de dicha función, e YY el número del include. Tras el ENDFUNCTION pueden codificarse las subrutinas que use dicha función, si tiene.

  • Gestión de excepcionesdentro de un módulo de función. Hay 2 maneras:RAISE excepción.

    MESSAGE … RAISING excepción.

    La única manera de gestionar errores dentro de un módulo de función es elevar excepciones, ya que no se pueden usar mensajes en ellas. La segunda sentencia activa un mensaje, pero no lo muestra. Para poder visualizarlo hay que acceder a los campos del sistema de la tabla SYST, donde se almacena el texto del mensaje, número, … pero desde el programa principal).
    Ejemplo:

    CALL FUNCTION ... EXCEPTIONS too_long = 5.   "código del programa principal
    
    IF SY-SUBRC = 5 MESSAGE Exx.                 "código del programa principal
    
    FUNCTION mi_división IMPORT n1 n2 EXPORT result EXCEPTION div_zero.
    
      IF n2 = 0.
        RAISE div_zero.                          "elevar excepción
      ELSE.
        result = n1 / n2.
      ENDIF.
    
    ENDFUNCTION.

[sap1.JPG]

 

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: