Guten Morgen, bin ganz ganz neu in der Abap Programmierung.
Im programm wird aus Schnittstellen eine interne Tabelle aufgebaut, in der geänderte Positionen stehen . Diese sollen in SAP übernommen werden.
Vor dem Schreiben in eine SAP Tabelle will ich mit enqueue_read überprüfen, ob der betroffene Satz gerade in bearbeitung(gesperrt ist).
Falls ja, soll der Update zurückgestellt werden und es später wieder versucht werden.
Wie mache ich das am einfachsten?
Hallo,
SAP Standard Tabellen (vereinfacht, alles was nicht mit Z beginnt) haben üblicherweise Methoden, Funktionsbausteine welche Änderungen übernehmen und auch prüfen. Die liefern auch einen RC, falls z.B. eine Sperre vorhanden war. SAP Standard Tabellen sollte man nicht direkt mit modyfi, insert, delete ändern.
Generell liefert der spezifische enqueue Baustein der Tabelle, die Info, ob es gesperrt ist oder nicht. Daher ist ein expliziertes Lesen der Sperre unnötig.
Ich würde die originale interne Tabelle duplizieren. Über das Duplikat einen loop.
Den RC der Verbuchungslogik auswerten und bei bei erfolgreicher Verbuchung den Datensatz aus dem original löschen.
Über diese Logik eine Schleife legen, die beendet wird, wenn die Originaltabelle keine Einträge mehr hat.
Und zur Sicherheit noch ein 2. Abbruchkriterium, nicht dass das endlos läuft.
Vor dem 2 und folgende Durchgänge schadet auch ein Warteschritt nicht.
Clear Duplikat[] an passender Stelle nicht vergessen.
Man kann auch im Fehlerfall eine 2. Tabelle füllen anstatt aus der Gesamtheit zu löschen, kommt auf selbe heraus.
Anstatt über diese Logik eine Schleife legen, könnte man das in eine Methode/FuBa packen und rekursiv aufrufen.