Customer-Exit (ABAP): Unterschied zwischen den Versionen

Aus MattWiki
Keine Bearbeitungszusammenfassung
K (Matt verschob die Seite Listing Customer-Exit (ABAP) nach Customer-Exit (ABAP))
(kein Unterschied)

Version vom 2. April 2018, 11:13 Uhr

Nachfolgend ein Listing eines Customer Exists, welcher für eine Query im SAP ABAP Backend erstellt wurde.

Hinweise:

  • 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.


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.