Ansicht
Dokumentation

CL_HRPCLX_BUFFER - Stapel von Pufferschichten von PCLx-Tabellen

CL_HRPCLX_BUFFER - Stapel von Pufferschichten von PCLx-Tabellen

BAL Application Log Documentation   ABAP Short Reference  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

Funktionalität

Die Klasse CL_HRPCLX_BUFFER ist der zentrale Puffer für Einträge in PCLx-Clustertabellen PCL1, PCL2, PCL3, PCL4 und PCL5.

Bei Neuentwicklungen dürfen ausschließlich die Methode GET_INSTANCE sowie die Methoden des Interfaces IF_HRPCLX_BUFFER verwendet werden. Alle anderen Methoden (der Konstruktor sowie jene aus Interface IF_HRPCLX_BUFFER_LEGACY) existieren lediglich aus Kompatibilitätsgründen dürfen darüber hinaus NICHT verwendet werden!

Im Folgenden werden die einzelnen Interface-Methoden aus IF_HRPCLX_BUFFER näher erläutert.

Operationen für PCLx-Sätze

  • IMPORT_RECORD: Liefert den zum übergebenen Schlüssel aktuell gültigen PCLx-Satz (ggf. aus mehreren PCLx-Zeilen bestehend) aus dem Puffer. Falls der Satz noch nicht im Puffer liegt, wird er von der Datenbank gelesen und gepuffert.
  • EXPORT_RECORD: Speichert den übergebenen PCLx-Satz als den zu dem entsprechenden Schlüssel aktuell gültigen im Puffer.
  • DELETE_RECORD: Falls es zum übergebenem Schlüssel einen Eintrag auf der Datenbank gibt wird dieser PCLx-Satz zum Löschen vorgemerkt.

Pufferoperationen

  • FLUSH: Speichert die zuvor mittels Methoden EXPORT_RECORD und DELETE_RECORD gemachten Änderungen auf der Datenbank.
  • CLEAR: Initialisiert den Puffer und verwirft damit sämtliche seit dem letzen FLUSH gemachten Operationen für PCLx-Sätze.
  • FILL_FROM_DB: Füllt den Puffer mit einer Vielzahl an PCLx-Sätzen, wobei nur ein einziger Datenbankzugriff gemacht wird.
  • FILL_FROM_TABLE: Füllt den Puffer mit externen Daten. Beispielsweise können so archivierte Daten an den Puffer übergeben werden. Sämtliche Operationen für PCLx-Sätze die mit dieser Methode gepuffert wurden können durchgeführt werden. Allerdings werden diese Änderungen nicht auf der Datenbank gespeichert und es kommt zu einem Laufzeitfehler beim Ausführen der Methode FLUSH.

Versuche

  • START_TRIAL: Operationen für PCLx-Sätze werden nach Aufruf dieser Methode versuchsweise ausgeführt. D.h. ein nach START_TRIAL exportierter PCLx-Satz ist so lange der aktuell gültige, bis er entweder erneut mit EXPORT_RECORD oder DELETE_RECORD geändert wird, oder die Methode DISCARD_TRIAL aufgerufen wird.
  • DISCARD_TRIAL: Die seit dem letzen Aufruf von START_TRIAL gemachten Operationen für PCLx-Sätze werden verworfen. Die vor dem Aufruf von START_TRIAL aktuell gewesenen Sätze sind dann wieder die aktuellen.
  • APPROVE_TRIAL: Die seit dem letzen Aufruf von START_TRIAL gemachten Operationen für PCLx-Sätze werden übernommen und bleiben die aktuell gültigen.

Es kann ein Versuch innerhalb eines Versuchs gestartet werden. Damit ist eine ganze Kette von Versuchen möglich. Die Methode FLUSH speichert allerdings nur dann Daten auf der Datenbank, wenn zuvor sämtliche Versuche verworfen oder bestätigt wurden.

Beziehungen

Die Klasse CL_HRPCLX_BUFFER erzeugt und verwaltet Pufferschichten (Klasse CL_HRPCLX_BUFFER_LAYER und deren Unterklassen CL_HRPCLX_DB_BUFFER und CL_HRPCLX_TRIAL_BUFFER). Solche Pufferschichten können ausschließlich über die Klasse CL_HRPCLX_BUFFER erzeugt werden.

Beispiel

  • Lesen eines PCLx-Satzes
DATA: lo_pclx_buffer TYPE REF TO if_hrpclx_buffer.
lo_pclx_buffer = cl_hrpclx_buffer=>get_instance( ).
lo_pclx_buffer->import_record( … ).
  • Speichern eines PCLx-Satzes
DATA: lo_pclx_buffer TYPE REF TO if_hrpclx_buffer.
lo_pclx_buffer = cl_hrpclx_buffer=>get_instance( ).
lo_pclx_buffer->export_record( … ).
lo_pclx_buffer->flush( ).
  • Löschen eines PCLx-Satzes
DATA: lo_pclx_buffer TYPE REF TO if_hrpclx_buffer.
lo_pclx_buffer = cl_hrpclx_buffer=>get_instance( ).
lo_pclx_buffer->delete_record( … ).
lo_pclx_buffer->flush( ).
  • Versuch starten und verwerfen
DATA: lo_pclx_buffer TYPE REF TO if_hrpclx_buffer.
lo_pclx_buffer = cl_hrpclx_buffer=>get_instance( ).
lo_pclx_buffer->start_trial( ).
lo_pclx_buffer->export_record( … ).
lo_pclx_buffer->discard_trial( ).
lo_pclx_buffer->flush( ).
Die in diesem Beispiel mit EXPORT_RECORD gemachte Operation wird nicht auf der Datenbank gespeichert.
  • Versuch starten und bestätigen
DATA: lo_pclx_buffer TYPE REF TO if_hrpclx_buffer.
lo_pclx_buffer = cl_hrpclx_buffer=>get_instance( ).
lo_pclx_buffer->start_trial( ).
lo_pclx_buffer->export_record( … ).
lo_pclx_buffer->approve_trial( ).
lo_pclx_buffer->flush( ).
Die in diesem Beispiel mit EXPORT_RECORD gemachte Operation wird auf der Datenbank gespeichert.
  • Änderungen in aufgerufene bzw. aus aufgerufenen Programme übernehmen
DATA: lo_pclx_buffer TYPE REF TO if_hrpclx_buffer.
lo_pclx_buffer = cl_hrpclx_buffer=>get_instance( ).
lo_pclx_buffer->export_record( … ).
lo_pclx_buffer->start_trial( iv_use_memory = abap_true ).
SUBMIT … AND RETURN.
lo_pclx_buffer->approve_trial( ).
lo_pclx_buffer->flush( ).
Die in diesem Beispiel mit EXPORT_RECORD gemachte Operation ist im aufgerufenen Programm sichtbar. D.h. wenn im aufgerufenden Programm der entsprechende PCLx-Satz mittels IMPORT_RECORD gelesen wird, wird der aktuell gültige Satz des aufrufenden Programms zurückgeliefert.
Umgekehrt werden Operationen für PCLx-Sätze die im aufgerufenden Programm gemacht werden übernommen und abschließend auf der Datenbank gespeichert. Voraussetzung hierfür ist, dass am Ende das aufgerufenen Programms der Methodenaufruf lo_pclx_buffer->transfer_to_caller( ) erfolgt. Damit wird u.a. sichergstellt dass nur vollständige Daten an den Aufrufer zurückgegeben werden.
Sollen die Operationen aus dem aufgerufenen Programm nicht übernommen werden, so muss DISCARD_TRIAL anstatt APPROVE_TRIAL verwendet werden.
Analog kann bei einem Aufruf mittels CALL TRANSACTION gearbeitet werden. Beim SUBMIT ist zu beachten dass dieser stets mit dem Zusatz AND RETURN aufgerufen werden muss. Grund ist, dass sonst im ABAP-Memory evtl. veraltete PCLx-Daten stehen bleiben die dann bei späteren Programmaufrufen verwendet werden und zu falschen Ergebnissen führen können.

Interne Verarbeitung

Die Klasse CL_HRPCLX_BUFFER ist als Singleton konzipiert. Um mit vorherigen PCLx-Puffern kompatibel zu sein, können in bestehenden Programmen allerdings mehrere Instanzen dieser Klasse auftreten.

Originale

Ein Original bezeichnet entweder den Datenbankeintrag eines PCLx-Satzes (Datenbankoriginal) oder einen Puffereintrag der mit Methode FILL_FROM_TABLE gesetzt wurde (externes Original). Externe Originale kann es nur für PCLx-Schlüssel geben die nicht auf der Datenbank vorhanden sind.

Pufferschichten

Die Klasse CL_HRPCLX_BUFFER erzeugt und verwaltet Pufferschichten. Das sind Instanzen der Klassen CL_HRPCLX_DB_BUFFER und CL_HRPCLX_TRIAL_BUFFER. Diese Pufferschichten enthalten dann die gepufferten PCLx-Sätze.

Beim Erzeugen des Singletons wird zunächst ein Datenbankpuffer CL_HRPCLX_DB_BUFFER instanziert. Diese ist dann die zunächst aktuell gültige Pufferschicht. Während der gesamten Laufzeit enthält diese Schicht die Originale der gepufferten PCLx-Sätze.

Wird ein Versuch mit Methode START_TRIAL gestartet, dann wird eine neue Pufferschicht erzeugt. Das ist eine Instanz der Klasse CL_HRPCLX_TRIAL_BUFFER und diese ist bis zum Aufruf der Methoden APPROVE_TRIAL oder DISCARD_TRIAL die aktuell gültige Pufferschicht. Eine Versuchspufferschicht bezieht bei einem Import ohne vorherigen Export oder Löschung die Daten der zuvor aktuellen Pufferschicht: Also entweder der Datenbankpufferschicht beim ersten Versuch oder der zuletzt gestarteten Versuchspufferschicht bei jedem weiteren Versuch.

Puffertabellen

Die PCLx-Sätze selbst werden in den folgenden Tabellen gespeichert.

  • Puffertabelle (Referenz auf die das Attribut MR_BUFF der Klasse CL_HRPCLX_BUFFER_LAYER zeigt): Enthält die exportierten PCLx-Sätze. In einem Datenbankpuffer sind hier auch die Originale zu importierten Sätzen enthalten.
  • Löschverzeichnis (Referenz auf die das Attribut MR_DEL_DIR der Klasse CL_HRPCLX_BUFFER_LAYER zeigt): Enthält zum Löschen vorgemerkte Datenbankoriginale.
  • Externe Originale (Attribut MT_EXT_ORIGINALS der Klasse CL_HRPCLX_DB_BUFFER zeigt): Enthält externe Originale
  • Alte Datenbankoriginale (Referenz auf die das Attribut MR_BEFORE_IMAGE der Klasse CL_HRPCLX_DB_BUFFER zeigt): Enthält die Datenbankoriginale wie sie vor dem Flush auf der Datenbank vorhanden waren.

Zusätzlich gibt es ein Pufferverzeichnis (Referenz auf die das Attribut MR_ DIR der Klasse CL_HRPCLX_BUFFER_LAYER zeigt), das zu gegebenem PCLx-Schlüssel indirekt den Status (z.B. exportiert, gelöscht, hat Datenbankoriginal,…) des zugehörigen PCLx-Satzes enthält sowie Information wo der aktuell gültige Satz bzw. sein Original in den Puffertabellen zu finden ist.

Das Pufferverzeichnis

Zu gegebenem PCLx-Schlüssel sind im Pufferverzeichnis vier Kennzahlen gespeichert: NTABX, NNUXT, OTABX und ONUXT. NTABX und NNUXT beziehen sich stets auf den zum PCLx-Schlüssel aktuell gültigen Satz, OTABX und OBUXT auf das zugehörige Original. Im Folgenden werden die möglichen Ausprägungen dieser Kennzahlen erläutert.

  • NTABX:
  • NTABX > 0: Zeile der Puffertabelle in der sich die PCLx-Zeile mit SRTF2 = 0 des zugehörigen, aktuell gültigen PCLx-Satzes befindet.

  • NTABX = 0: Der zugehörige PCLx-Satz existiert nicht, d.h. besitzt kein Original.

  • -2147483647 <= NTABX < 0: Zeile des Löschverzeichnisses in der der zu löschende PCLx-Satz vorgemerkt ist.

  • NNUXT: Höchstes SRTF2-Feld des zugehörigen, aktuell gültigen PCLx-Satzes.
  • OTABX: Eine Versuchspufferschicht enthält keine Originale, daher gilt im Pufferverzeichnis von CL_HRPCLX_TRIAL_BUFFER stets OTABX = 0.

    In der Datenbankpufferschicht hat OTABX folgende Bedeutung:
  • OTABX = -2147483647: Der zugehörige PCLx-Satz hat kein Datenbankoriginal

  • -2147483647 < OTABX < 0: Zeile der Puffertabelle in der sich die PClx-Zeile mit SRTF2 = 0 des Originals des zugehörigen PCLx-Satzes befindet.

  • OTABX = 0: Der zugehörige aktuelle PCLx-Satz wurde importiert, aber keine weitere PCLx-Operation (Export, Löschen) wurde durchgeführt.

  • OTABX > 0: Zeile der Tabelle 'Alte Datenbankoriginale' in der sich die PClx-Zeile mit SRTF2 = 0 des Datenbankoriginals des zugehörigen PCLx-Satzes befindet.

  • ONUXT: Eine Versuchspufferschicht enthält keine Originale, daher gilt im Pufferverzeichnis von CL_HRPCLX_TRIAL_BUFFER stets ONUXT = 0. In der Datenbankpufferschicht ist ONUXT das höchste SRTF2-Feld des Originals des zugehörigen PCLx-Satzes.

Hinweise

Für Anwendungsprogramme steht die Klasse CL_HRPCLX_RECORD und deren Unterklassen bereit.

Weiterführende Informationen






Fill RESBD Structure from EBP Component Structure   BAL Application Log Documentation  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 14915 Date: 20240420 Time: 100749     sap01-206 ( 178 ms )