////////////////////////////////// // // 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 ) } } }