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(zsd) WITH ekko-kdatb ekko-kdate.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDENHANCEMENT.
*&---------------------------------------------------------------------*
* 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(zsd) WITH 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à:
good
RispondiEliminagood.
RispondiElimina