266 lines
6.4 KiB
Plaintext
266 lines
6.4 KiB
Plaintext
|
|
|
|
//////////////////////////////////
|
|
//
|
|
// 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 )
|
|
}
|
|
}
|
|
|
|
}
|
|
|