Ansicht
Dokumentation

ABAPSET_HANDLER - SET HANDLER

ABAPSET_HANDLER - SET HANDLER

RFUMSV00 - Advance Return for Tax on Sales/Purchases   BAL_S_LOG - Application Log: Log header data  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

SET HANDLER

Kurzreferenz



Behandler für Instanzereignisse registrieren

1. SET HANDLER handler1 handler2 ... FOR oref$|${ALL INSTANCES$}
                                    $[ACTIVATION act$].

Behandler für statische Ereignisse registrieren

2. SET HANDLER handler1 handler2 ... $[ACTIVATION act$].

Wirkung

Diese Anweisung registriert oder deregistriert die Ereignisbehandler handler für die zugehörigen Instanzereignisse bzw. statischen Ereignisse.

Systemfelder

sy-subrc Bedeutung
0 Alle angegebenen Behandler konnten registriert bzw. deregistriert werden.
4 Mindestens einer der angegebenen Behandler konnte nicht registriert werden, da er bereits für das gleiche Ereignis registriert ist.
8 Mindestens einer der angegebenen Behandler konnte nicht deregistriert werden, da er nicht für das betreffende Ereignis registriert wurde.

Hinweise

  • Die Anweisung SET HANDLER verwaltet für Einzelregistrierung, Massenregistrierung und Registrierung für statische Ereignisse intern verschiedene Systemtabellen, die Auslöser und Behandler von Ereignissen zueinander in Beziehung setzen. Jede Registrierung bedeutet eine Zeile in einer dem Auslöser zugeordneten Systemtabelle. Ein Behandler kann in einer Systemtabelle nur einmal, aber durchaus in mehreren Systemtabellen vorkommen, d.h. für verschiedene Ereignisse registriert sein. Das System wertet beim Auslösen eines Ereignisses mit RAISE EVENT die zugehörigen Systemtabellen aus und ruft die dort registrierten Ereignisbehandler auf.
  • Die Reihenfolge der Aufrufe registrierter Ereignisbehandler ist nicht definiert und kann sich während der Programmlaufzeit ändern. Um eine feste Reihenfolge verschiedener Methodenaufrufe zu erreichen, können diese in einem Ereignisbehandler aufgerufen werden.
  • Bei der Registrierung einer Instanzmethode wird eine Referenz auf das zugehörige Objekt in die jeweilige Tabelle aufgenommen und bei der Deregistrierung wieder gelöscht. Bezüglich des Garbage Collectors wirkt eine solche Referenz wie eine Referenz in einer Referenzvariablen, d.h., als Behandler registrierte Objekte werden nicht gelöscht, solange sie registriert, d.h., nicht mit Hilfe des Zusatzes ACTIVATION deregistriert sind. Wenn eine auslösende Instanz durch den Garbage Collector gelöscht wird, wird auch die zugehörige Systemtabelle gelöscht und dadurch werden deren Registrierungen aufgehoben.
  • Wenn die Anweisung SET HANDLER während einer Ereignisbehandlung den aktuellen Behandler nochmals für das gerade behandelte Ereignis registriert, ist nicht definiert, ob diese Registrierung noch in der aktuellen Ereignisbehandlung berücksichtigt wird. Dieser Fall kann somit zu einer endlosen Rekursion führen und sollte vermieden werden.

Beispiel

Registrierung von Ereignisbehandlern für zwei Instanzereignisse und ein statisches Ereignis. In der ersten Anweisung SET HANDLER werden ein statischer Ereignisbehandler h1 und eine Instanzmethode h2 für die Instanzereignisse e1 und e2 des Objekts, auf das die Referenzvariable trigger zeigt, registriert. In der zweiten Anweisung SET HANDLER wird eine Instanzmethode h3 für das statische Ereignis ce1 der Klasse c1 registriert.

CLASS c1 DEFINITION.
  PUBLIC SECTION.
    EVENTS e1.
    CLASS-EVENTS ce1.
ENDCLASS.

CLASS c2 DEFINITION INHERITING FROM c1.
  PUBLIC SECTION.
    EVENTS e2.
ENDCLASS.

CLASS c3 DEFINITION.
  PUBLIC SECTION.
    CLASS-METHODS  h1 FOR EVENT e1 OF c1.
          METHODS: h2 FOR EVENT e2 OF c2,
                   h3 FOR EVENT ce1 OF c1.
ENDCLASS.

...

DATA: trigger TYPE REF TO c2,
      handler TYPE REF TO c3.

SET HANDLER: c3=>h1 handler->h2 FOR trigger,
             handler->h3.


Ausnahmen

Unbehandelbare Ausnahmen

  • Ursache: Es können keine Behandler mehr registriert werden.
    Laufzeitfehler: SET_HANDLER_DISP_OVERFLOW
  • Ursache: Behandler von Instanzmethoden brauchen den FOR-Zusatz.
    Laufzeitfehler: SET_HANDLER_E_NO_FOR
  • Ursache: Ereignisbehandler wurde für ein statisches Ereignis registriert.
    Laufzeitfehler: SET_HANDLER_FOR_CE
  • Ursache: Der Auslöser eines Ereignisses darf nicht NULL sein.
    Laufzeitfehler: SET_HANDLER_FOR_NULL
  • Ursache: Der Behandler eines Ereignisses darf nicht NULL sein.
    Laufzeitfehler: SET_HANDLER_HOBJ_NULL






CPI1466 during Backup   TXBHW - Original Tax Base Amount in Local Currency  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 7337 Date: 20240523 Time: 121755     sap01-206 ( 101 ms )