Tengo una tabla ZTABLA a la que le he creado una vista de actualización para la SM30. Y quiero controlar quien y cuando hace cambios en los campos ERDAT, ERZET, ERNAM, AEDAT, AEZET, AENAM.
El código de help.sap no acaba de funcionar tal cual.
Solución: Primero bloqueo en la dynpro de la actualización estas columnas para que sólo sean de salida y añado el evento 01 (Antes de grabar los datos en la base de datos) con la siguiente subrutina:
*&---------------------------------------------------------------------*
*& FORM ZEVENTO01
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM ZEVENTO01.
CONSTANTS: LC_ACTION TYPE FIELDNAME VALUE 'ACTION'.
DATA: BEGIN OF ZTABLA_EXTRACT OCCURS 0010.
INCLUDE STRUCTURE ZTABLA_COSTES.
INCLUDE STRUCTURE VIMFLAGTAB.
DATA: END OF ZTABLA_EXTRACT.
DATA LS_DATA_TOTAL LIKE ZTABLA_EXTRACT.
DATA LS_DATA_EXTRACT LIKE ZTABLA_EXTRACT.
DATA LV_ACTION_TOTAL TYPE COMT_BOOLEAN.
DATA LS_TABIX TYPE SY-TABIX.
FIELD-SYMBOLS: <LV_ACTION_TOTAL> TYPE CHAR1,
<LS_DATA_TOTAL> TYPE ANY,
<LS_DATA_EXTRACT> TYPE ANY.
LOOP AT TOTAL.
*
ASSIGN TOTAL TO <LS_DATA_TOTAL> CASTING LIKE ZTABLA.
LS_DATA_TOTAL = <LS_DATA_TOTAL>.
ASSIGN COMPONENT LC_ACTION OF STRUCTURE TOTAL TO <LV_ACTION_TOTAL>.
*
IF SY-SUBRC NE 0.
LV_ACTION_TOTAL = <ACTION>.
ASSIGN LV_ACTION_TOTAL TO <LV_ACTION_TOTAL>.
ENDIF.
*
LV_ACTION_TOTAL = <LV_ACTION_TOTAL>.
CHECK LV_ACTION_TOTAL IS NOT INITIAL.
*
READ TABLE EXTRACT WITH KEY <VIM_XTOTAL_KEY>.
*
IF SY-SUBRC EQ 0.
LS_TABIX = SY-TABIX.
ELSE.
CLEAR LS_TABIX.
ENDIF.
*
IF LS_DATA_TOTAL-PEINH IS INITIAL.
LS_DATA_TOTAL-PEINH = 1.
ENDIF.
*
IF LV_ACTION_TOTAL EQ 'N'." New Entry.
LS_DATA_TOTAL-ERDAT = SY-DATUM.
LS_DATA_TOTAL-ERZET = SY-UZEIT.
LS_DATA_TOTAL-ERNAM = SY-UNAME.
ENDIF.
*
IF LV_ACTION_TOTAL EQ 'U'."Update
LS_DATA_TOTAL-AEDAT = SY-DATUM.
LS_DATA_TOTAL-AEZET = SY-UZEIT.
LS_DATA_TOTAL-AENAM = SY-UNAME.
ENDIF.
<LS_DATA_TOTAL> = LS_DATA_TOTAL.
*
MODIFY TOTAL.
CHECK LS_TABIX GT 0.
EXTRACT = TOTAL.
MODIFY EXTRACT INDEX LS_TABIX.
*
ENDLOOP.
*
SY-SUBRC = 0.
ENDFORM. "FORM ZEVENTO01
Nota: podemos buscar otras vistas de actualización con eventos en TVIMF para ver como lo hace.
Otras referencias:
http://scn.sap.com/docs/DOC-10318
http://help.sap.com/saphelp_nw04s/helpdata/en/a7/5133ac407a11d1893b0000e8323c4f/frameset.htm
Otras referencias:
http://scn.sap.com/docs/DOC-10318
http://help.sap.com/saphelp_nw04s/helpdata/en/a7/5133ac407a11d1893b0000e8323c4f/frameset.htm