Cerca nel blog

martedì 2 agosto 2022

Attivazione della registrazione modifiche dati per le tabelle VBEP e VBLB

 

Attivazione della registrazione modifiche dati per le tabelle VBEP e VBLB

In alcune transazioni come la VA31 o la VA32, o mediante Idoc, per le tabelle VBEP e VBLB, le modifiche di tali tabelle non sono presenti nelle tabelle CHDR e CDPOS. Mentre per la transazione VA02 tali modifiche vengono riportate nelle tabelle CHDR e CDPOS perchè è attivato il seguente customing.per il Sap Change Document Object VERKBELEG

Transazione SCDO, inserire l'oggetto VERKBELEG premere visualizza, e come si può vedere le 2 tabelle sono state già abilitate al LOG


Per attivare queste registrazioni, ho usato il FM VERKBELEG_WRITE_DOCUMENT ho effettuato le seguenti modifiche:

1. Nella User exit MV45AFZZ (userexit_save_document_prepare), ho inserito il seguente codice:

  DATAlv_uname TYPE uname,

        lv_tcode TYPE tcode.

* Questo metodo mi consente di ricavare l'utenza e la transazione richiamata

      CALL METHOD cl_change_document_util=>get_external_call_data
        IMPORTING
          ev_uname lv_uname
          ev_tcode lv_tcode.

*  Questo FM custom che ho creato mi gestisce la registrazione dei log, e gli passo tra gli altri i seguenti parametri XVBEP, contiene i valori nuovi modificati per la tabella VBEP, YVBEP contiene i valori vecchi della tabella VBEP, XVBLB, contiene i valori nuovi modificati per la tabella VBLB, YVBLB contiene i valori vecchi della tabella VBLB
      CALL FUNCTION 'ZSD_LOG_RECORDING'
        EXPORTING
          i_uname lv_uname
          i_tcode lv_tcode
          i_vbak  vbak
          i_xvbep xvbep[]
          i_yvbep yvbep[]
          i_xvblb xvblb[]
          i_yvblb yvblb[].

2. Creato il seguente FM ZSD_LOG_RECORDING:

FUNCTION zsd_log_recording.
*"----------------------------------------------------------------------
*"*"Interfaccia locale:
*"  IMPORTING
*"     VALUE(I_UNAME) TYPE  UNAME
*"     VALUE(I_TCODE) TYPE  TCODE
*"     VALUE(I_VBAK) TYPE  VBAK
*"     VALUE(I_XVBEP) TYPE  ZTT_XVBEP OPTIONAL
*"     VALUE(I_YVBEP) TYPE  ZTT_XVBEP OPTIONAL
*"     VALUE(I_XVBLB) TYPE  ZTT_XVBLB OPTIONAL
*"     VALUE(I_YVBLB) TYPE  ZTT_XVBLB OPTIONAL
*"  EXCEPTIONS
*"      NUM_SCHED_NO_CHANGE
*"----------------------------------------------------------------------

  DATAlv_labnk_old TYPE labnk,
        lv_labnk_new TYPE labnk,
        lv_ebalora   TYPE boolean.

  CLEARlwa_n_vbaklwa_o_yvbakcdtxtlv_labnk_oldlv_labnk_new.

  lv_ebalora abap_true.

  FREElt_xvbep[]lt_yvbep[]lt_xvblb[]lt_yvblb[].
  lv_objectid i_vbak-vbeln.

  MOVE-CORRESPONDING i_vbak TO lwa_n_vbak.
  MOVE-CORRESPONDING i_vbak TO lwa_o_yvbak .

  IF sy-calld 'X' AND sy-binpt 'X'.
* Sto elaborando l'IDOC
    LOOP AT i_xvblb ASSIGNING FIELD-SYMBOL(<x_xvblb>)
     WHERE vbeln i_vbak-vbeln
       AND updkz  'U'.

      APPEND <x_xvblb> TO lt_xvblb[].
    ENDLOOP.
    lt_yvblb[] i_yvblb[].


    LOOP AT i_yvblb ASSIGNING FIELD-SYMBOL(<lfs_vblb>)
      WHERE updkz 'I'.
      APPEND <lfs_vblb> TO lt_xvblb[].
    ENDLOOP.

    READ TABLE i_yvblb  ASSIGNING FIELD-SYMBOL(<x_yvblb>INDEX 1.
    IF sy-subrc AND <x_yvblb> IS ASSIGNED.
      lv_labnk_old <x_yvblb>-labnk.

      UNASSIGN <x_xvblb>.
      READ TABLE i_xvblb  ASSIGNING <x_xvblb>
        WITH KEY vbeln <x_yvblb>-vbeln
                 posnr <x_yvblb>-posnr
                 abrli <x_yvblb>-abrli
                 abart <x_yvblb>-abart.

      IF sy-subrc AND <x_xvblb> IS ASSIGNED.
        lv_labnk_new <x_xvblb>-labnk.
      ENDIF.
    ENDIF.

    IF lv_labnk_new lv_labnk_old.
      lv_ebalora abap_false.
    ENDIF.

  ELSE.
* Sto elaborando la transazione
    LOOP AT i_yvbep ASSIGNING FIELD-SYMBOL(<y_vbep>.

      READ TABLE i_xvbep ASSIGNING FIELD-SYMBOL(<x_vbep>)
        WITH KEY vbeln <y_vbep>-vbeln
                 posnr <y_vbep>-posnr
                 etenr <y_vbep>-etenr
                 ettyp <y_vbep>-ettyp
                 lfrel <y_vbep>-lfrel.

      IF sy-subrc AND <x_vbep> IS ASSIGNED.
        APPEND <x_vbep> TO lt_xvbep[].
        APPEND <y_vbep> TO lt_yvbep[].
      ENDIF.
    ENDLOOP.

    LOOP AT i_xvbep ASSIGNING FIELD-SYMBOL(<lfs_vbep>)
      WHERE updkz 'I'.
      APPEND <lfs_vbep> TO lt_xvbep[].
    ENDLOOP.

  ENDIF.

  IF   lv_ebalora abap_true.
    CALL FUNCTION 'VERKBELEG_WRITE_DOCUMENT' IN UPDATE TASK
      EXPORTING
        objectid                lv_objectid
        tcode                   i_tcode
        utime                   sy-uzeit
        udate                   sy-datum
        username                i_uname
        object_change_indicator 'U'
        n_vbak                  lwa_n_vbak
        o_yvbak                 lwa_o_yvbak
        upd_vbak                'X'
        upd_vbep                'U'
        upd_vblb                'U'
      TABLES
        icdtxt_verkbeleg        cdtxt
        xvbep                   lt_xvbep[]
        yvbep                   lt_yvbep[]
        xvblb                   lt_xvblb[]
        yvblb                   lt_yvblb[].

  ENDIF.
ENDFUNCTION.




Nessun commento:

Posta un commento