Cómo utilizar los Documentos de Modificación para registrar cambios a tablas de la base de datos de SAP
Conozca cómo generar un historial permanente de los cambios realizados en tablas de SAP, y también de clientes (tablas Z), mediante el uso de la herramienta "Documentos de Modificación".
Cuando se ejecuta una transacción en SAP, ocurren múltiples actualizaciones en la base de datos.
SAP admite registrar de manera permanente los cambios realizados en datos de documentos o en datos maestros - permitiendo así mantener un historial de cambios. Una forma de lograrlo es utilizando las opciones técnicas en una tabla transparente "Grabar en log modificaciones de datos" (que será tratada en otro tip) y otra es mediante las tablas de “Documentos de modificación” CDHDR y CDPOS, que llevarán el registro de las modificaciones producidas.
Es posible también, utilizando esta misma técnica, guardar los cambios que se realizan sobre tablas Z.
En el presente TIP se detallarán los pasos requeridos para generar las entradas en las tablas CDHDR y CDPOS mencionadas anteriormente, utilizando una tabla Z. Para ello, el tutorial incluirá lo siguiente:
a) Creación de una tabla Z con datos
b) Creación de un “Documento de modificación”
c) Creación de un Reporte que será el encargado final de la generación de los registros en las tablas CDHDR y CHPOS.
a) Creación de una tabla Z con datos
Acceder a la transacción SE11 para la creación de una tabla Z, en nuestro caso ZTABLA, e insertar los registros que se deseen, ya sea mediante una vista de mantenimiento a la tabla Z o por un programa que mantenga los datos de la tabla.
b) Creación de un objeto de “Documento de modificación” simple (ZNUEVO), que comprende el historial de cambios de la tabla Z creada anteriormente (ZTABLA).
1) Ir a la Transacción SCDO, que permitirá crear un “objeto de documento de modificación”, también llamado clase de objeto.
Para que los cambios de datos puedan ser registrados en las tablas de documentos de modificación, deberían incluirse todas las tablas deseadas en una clase de objeto. En este caso sólo se hará sobre el objeto ZTABLA, como se muestra en la figura siguiente:
Presionar el botón Create.
Crear el nombre del nuevo objeto de modificación que debe cumplir con las reglas de convención de nomenclatura de objetos de cliente. Es muy probable, que aparezcan mensajes como el siguiente: “Change document object ZNUEVO is not in your namespace, do you still want to create the object?” Pulsar simplemente el botón [Yes].
El nombre ZNUEVO de objeto creado también es llamado clase de objeto.
2) En la pantalla siguiente, incorporar los nombres de la o las tablas sobre las cuales se necesita mantener el control de historial de cambios. Para nuestro ejemplo, añadir sólo el objeto ZTABLA.
Al presionar el botón Insert Entries, aparecerá la siguiente pantalla, donde será necesario elegir el botón Salvar.
3) Posteriormente, es necesario generar el programa de actualización. Para ello acceder a Menú → Utilities(M) → Generate update pgm.
NOTA: Nuevamente, aquí también es probable que aparezca el mensaje de “warning”: “Change document object ZNUEVO is not in your namespace; do you still want to generate the object?” En ese caso, pulsar el botón [Yes].
4) Completar los datos de detalle de la creación del objeto como se muestra en la siguiente imagen, y presionar el botón Generate.
NOTA: En este ejemplo, donde el grupo de función ZFG_NUEVO no existe, se mostrará un mensaje de información notificando que dicho grupo de función será creado en este proceso de generación. En dicho caso, pulsar [Yes].
5) Al presionar el botón Generate, se obtendrá la siguiente salida, donde se puede observar que lo generado por Generate update pgm., incluyen en los parámetros de entrada (Input Parameter), los valores especificados en la pantalla de arriba (ZNUEVO, ZFG_NUEVO) y los datos de la función generada (ZNUEVO_WRITE_DOCUMENT), encargada de generar posteriormente los registros de entrada en las tablas CDHDR y CDPOS.
6) Desde esa pantalla, al presionar el botón Salvar comienza la generación de todos los elementos necesarios, donde aparecerá una pantalla similar a la mostrada arriba indicando el estado de los objetos como “Created” y el mensaje: “All generations made for object ZNUEVO.”
Consideraciones:
Sólo aquellos campos de la tabla indicada que tengan asociados elementos de datos con la propiedad “Doc.modificación” ó “Change document” (ubicada en la solapa Further Characteristics) y tengan esta opción seteada, serán auditados por este procedimiento. Esto quiere decir que hay algunos objetos que nunca podrán ser controlados porque no incluyen esa opción. La pantalla siguiente muestra un ejemplo de un elemento de datos en donde sí está habilitada la opción (Checkbox “Change Document”).
Los pasos anteriores completaron la creación del Objeto de modificación ZNUEVO.
Al crear el objeto de modificación ZNUEVO, se crea además una función, ZNUEVO_WRITE_DOCUMENT, encargada de la generación de las entradas de registro en las tablas CDHDR y CDPOS.
En el último paso del tutorial (c) se crea un programa que invoca a la función ZNUEVO_WRITE_DOCUMENT, que alimentará las tablas CDHDR y CDPOS asociados a los cambios del campo maktx (descripción del material) de la tabla ZTABLA.
c) Creación de un programa para utilizar el objeto de documento de modificación ZNUEVO
Algunas consideraciones previas al llamado de la función (que se visualiza en el código de la función)::
• Guardar los valores del registro antes de realizar algún cambio en wa_znuevo_old
• Inicializar la workarea que guardará el nuevo cambio.
• Realizar el cambio que se desea registrar y guardarlo
• Actualizar el registro en la tabla de la base de datos.
Si no hubo error al realizar el update, continuar.
• Completar la clave que se utilizará en las tablas CDHDR/CDPOS. Generalmente coinciden con la clave de la tabla Z.
• Llamar a la nueva función creada.
Código del programa
REPORT zr_actualizar_ztabla.
TYPES: BEGIN OF ty_s_tabla,
mandt TYPE mandt,
matnr TYPE matnr,
laeda TYPE laeda,
maktx TYPE maktx,
END OF ty_s_tabla.
DATA: lv_clave TYPE cdhdr-objectid,
lv_material TYPE matnr VALUE '000000000000000001',
lv_descp_corta TYPE maktx VALUE 'Botella 1000 cm3',
wa_znuevo_old TYPE ty_s_tabla,
wa_znuevo_new TYPE ty_s_tabla,
ti_cdtxt TYPE STANDARD TABLE OF cdtxt.
START-OF-SELECTION.
SELECT SINGLE mandt matnr laeda maktx
FROM ztabla
INTO wa_znuevo_old
WHERE matnr = lv_material.
IF sy-subrc EQ 0.
"Se realiza una modificación a la tabla Z creada
wa_znuevo_new = wa_znuevo_old.
wa_znuevo_new-maktx = lv_descp_corta.
UPDATE ztabla FROM wa_znuevo_new.
COMMIT WORK AND WAIT.
IF sy-subrc EQ 0.
"Asignación del valor del campo clave de la tabla ZTABLA, con el que se accederá a las tablas CDHDR y CDPOS para ver el historial.
lv_clave = wa_znuevo_new-matnr.
CALL FUNCTION 'ZNUEVO_WRITE_DOCUMENT'
EXPORTING
objectid = lv_clave
tcode = syst-tcode
utime = syst-uzeit
udate = syst-datum
username = syst-uname
n_ztabla = wa_znuevo_new
o_ztabla = wa_znuevo_old
upd_ztabla = 'U'
TABLES
icdtxt_znuevo = ti_cdtxt.
ENDIF.
ENDIF.
La función ZNUEVO_WRITE_DOCUMENT alimentará las tablas CDHDR/CDPOS de la siguiente forma:
Contenido de la Tabla CDHDR
Donde:
Contenido de la Tabla CDPOS
Donde:
Además de la función presentada más arriba, se mencionan algunas funciones adicionales que acceden al contenido de estas tablas:
- CHANGEDOCUMENT_READ_HEADERS
- CHANGEDOCUMENT_READ_POSITIONS
- CHANGEDOCUMENT_READ
- CHANGEDOCU_CDPOS_READ
Para tener en cuenta ....
El método explicado en este tip, realiza un registro permanente de los cambios sobre las tablas seleccionadas.
Relacionado a herramientas de SAP que permiten registrar cambios, se sugiere la lectura de un tip anterior publicado en teknodatips, "Application Logging" en ABAP: Cómo mejorar su código implementando registro de mensajes, pero este método realiza un cambio temporario.
Especialista Workflow - ABAP |
Especialista ABAP |
Copyright 2014 - Teknoda S.A.
IMPORTANTE: “Notas técnicas de SAP ABAP" se envía con frecuencia variable y sin cargo como servicio a nuestros clientes SAP. Contiene notas/tutoriales/artículos técnicos desarrollados en forma totalmente objetiva e independiente. Teknoda es una organización de servicios de tecnología informática y NO comercializa hardware, software ni otros productos. |