From 13067f6424a9de12ebf225565710273bbc00db7d Mon Sep 17 00:00:00 2001 From: Christian Albers Date: Wed, 19 Jun 2024 16:20:26 +0200 Subject: [PATCH] initaler Upload --- Funke/FUN_loesch_akten.jpl | 265 +++++++++++++++++++++++++++++++++++++ 1 file changed, 265 insertions(+) create mode 100644 Funke/FUN_loesch_akten.jpl diff --git a/Funke/FUN_loesch_akten.jpl b/Funke/FUN_loesch_akten.jpl new file mode 100644 index 0000000..de29db3 --- /dev/null +++ b/Funke/FUN_loesch_akten.jpl @@ -0,0 +1,265 @@ + + +////////////////////////////////// +// +// leere Akten löschen +// +// geschrieben von calb / 2020.07.01 +// +// (c) d.velop AG 2020 +// +////////////////////////////////// + + +////////////////////////////////// +// +// Dieses Skript löscht leere Akten. Dazu ist eine Aktenart konfigurierbar. Das Skript iteriert dann über die Akten dieser Aktenart +// und löscht die Akten, die kene Kind-Elemente haben, d.h. leer sind. +// +vars vers = "0.1 calb d.AG/PS 2020.07.01 Initialversion" +// +// create table d3_loesch_akten +// ( +// doku_id varchar(50), +// status varchar(20) +// ); +// +// create unique index idx_doku_idx on d3_komplett (doku_id); +////////////////////////////////// + +// Konfiguration + + +// debug = 1 => es werden keine Änderungen an der DB durchgeführt +// debug = 0 => es werden Änderungen an der DB durchgeführt +vars debug = 0 + +// Aktenart der zu löschenden Akten +vars aktenart_kuerzel = "ADEB" + +// Anzahl der Dokumente, die in einem Skriptdurchlauf bearbeitet werden +vars anzahl_doks_pro_durchlauf = 4 + +////////////////////////////////// + +vars ergebnis, dokart_lang + + + +call bkklog( 4, "*********************************************" ) +call bkklog( 4, "* FUN_loesch_akten.jpl *" ) +call bkklog( 4, "* calb/d.velop AG 25.06.2020 *" ) +call bkklog( 4, "*********************************************" ) +call bkklog( 4, "* " ## vers ) +call bkklog( 4, "* DEBUG : " ## debug ) + +ergebnis = api_function( "document_type_get_long", aktenart_kuerzel ) + +if ( ergebnis == 0 ) +{ + dokart_lang = api_single_info +} +else +{ + call bkklog( 2, "* Aktenart konnte nicht korrekt bestimmt werden: " ## ergebnis ) + call bkklog( 2, "* FUN_loesch_akten.jpl beendet sich ..." ) + return ergebnis +} +call bkklog( 4, "* Aktenart : " ## dokart_lang ## " (" ## aktenart_kuerzel ## ")") +call bkklog( 4, "* anzahl_doks_pro_durchlauf : " ## anzahl_doks_pro_durchlauf ) + +// Los geht's ...... + +call bkklog( 4, "*********************************************" ) +/////////////////////////////////////////////////////////////////////// + +vars anzahl, ergebnis, i + +vars d3db = "d3" ## d3fc_server_kuerzel ## ".INFORMATION_SCHEMA.TABLES" + +anzahl = pruefe_ob_tabelle_existiert( "d3_loesch_akten" ) + +if ( anzahl == 0 ) +{ + // Tabelle existiert nicht, wird angelegt + call bkklog( 1, "DB-Tabelle d3_loesch_akten nicht gefunden. Lege Tabelle an ...") + dbms sql create table d3_loesch_akten ( doku_id varchar(50), status varchar(20) ) + dbms sql create unique index idx_doku_idx on d3_loesch_akten (doku_id) + + anzahl = pruefe_ob_tabelle_existiert( "d3_loesch_akten" ) + + if ( anzahl == 0 ) + { + call bkklog( 2, "Es gab ein Problem beim Anlegen der Tabelle. Bitte legen Sie die Tabelle manuell an und starten das Skript erneut.") + } + else + { + call bkklog( 1, "DB-Tabelle d3_loesch_akten wurde angelegt.") + } +} +else +{ + call bkklog( 4, "DB-Tabelle d3_loesch_akten gefunden.") +} + +call bkklog( 4, "*********************************************" ) + + +vars doku_id[ anzahl_doks_pro_durchlauf ] +vars i + + +dbms alias doku_id +dbms sql select doku_id from firmen_spezifisch where kue_dokuart = :+aktenart_kuerzel and doku_id not in (select doku_id from d3_loesch_akten ) +anzahl = @dmrowcount +dbms alias + +for i = 1 while i <= anzahl step 1 +{ + // Prüfen, ob die Akte Kind-Elemente hat + + // falls ja: nächste + // falls nein: Löschen + + ergebnis = api_function( "link_get_children", doku_id[ i ], "Master" ) + if ( ergebnis == 0 ) + { + // Das Ermitteln der Kind-Elemente hat funktioniert. + // Jetzt wird geprüft, ob die Anzahl 0 (null) oder > 0 ist. + + if ( api_single_info == 0 ) + { + // Keine Kinder gefunden. Akte wird gelöscht: + if ( debug == 0 ) + { + ergebnis = api_function( "document_delete", "leere Akten nach Kd.-Nr.-Änderung", 1, 1, doku_id[ i ], "Master" ) + if ( ergebnis == 0 ) + { + call bkklog( 4, "Nr. " ## i ## ": Akte " ## doku_id[ i ] ## " wurde gelöscht." ) + } + else + { + call bkklog( 4, "Nr. " ## i ## ": Akte " ## doku_id[ i ] ## " konnte nicht gelöscht werden: RC " ## ergebnis ) + } + } + else + { + call bkklog( 4, "Nr. " ## i ## ": Akte " ## doku_id[ i ] ## " wurde nicht gelöscht wegen eingeschaltetem DEBUG-Modus." ) + } + } + else + { + // Die Akte hat Kind-Elemente, darf nicht gelöscht werden. Die Akte wird in die Tabelle eingetragen, damit sie beim nächsten + // Durchlauf nicht mehr berücksichtigt wird. + dbms sql insert into d3_loesch_akten ( doku_id, status ) values ( :+doku_id[ i ], '0' ) + + call bkklog( 4, "Nr. " ## i ## ": Akte " ## doku_id[ i ] ## " hat Kind-Elemente und wurde zurückgelegt.") + } + } + else + { + // Es gab ein Problem beim Ermitteln der Kind-Elemente. Die Akte wird mit Fehlerstatus zurückgelegt. + dbms sql insert into d3_loesch_akten ( doku_id, status ) values ( :+doku_id[ i ], :+ergebnis ) + + call bkklog( 4, "Nr. " ## i ## ": Akte " ## doku_id[ i ] ## ": Fehler beim Ermitteln der Kind-Elemente; Akte wurde mit RC " ## ergebnis ## " zurückgelegt.") + } + + +} + + + + + + + + + + + + + + + + + + + + + + + + +string proc pruefe_ob_tabelle_existiert( tab_name ) +{ + vars anzahl + dbms alias anzahl + dbms sql select count(*) anzahl from :d3db where table_name = :+tab_name; + dbms alias + return anzahl +} + + + + +proc bkklog( loglevel, message ) +{ + vars l_logdirect = "BEIDE" + vars l_logdatei = "D\:\\d3\\apps\\log.txt" + vars l_loglevel = 5 + + vars zeitstempel, loglevel_lang, d3loglevel, logmessage + + if ( loglevel == 5 ) + { + loglevel_lang = "DEBUG" + // Da die d.3 Server i.d.R. nicht im Debug-Modus laufen, erscheinen DEBUG-Meldungen nicht im Log. + d3loglevel = 9 + } + + if ( loglevel == 4 ) + { + loglevel_lang = "INFO." + d3loglevel = 6 + } + + if ( loglevel == 3 ) + { + loglevel_lang = "WARN." + d3loglevel = 6 + } + + if ( loglevel == 2 ) + { + loglevel_lang = "ERROR" + d3loglevel = 0 + } + + if ( loglevel == 1 ) + { + loglevel_lang = "FATAL" + d3loglevel = 0 + } + + if ( loglevel <= l_loglevel ) + { + + + if ( ( l_logdirect == "DATEI" ) || ( l_logdirect == "BEIDE" ) ) + { + // Ausgabe in Datei + zeitstempel = sm_sdtime( "n%4y.%0m.%0d %0h\:%0M\:%0s" ) + logmessage = zeitstempel ## " " ## loglevel_lang ## " " ## message + call api_function( "file_add_line", l_logdatei, logmessage, "APPEND" ) + } + + if ( ( l_logdirect == "D3LOG" ) || ( l_logdirect == "BEIDE" ) ) + { + // Ausgabe im d.3 Log + logmessage = loglevel_lang ## " " ## message + call api_log( d3loglevel, logmessage ) + } + } + +} +