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
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.
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.
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.
Nos vemos en el siguiente Blog
MAGALEX
MAGALEX
Comentarios
Publicar un comentario