Ich lösche über einen Verbuchungsbaustein ein bis mehrere Einträge aus einer Z-Datenbanktabelle.
Anschließend möchte ich über ein Protokoll ausgeben, wie viele Datensätze erfolgreich aus der Datenbanktabelle gelöscht wurden.
Mein Problem ist jetzt, dass mir der Verbucherbaustein ja keine Rückgabewerte liefert, ich also nicht im Verbucher ausrechnen kann, wieviel Einträge gelöscht wurden.
Im Verbucher selbst möchte ich das Protokoll nicht ausgeben, weil das ja bei externem Gebrauch zu Problemen führen kann...
Könnt ihr mir einen eleganten Tipp geben, wie ich das am besten umsetzen kann?
Danke!!
Da kannst du eigentlich nur zu dem "Objekt", zu dem du die Einträge löschst, irgendwo einen Protokolleintrag darüber machen. Diese Einträge kann man dann z.B. in der Pflegetransaktion zu dem "Objekt" einsehen.
Oder du merkst dir, wie viele Einträge vorher in der Tabelle waren, machst einen SET UPDATE TASK LOCAL, rufst den Verbuchungsbaustein auf und COMMIT WORK AND WAIT und liest nach, wieviele Datensätze noch da sind. Halte ich aber für ziemlich unsinnig.
Als dritte Möglichkeit fällt mir noch ein, dass du einfach zwei Bausteine machst:
1. Der Verbucher, der nix zurück liefert
2. Ein normaler Fuba, der die Anzahl Sätze zurück gibt.
Wenn's nicht zwingende Gründe für den Verbucher gibt, kannst du ihn auch komplett ersetzen.
Ich schreibe mal kurz, wie ich es jetzt umgesetzt habe.
1. Ich prüfe meine Z-Tabelle auf die Anzahl Einträge bevor ich meinen Verbucher laufen lasse.
2. Ich starte den Verbucher und raise bei einem sy-subrc von 4 eine exception.
3. ich prüfe die datenbanktabelle mit alle entries aus der ersten prüfung und berechne die Differenz der Einträge.
4. ich übergebe die Daten an meine Protokollmethode.
Optimal ist das sicher nicht, aber es scheint zu funktionieren.
Wenn du den SET UPDATE STATUS LOCAL nicht setzt, dann bleibt es auch beim Schein! Es wird sicherlich oft funktionieren, aber bei hoher Systemlast, wenn der Verbucher länger braucht oder auf einen Verbucherprozeß warten muss, dann wird es nicht funktionieren.