Cerca nel blog

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.



lunedì 25 luglio 2022

Creazione View CDS semplice PARTE 2

 

Creazione View CDS semplice

Ogni volta che viene creata e attivata una vista CDS, questi 2 oggetti vengono generati. Come accennato nell'introduzione, ciò consente il cambio di paradigma Code-to-Data:

·       Vista SQL DDIC: è un oggetto Design Time e può essere visualizzato in tcode-SE11

·       Vista HANA: è un oggetto di runtime e viene creato in HANA DB.

Premessa: tutte le CDS che creeremo le salveremo con Oggetti locali.

Per prima cosa, Crea un progetto ABAP all'interno di Eclipse accedendo al sistema S4 HANA.

Fai clic con il pulsante destro del mouse sul tuo nome utente in Oggetti locali e scegli New->Other ABAP Repository Objects. -> Core Data Services->Data Definition.

Inseriamo un nome e descrizione per la view CDS, come in figura, e premere NEXT.


Nella schermata successiva mostra il template della CDS selezionato. Premere FINISH


Verrà creata una vista semplice. Tutte le righe che iniziano con "@" all'inizio della vista sono chiamate "ANNOTAZIONI" e svolgono un ruolo molto importante nella progettazione e nello sviluppo della vista CDS. Sono i "Mattoni" alla base della configurazione delle viste CDS. Definiscono inoltre come si comporterà la vista CDS in diversi scenari.


Ora parliamo delle annotazioni predefinite durante la creazione della vista di base.

·       @AbapCatalog.sqlViewName: ‘sql_view_name’.

All'interno della prima annotazione, fornire il nome della vista SQL. Questa è la vista SQL DDIC che viene generata una volta attivata la vista CDS e può essere vista in tcode SE11. Questo nome deve essere inferiore o uguale a 16 caratteri secondo le limitazioni del nome di visualizzazione DDIC SE11. Inoltre, il nome della vista CDS e il nome della vista SQL NON possono essere uguali. Quindi scegli un nome logico, probabilmente qualcosa di simile al nome della vista CDS per mantenerlo coerente.

·       @AbapCatalog.compiler.compareFilter: true:

Questa annotazione definisce il comportamento del filtraggio dei dati, ovvero questo prima confronta le condizioni del filtro e se corrispondono, vengono recuperati solo i dati. Se la vista CDS ha condizioni di unione, vengono eseguite solo dopo che le condizioni di filtro sono state soddisfatte. In DDIC visualizza i dati se prima recuperati e quindi filtrati.

·       @AbapCatalog.preserveKey: true

Un'altra importante annotazione delle viste CDS. Come sai, tutte le tabelle DB in SAP hanno le chiavi definite e le viste CDS vengono sempre create sopra quelle tabelle DB. Ora qualsiasi tabella DB può avere più chiavi definite e potresti non volere che quelle chiavi siano i campi chiave della tua vista. Quindi, se imposti questa annotazione su true, gli unici campi che definisci come campi chiave all'interno della tua vista CDS aggiungendo la parola "Chiave" davanti a quei campi saranno i campi chiave per la vista CDS e la vista SQL DDIC che viene generata.

Se lo imposti come "Falso", i campi chiave della tabella DB verranno definiti come campi chiave anche per le viste, indipendentemente dal fatto che tu aggiunga la parola "Chiave" davanti a un numero inferiore di campi.

·       @AccessControl.authorizationCheck: #NOT_REQUIRED

Questa annotazione viene utilizzata per aggiungere la parte "Sicurezza" alla vista CDS. Quando la vista CDS è pronta per essere distribuita a un pubblico più ampio all'interno o all'esterno dell'organizzazione, è molto importante limitare i dati in base all'autorità. Esamineremo la creazione di oggetti di autorizzazione nella parte successiva. Per ora teniamolo #NOT_REQUIRED

·       @EndUserText.label: ‘CDS View type #BASIC’

Questa annotazione viene utilizzata per applicare etichette aziendali diverse dalle etichette allegate nelle tabelle DB ai campi all'interno della vista CDS. Questa annotazione sovrascriverà l'etichetta aziendale della tabella DB e fornisce ciò che specifichi con questa annotazione.

Ritornando alla view che stiamo creando, dobbiamo specificare la tabella da cui vogliamo estrarre i dati, e i relativi campi che vogliamo estrarre. Consideriamo ad esempio la tabella MARA.

Aggiungiamo i campi alla vista CDS facendo clic CTRL+Space . Puoi scegliere di inserire tutti i campi o uno per uno.

Ho disabilitato il campo "Client" o "MANDT" perché questa vista CDS viene creata nel sistema ABAP e il client è gestito dal sistema stesso. Ora attiva la vista CDS.

Come accennato in precedenza, vengono creati altri 2 oggetti quando viene attivata la vista CDS? Viene creata una vista SQL DDIC e viene creata una vista HANA;


Controlla la vista HANA nella piattaforma Eclipse


Per riassumere, abbiamo creato una vista CDS di base e abbiamo esaminato le annotazioni predefinite che sono già configurate quando viene creata una vista CDS. Inoltre, abbiamo visto i diversi oggetti runtime e design time che vengono creati con l'attivazione della vista.






mercoledì 20 luglio 2022

ABAP: Nuove istruzioni in SAP release 7.5


Nuove istruzioni in SAP release 7.5

Le espressioni possono essere usate anche nel lato sinistro di confronti con WHERE, HAVING, ON e CASE e come operandi di un'espressione CAST. Si noti che ciò include le variabili host e le espressioni host come operandi di espressioni SQL.
Le seguenti funzioni SQL possono ora essere utilizzate nelle espressioni SQL: ROUND, CONCAT, LPAD, LENGTH, REPLACE, RIGHT, RTRIM, SUBSTRING. La funzione COALESCE ora può avere fino a 255 argomenti.

Come esempio di espressione aritmetica sul lato sinistro di una condizione WHERE, vedere:

SELECT carrid, connid, fldate, seatsmax, seatsocc,
       seatsmax – seatsocc AS seatsfree
  FROM sflight
 WHERE seatsmax – seatsocc > @( meth( ) )
 INTO TABLE @DATA(result).

Come esempio per le funzioni di stringa, vedere la seguente concatenazione di colonne in una colonna con CONCAT:

SELECT CONCAT( CONCAT( carrid,
                       LPAD( carrname,21,’ ‘ ) ),
               LPAD( url,40,’ ‘ ) ) AS line
  FROM scarr
 INTO TABLE @DATA(result).

Questa concatenazione non è possibile con l'operatore && disponibile da ABAP 7.40. 

SELECT CON DICHIARAZIONE INLINE DELLA TABELLA

DATA(lv_bukrs) = '1000'. 

SELECT mandt, bukrs, kostl
  FROM ztable
 INTO TABLE @DATA(lt_test)
 WHERE bukrs = @lv_bukrs.

 IF sy-subrc = 0.
    READ TABLE lt_test INTO DATA(ls_test) WITH KEY bukrs = lv_bukrs.
    IF sy-subrc = 0.
         WRITE: / ls_test-bukrs.
     ENDIF.
 ENDIF.

SELECT UNION

DATA prog_range TYPE RANGE OF trdir-name.


SELECT 'I' AS sign, 'EQ' AS option,

       obj_name AS low, ' ' AS high

  FROM tadir

 WHERE pgmid = 'R3TR' 

   AND object = 'PROG' 

   AND devclass = @devclass

UNION

SELECT 'I' AS sign, 'CP' AS option, 

       obj_name && '*' AS low, ' ' AS high

  FROM tadir

 WHERE pgmid = 'R3TR' 

   AND object = 'CLAS' 

   AND devclass = @devclass

UNION

SELECT 'I' AS sign, 'EQ' AS option, 

       'SAPL' && obj_name AS low, ' ' AS high

  FROM tadir

 WHERE pgmid = 'R3TR' 

   AND object = 'FUGR'

   AND devclass = @devclass

UNION

SELECT 'I' AS sign, 'CP' AS option, 

       'L' && obj_name && '+++' AS low, ' ' AS high

  FROM tadir

  WHERE pgmid = 'R3TR'

    AND object = 'FUGR'

AND devclass = @devclass

INTO TABLE @prog_range.


Lettura di una riga da una tabella interna in una Work Area

DATA(lv_bukrs) = '1000'. 

SELECT mandt, bukrs, kostl
  FROM ztable
 INTO TABLE @DATA(lt_test)
 WHERE bukrs = @lv_bukrs.

  IF sy-subrc 0.
    TRY.
        DATA(ls_testlt_test[ BUKRS lv_bukrs ].
        WRITE/ ls_test-bukrs.
      CATCH cx_sy_itab_line_not_found.
        MESSAGE e000(dbWITH 'Record non trovato'.
    ENDTRY.

  ENDIF.

 CONV operator

Il requisito nell'esempio è convertire il tipo di dati del valore all'interno della variabile 'Testo' che è di tipo 'C' nel tipo di dati 'String'.

DATA: text TYPE c LENGTH 255. 
DATA(xstr) = cl_abap_codepage=>convert_to( source = CONV #( text ) ).

Il requisito nell'esempio è convertire il risultato della divisione tra interi in un float. 

IF CONV decfloat34( 1 / 3 ) > 0 
    ....
ENDIF.

 SU DB HANA, è possibile fare la select su tabelle interne

select matnr into table @data(lt)
  from mara
  up to 10 rows.


select mara~matnrmara~mtart
  from @lt as zmara
  INNER JOIN mara
    on mara~matnr zmara~matnr
  into TABLE @data(lt_mara).

  cl_demo_output=>display_datalt_mara ).

 

SU DB HANA, è possibile fare un estrazione di dati facendo una ricerca su un campo indipendentemente da come è scritto in tabella

DATAlt_table TYPE STANDARD TABLE OF kna1-name1.
  DATA(lr_resultNEW cl_sql_statement)->execute_query(
   `SELECT NAME1 FROM KNA1 WHERE CONTAINS(NAME1, 'domestique')`).

  lr_result->set_param_table(
    EXPORTING
      itab_ref REF #lt_table[] )
  ).
  lr_result->next_packageupto 100 ).
  lr_result->close).

  cl_demo_output=>display_datalt_table ).


SU DB HANA,  LOOP...GROUP BY

SELECT INTO TABLE @DATA(lt_vbapFROM vbap
  
UP TO 100 ROWS
 
ORDER BY vbeln posnr.

LOOP AT lt_vbap INTO DATA(ls_vbapGROUP BY vbeln ls_vbap-vbeln )
            
ASSIGNING FIELD-SYMBOL(<group>).

*in questo primo loop ci entro tante volte quante sono le chiavi diverse

  LOOP AT GROUP <group> ASSIGNING FIELD-SYMBOL(<item>).
    lt_membri_del_gruppo 
VALUE #BASE lt_membri_del_gruppo <item> ) )..
  
ENDLOOP.


free lt_membri_del_gruppo.

ENDLOOP.