Enhancement SAPLFMDT

SAP Enhancement (Ampliaciones) es una opción de SAP para modificar los programas que utilizan user exits.

La transacción SMOD  incluye varios tipos de user exits-menu, screen y  funciones exit. 

La transacción CMOD se utiliza para la gestión de atributos, componentes y documentación de SAP enhancement, nosotros los Abapers gestionamos aquí los proyectos de ampliación las cuales son formados por alguna ampliación de la SMOD.

En la tabla transparente MODSAP se puede consultar y/o listar las exits.
En la tabla transparente MODACT se puede consultar los proyectos de ampliación.

A modo de ejemplo (no funcional) exclusivamente técnico para ver como funciona las ampliaciones, imaginaremos el siguiente caso: 

"Validaremos que si la transacción es ME52N viaje los datos de imputación de la pantalla viajen al módulo de FM, y como único alcance inicial  tenemos la función exit:  EXIT_SAPLFMDT_001" 


Paso 1: Diccionario de datos, Obtener el nombre de la ampliación SAP en base a la exit función

Como sólo en un inicio tenemos el dato de la función exit: EXIT_SAPLFMDT_001 por la tcode: SE16 consultaremos la tabla MODSAP para obtener el dato del nombre de la ampliación SAP

Nombre de la Ampliación SAP: SAPLFMDT

Donde el tipo de componente E significa
E: Exit funciones


Paso 2: Visualizar ampliación desde la SMOD

Ingresamos a la tcode: SMOD


Visualizamos los componentes de la ampliación SAPLFMDT y observamos el módulo de función EXIT_SAPLFMDT_001

Paso 3: Crear nuevo proyecto de ampliación cliente por la CMOD

Ingresaremos a la tcode CMOD para crear un nuevo proyecto con el nombre ZFM00001 la cual tendrá la ampliación SAPLFMDT


Creamos el proyecto y le asignamos un texto breve,

A nuestro proyecto añadimos la ampliación SAPLFMDT

Una vez añadido la ampliación SAPLFMDT automáticamente se visualizarán los componentes de las Exit funciones como por ejemplo: EXIT_SAPLFMDT_001

Procedemos a activar  

Ahora  si navegamos ingresando al módulo de función y pulsamos doble clic sobre el include ZXFMDTU01 observaremos que aún no nos permitirá ya que esta reservado para crearlo desde el grupo de función.
Observaremos que nos muestra el siguiente mensaje:

"Nombres programa ZX... reservados para includes de grupos de funciones exit."


Paso 4: Diccionario de datos, Visualización  del proyecto creado y la ampliación.


Observamos que por la tabla MODACT obtenemos los datos del proyecto ampliación cliente y la ampliación SAP.


Paso 5: Crear include de la Ampliación

 El módulo de función: EXIT_SAPLFMDT_001 pertenece al grupo de función XFMDT

Ingresamos a la tcode: SE80 y visualizamos el grupo de función: XFMDT


 Ubicamos el include: ZXFMDTU01 si pulsamos doble clic nos mostrará el mensaje que el Include no existe...


Pulsamos clic derecho sobre el include ZXFMDTU01 y procedemos a crearlo

... Ya saben al momento de crear el include nos solicitará crear una orden de transporte de tipo Workbench

Ahora ya tenemos habilitado el include ZXFMDTU01

Paso 6: Análisis para añadir lógica ABAP al include de la ampliación

Ahora ya tenemos creado el include lo único que nos falta es añadirle algo de lógica ABAP para leer los datos de la dynpro de la tcode ME52N.

Según el caso práctico que nos habíamos imaginado líneas arriba, dentro de la tcode ME52N, pestaña imputación, leeremos el valor ingresado en el campo FONDO y haremos que viaje a FM.

Para saber los valores de la Dynpro, dentro de la tcode ME52N en el campo fondo pulsamos F1 para ver la ayuda técnica.



Llamaremos a la función DYNP_VALUES_READ para leer los datos de la dynpro.

Paso 7: Lógica ABAP al include de la ampliación


 *&---------------------------------------------------------------------*
*&  Include           ZXFMDTU01
*&---------------------------------------------------------------------*
*ZXFMDTU01 is calle from EXIT_SAPLFMDT_01 (See by tcode SE37)
*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     REFERENCE(I_ENVIRONMENT) LIKE  TABADRS-ABADRENV
*"     REFERENCE(I_DERIVATION_DATE) LIKE  SY-DATUM
*"     REFERENCE(I_STEP_ID) TYPE  TABADRS-STEPID
*"     REFERENCE(I_FMDERIVE_SOURCE) LIKE  FMDERIVE STRUCTURE  FMDERIVE
*"  EXPORTING
*"     REFERENCE(E_FMDERIVE_TARGET) LIKE  FMDERIVE STRUCTURE  FMDERIVE
*"     REFERENCE(E_EXIT_IS_ACTIVE)
*"     REFERENCE(E_FAILED)
*"  EXCEPTIONS
*"      DERIVATION_FAILED
*"----------------------------------------------------------------------

  DATA: lv_dyname TYPE progname,
        lv_dynumb TYPE sychar04,
        lv_fund   TYPE bp_geber.

  DATA: ltd_dynpfields TYPE STANDARD TABLE OF dynpread.

  DATA: ls_dynpfield LIKE LINE OF ltd_dynpfields.
  FIELD-SYMBOLS: <dynpfield> LIKE LINE OF ltd_dynpfields.

  IF sy-tcode EQ 'ME52N'.
    CLEAR lv_fund.

    lv_dyname = 'SAPLKACB'."Large subscreen with all account assignments
    lv_dynumb = '1101'.

    CLEAR: ls_dynpfield.
    REFRESH ltd_dynpfields[].

    ls_dynpfield-fieldname = 'COBL-GEBER'."Fondo
    APPEND ls_dynpfield TO ltd_dynpfields.

    CALL FUNCTION 'DYNP_VALUES_READ'
      EXPORTING
        dyname               = lv_dyname
        dynumb               = lv_dynumb
      TABLES
        dynpfields           = ltd_dynpfields
      EXCEPTIONS
        invalid_abapworkarea = 1
        invalid_dynprofield  = 2
        invalid_dynproname   = 3
        invalid_dynpronummer = 4
        invalid_request      = 5
        no_fielddescription  = 6
        invalid_parameter    = 7
        undefind_error       = 8
        double_conversion    = 9
        stepl_not_found      = 10
        OTHERS               = 11.
    IF sy-subrc = 0.
      READ TABLE ltd_dynpfields ASSIGNING <dynpfield> INDEX 1.
      lv_fund = <dynpfield>-fieldvalue.
    ENDIF.
    e_fmderive_target-fund = lv_fund.
  ENDIF.


Paso 8: Validamos el caso práctico

A modo de prueba, ingresamos a la tcode ME52N, en la sección Posición, pestaña Imputación, modificaré el valor del campo FONDO a 03 y pulsaré en GRABAR.



Ingresamos al Debug para ver la secuencia de la lógica ABAP

Observamos que lee los datos de la dynpro  y finalmente el valor del campo COBL-GEBER viaja a FM, para este caso viaja en la variable:

E_FMDERIVE_TARGET-FUND


 Observamos que ahora el dato ingresado en la dynpro del campo fondo, pestaña imputación de la tcode ME52N ya viaja a FM.

Salimos del Debug y la solped ha sido modificada con éxito!



Nos vemos en el siguiente Blog 
MAGALEX

Comentarios

Entradas populares de este blog

Modificando Vista de Actualización SM30

User Exit para VA01 y VA02

Buttons and events in ALV GRID and ALV GRID OO