Customer-Exit (ABAP): Unterschied zwischen den Versionen
Aus Matts Wiki
| Matt (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung | Matt (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung | ||
| (3 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
| Nachfolgend ein Listing eines Customer Exists, welcher für eine Query im SAP ABAP Backend erstellt wurde. | Nachfolgend ein Listing eines Customer Exists, welcher für eine Query im SAP ABAP Backend erstellt wurde. | ||
| == Allgemeines == | |||
| * Customer-Exits werden in der Systemtabelle RSZGLOBV gespeichert (Siehe auch [[Tabellen (SAP BW)]]) | |||
| * Der Name der Variable wird in Spalte VNAM gespeichert | |||
| * Für Customer Exits für DTP-Filter und Berechtigungsvariablen muss der Code in I_STEP = 0 implementiert werden | |||
| Anders gesagt: Wenn es kein Variablenbild gibt, werden die anderen I_STEPs nicht durchlaufen | |||
| * Für Customer-Exits in DTP-Variablenauswahl muss der Typ Einzelwert sein und der Eingabetyp "Obligatorisch mit Initial" | |||
| == Parameter von Customer Exits ==  | |||
| * I_VNAM enthält bei I_STEP 1 und I_STEP 2 den Namen der Customer Exit Variable | * I_VNAM enthält bei I_STEP 1 und I_STEP 2 den Namen der Customer Exit Variable | ||
| * Wenn der Durchlauf mit I_STEP = 3 läuft, ist I_VNAM leer | * Wenn der Durchlauf mit I_STEP = 3 läuft, ist I_VNAM leer | ||
| Zeile 8: | Zeile 17: | ||
| * i_t_var_range enthält alle Input-Werte aus allen Variablen. Zum Feststellen des Werts einer bestimmten Variable muss man im vnam-Feld der Tabelle nach dem gewünschten Variablennamen suchen. | * i_t_var_range enthält alle Input-Werte aus allen Variablen. Zum Feststellen des Werts einer bestimmten Variable muss man im vnam-Feld der Tabelle nach dem gewünschten Variablennamen suchen. | ||
| == Anlegen == | |||
| # BW Modeling Tools öffnen | |||
| # Zu Merkmal navigieren / Merkmal suchen  | |||
| # Rechtsklick auf Merkmal  | |||
| # Variable erstellen | |||
| # Code erstellen | |||
| Die Variablen werden im Repository entweder in der InfoArea des Merkmals selbst oder im Abschnitt NODESNOTCONNECTED abgelegt. | |||
| == Listing == | |||
| <syntaxhighlight lang="abap"> | <syntaxhighlight lang="abap"> | ||
| Zeile 71: | Zeile 92: | ||
| </syntaxhighlight> | </syntaxhighlight> | ||
| [[ | [[Category:ABAP]] | ||
Aktuelle Version vom 17. Juni 2019, 13:03 Uhr
Nachfolgend ein Listing eines Customer Exists, welcher für eine Query im SAP ABAP Backend erstellt wurde.
Allgemeines
- Customer-Exits werden in der Systemtabelle RSZGLOBV gespeichert (Siehe auch Tabellen (SAP BW))
- Der Name der Variable wird in Spalte VNAM gespeichert
- Für Customer Exits für DTP-Filter und Berechtigungsvariablen muss der Code in I_STEP = 0 implementiert werden
Anders gesagt: Wenn es kein Variablenbild gibt, werden die anderen I_STEPs nicht durchlaufen
- Für Customer-Exits in DTP-Variablenauswahl muss der Typ Einzelwert sein und der Eingabetyp "Obligatorisch mit Initial"
Parameter von Customer Exits
- I_VNAM enthält bei I_STEP 1 und I_STEP 2 den Namen der Customer Exit Variable
- Wenn der Durchlauf mit I_STEP = 3 läuft, ist I_VNAM leer
- Für RAISE EXCEPTION muss eine Exception im Ausnahmen-Register des Funktionsbausteins definiert werden
- e_t_range enthält die Rückgabewerte des Customer Exists in Form einer RRRANGE-Tabelle.
- i_t_var_range enthält alle Input-Werte aus allen Variablen. Zum Feststellen des Werts einer bestimmten Variable muss man im vnam-Feld der Tabelle nach dem gewünschten Variablennamen suchen.
Anlegen
- BW Modeling Tools öffnen
- Zu Merkmal navigieren / Merkmal suchen
- Rechtsklick auf Merkmal
- Variable erstellen
- Code erstellen
Die Variablen werden im Repository entweder in der InfoArea des Merkmals selbst oder im Abschnitt NODESNOTCONNECTED abgelegt.
Listing
FUNCTION zqry_custex05.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*"  IMPORTING
*"     REFERENCE(I_VNAM) TYPE  RSZGLOBV-VNAM
*"     REFERENCE(I_VARTYP) TYPE  RSZGLOBV-VARTYP
*"     REFERENCE(I_IOBJNM) TYPE  RSZGLOBV-IOBJNM
*"     REFERENCE(I_S_COB_PRO) TYPE  RSD_S_COB_PRO
*"     REFERENCE(I_S_RKB1D) TYPE  RSR_S_RKB1D
*"     REFERENCE(I_PERIV) TYPE  RRO01_S_RKB1F-PERIV
*"     REFERENCE(I_T_VAR_RANGE) TYPE  RRS0_T_VAR_RANGE
*"     REFERENCE(I_STEP) TYPE  I
*"  EXPORTING
*"     REFERENCE(E_T_RANGE) TYPE  RSR_T_RANGESID
*"     REFERENCE(E_CHECK_AGAIN) TYPE  RS_BOOL
*"----------------------------------------------------------------------
  DATA: ls_range TYPE rsr_s_rangesid,
        loc_var_range TYPE rrrangeexit.
  CASE i_vnam.
    " Default value for CalDay/Year
    WHEN 'VAR_CALDAY_DEF'.
      IF i_step = 1.
        ls_range-low = sy-datum.
        ls_range-sign = 'I'.
        ls_range-opt = 'EQ'.
        APPEND ls_range TO e_t_range.
      ENDIF.
    " Calculate year out of CALDAY
    " Implemented in i_step = 2 in order to do it after user has entered a CALDAY
    WHEN 'VAR_FISCYEAR'.
      IF i_step = 2.
        READ TABLE i_t_var_range INTO loc_var_range WITH KEY vnam = 'VAL_CALDAY_DEF'.
        ls_range-low = loc_var_range-low(4).
        ls_range-sign = 'I'.
        ls_range-opt = 'EQ'.
        APPEND ls_range TO e_t_range.
      ENDIF.
  ENDCASE.
  " After all inputs are done and all customer exists have been processed
  IF i_step = 3.
    READ TABLE i_t_var_range INTO loc_var_range WITH KEY vnam = 'VAR_PLANT'.
    IF sy-subrc = 0.
      IF loc_var_range-low = 'ITALIEN'.
        RAISE EXCEPTION.
      ENDIF.
    ENDIF.
  ENDIF.
ENDFUNCTION.
