venerdì 21 ottobre 2016

Esempio di Enhancement

L'ambiente SAP è davvero molto flessibile poichè consente una personalizzazione molto spinta attraverso vari strumenti:
  • customizing
  • user-exit
  • BADIs (Business Add-Ins)
  • BTE (Business Transaction Events)
  • BDT (Business Data Tool-set)
  • enhancement point
Dalla ECC 6 SAP ha sviluppato gli enhancement point attraverso l'utilizzo di quelli che vengono chiamati "implicit enhancement". Con gli implicit enhancement possiamo scrivere il nostro codice in un blocco di codifica dentro un programma standard, un function module o un include. Il blocco di codice sarà incluso dentro una sezione Enhancement–Endenhancement.


Vediamo l'utilizzo di un Enhancement con un caso concreto.

La richiesta era la seguente: Alla creazione di un foglio di acquisizione prestazione (per chi non lo conosce è sostanzialmente la registrazione della entrata merce per un ordine di acquisto di tipo prestazioni) si vuole controllare che la data di registrazione sia all'interno della data di validità dell'ordine di acquisto. 

Transazione utilizzata: ML81N Acquisizione prestazione.

Prima ho provato a vedere se era possibile attivare un messaggio di errore, ma non ci sono riuscito.

Poi ho provato a cercare una user-exit al salvataggio, anche qui senza successo.

Quindi, tramite un breve debug, ho verificato che al salvataggio viene chiamata la FORM SAVE contenuta nell’include LMLSRF0F.

Con l'editor programmi SE38 su LMLSRF0F attivo la modalità "Ampliare"


e visualizzo gli ampliamenti impliciti:

mi posiziono nella FORM SAVE e vado a creare il mio ampliamento:

tipo di implementazione


assegno un nome allo sviluppo

questo il codice che vado a inserire

ENHANCEMENT 1  ZLMLSRF0F.    "active version
*&---------------------------------------------------------------------*
* Autore     : Fabio Giacobbe 
* Descrizione: Ampliamento su acquisizione prestazione ML81N
* Scopo      : verificare che la data di registrazione sia all'interno
*              della data di validità dell'ordine.
*&---------------------------------------------------------------------*
* solo su transazione ML81N

IF SY-TCODE 'ML81N'.
* non faccio controlli su prestazioni cancellate o già registrate
  
IF essr-LOEKZ <> 'X' and
     essr
-KZABN <> 'X'.
* solo per ordini di tipo prestazione
    
IF ekko-bsart 'ZPR'.
* verifico che la data di registrazione sia all'interno del periodo
* di validità

      
IF essr-budat > ekko-kdate OR    "Data fine
         essr
-budat < ekko-kdatb.      "Data inizio
         
MESSAGE e037(zsdWITH ekko-kdatb ekko-kdate.
      
ENDIF.
    
ENDIF.
  
ENDIF.
ENDIF.
ENDENHANCEMENT.

Questa la definizione del messaggio 037 della classe ZSD



Questo il messaggio di errore che si riceve se si tenta di salvare fuori data di validità:



L'ampliamento si può modificare tramite la transazione SE20


2 commenti: