Customer-Exit (ABAP)

Aus MattWiki
Version vom 17. Juni 2019, 12:03 Uhr von Matt (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

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

  1. BW Modeling Tools öffnen
  2. Zu Merkmal navigieren / Merkmal suchen
  3. Rechtsklick auf Merkmal
  4. Variable erstellen
  5. 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.