Hallo zusammen,
wir haben einen nächtlichen Job, der
aktuelle Fehlerinformationen selektiert. Diese sollen in eine Datenbank geschrieben werden, damit man diese in einem Report später schön betrachten und editieren kann.
Wenn Fehler allerdings behoben werden, dann gibt es sie am nächsten Tag nicht mehr, werden nicht selektiert und müssen von der DB gelöscht werden.
Ich habe mir das im Moment so vorgestellt, weiß aber nicht genau, ob das so Sinn macht und wollte mir ein paar Meinungen einholen, bevor ich das ganze Programm ändere (das funktioniert, allerdings immer nur alle aktuellen Fehler ausdruckt):
Code: Alles auswählen.
* itab mit aktuellen Fehlern füllen
LOOP über Fehlertabelle.
LOOP über Errornachrichtentabelle mit keys.
* MESSAGE_PREPARE FuBa
* Daten in itab schreiben und APPEND
ENDLOOP.
* Prüfung, ob es Datensatz in DB schon gibt
SELECT SINGLE COUNT(*)
FROM db
WHERE key1 = itab-key1
AND key2 = itab-key2.
* wenn es Datensatz noch nicht gibt, dann neuen Fehler in DB schreiben
IF sy-subrc <> 0.
MODIFY db FROM itab.
ENDIF.
ENDLOOP.
* wenn Daten in DB, aber nicht in itab sind, dann diese löschen, denn diese Fehler wurden gelöst
SELECT * FROM db
INTO t_not_in_itab_but_in_db
FOR ALL ENTRIES IN itab
WHERE key1 <> itab-key1
OR key2 <> itab-key2.
IF sy-subrc = 0.
DELETE db FROM t_not_in_itab_but_in_db.
ENDIF.
Was ich erwarten würde wäre, dass in der DB am Ende alle aktuellen Fehler stehen. Wird das so funktionieren?
(Der Grund, warum ich nicht jeden Tag alle Einträge der DB ganz löschen und einfach nur alle aktuellen Fehler reinschreiben kann, ist, dass im Report Änderungen an der DB in Form von Kommentaren zu den Fehlern gemacht werden.)
( SAP ECC 6.0, NetWeaver 7.0, ohne unicode, ohne support/enhancement packages )