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.




martedì 26 luglio 2022

CDS Views - @VDM Annotation - PARTE 11

 

CDS Views - @VDM Annotation


POST PRECEDENTE SULLE CDS VIEW

Prima di iniziare a sviluppare qualsiasi vista CDS, è estremamente importante comprenderne lo scopo. Perché viene creato? Chi e dove verrà utilizzata questa visualizzazione CDS: è per gli strumenti di Analytics? È per l'app FIORI? È solo per essere consumato da altre viste CDS? Una volta compresi tutti questi elementi, allora possiamo definire le annotazioni specifiche all'interno della vista. Dobbiamo applicare le annotazioni che hanno senso alla vista CDS. Sebbene l'aggiunta di annotazioni non richieste possa non influire su nulla, ma sicuramente creerebbe confusione quando altri sviluppatori o team di supporto del progetto si occuperanno di tali visualizzazioni.

In breve, il tipo di annotazioni di seguito viene utilizzato durante la configurazione delle viste CDS:

-@OData, @UI – Usato per le applicazioni FIORI.

-@Analytics: utilizzato per utilizzare la visualizzazione CDS in strumenti analitici come Bex, Lumira, Webi, Analysis for Office.

-@ObjectModel: utilizzato per applicazioni transazionali che utilizzano BOPF

-@Semantics – Usato per S4HANA Embedded Analytics

Puoi trovare informazioni dettagliate su tutti i tipi di annotazioni qui; https://help.sap.com/viewer/cc0c305d2fab47bd808adcad3ca7ee9d/7.5.9/en-US/630ce9b386b84e80bfade96779fbaeec.html

@VDM: Per standardizzare lo sviluppo tecnico della vista CDS, SAP ha elaborato le Best Practices con l'annotazione @VDM. Questo per standardizzare il processo di sviluppo. Guardando queste annotazioni, si può capire tutto sulla vista CDS. Questa annotazione NON ha assolutamente alcun impatto sul comportamento o sull'output della vista CDS, ma mostra solo le caratteristiche sottostanti; Che tipo di dati espone la vista CDS. Qual è la categoria della vista CDS. L'annotazione @VDM è ulteriormente suddivisa nel tipo di viste. Ci sono 4 tipi di viste CDS che possono essere sviluppate:

  • -BASIC

Queste view CDS  sono sviluppate per esporre i dati anagrafici come anagrafica cliente, master materiale, partner commerciale ecc. Consumano le tabelle SAP fisiche per leggere i dati. Sono anche denominate viste INTERFACCIA e per gli standard di denominazione SAP utilizza "I" tra il nome della vista: *_I_*

  • -COMPOSITE

Queste viste sono configurate come Associazione di set di dati master OPPURE Dati master e Dati transazionali. Possono utilizzare BASIC View o altre viste composite per leggere i dati. Per gli standard di denominazione, SAP utilizza "CO" tra il nome della vista: *_CO_*

  • -CONSUMPTION

Queste viste vengono create come ultimo livello del modello analitico CDS. Queste sono le viste finali pronte per essere utilizzate dagli strumenti dell'interfaccia utente: Bex, Lumira, Webi, Analysis for Office ecc. a cui gli utenti business possono accedere da un report. Queste viste possono utilizzare tutte le altre Basic or Composite Views per leggere i dati e creare un set di dati finale da inserire negli strumenti dell'interfaccia utente per i report in base ai requisiti aziendali. Per gli standard di denominazione, SAP inizia il nome della vista con 'C': C_*

  • -PRIVATE

Queste viste sono private per SAP e non devono essere utilizzate o create da soggetti diversi da SAP. SAP può modificare la loro configurazione senza alcun preavviso ai clienti. Per gli standard di denominazione, SAP avvia il nome della vista con 'P': P_*

Con l'annotazione @VDM, se applichi tutte le procedure standard nella creazione della vista CDS, sarà abbastanza facile per gli altri sviluppatori che vedranno il tuo codice capire la natura e lo scopo della vista CDS che hai creato. Questa è una delle annotazioni molto importanti per il controllo di qualità e deve essere forzata in un'organizzazione per ottenere le migliori pratiche/standard di sviluppo.

1.     Creiamo una nuova vista con il modello ASSOCIATION.

2.     Aggiungi le annotazioni VDM e Analytics.


@VDM:{viewType: #BASIC} : Questa annotazione definisce il tipo di vista CDS. Come accennato in precedenza, le viste di tipo BASIC sono utilizzate principalmente per i dati anagrafici e denota che si tratta di una vista CDS dell'interfaccia BASIC.

@Analytics:{dataExtraction:{enabled: true}, dataCategory: #DIMENSION}: Questa annotazione definisce se questa vista CDS è utilizzabile dalle applicazioni analitiche. Per BW, possiamo creare un'origine dati personalizzata da una vista CDS usando questa annotazione. Queste annotazioni indicano che possiamo estrarre i dati dal sistema ECC in BW, ad esempio, e la categoria di dati "DIMENSION" definisce che si tratta di dati dimensionali che potrebbero essere un set di dati master e in seguito possono essere combinati con la tabella dei fatti o CDS view type #CUBE.