import com.dvelop.d3.server.Document import com.dvelop.d3.server.core.D3Interface import com.dvelop.d3.server.exceptions.SQLException import com.dvelop.d3.server.exceptions.D3Exception import groovy.transform.Field D3Interface d3 = getProperty("d3"); @Field prg = "migration_verknuepfungen_1.groovy"; @Field version = "0.1"; @Field kunde = "Dr. Kleeberg & Partner GmbH"; ///////////////////////////////////////////////////////////////////////// // debug = 0 => es finden Änderungen am Datenbestand statt // debug = 1 => es finden keine Änderungen am Datenbestand statt @Field debug = 0; ///////////////////////////////////////////////////////////////////////// def debugtext; switch (debug) { case 0: debugtext = "ausgeschaltet"; break; default: debugtext = "eingeschaltet (keine Aenderungen am Datenbestand)"; break; } xlog( d3, 4, "************************************************" ); xlog( d3, 4, "* Programm : " + prg ); xlog( d3, 4, "* Version : " + version ); xlog( d3, 4, "* Kunde : " + kunde ); xlog( d3, 4, "* geschrieben von : calb / d.velop AG" ); xlog( d3, 4, "* (c) d.velop AG" ); xlog( d3, 4, "************************************************" ); xlog( d3, 4, "Parameter: " ); xlog( d3, 4, "* DEBUG : " + debugtext ); xlog( d3, 4, "************************************************" ); def sqlQuery = "select top (100) id,unique_id_doc,unique_id_fol,ddf10,ddf3,ddf4,ddf23,ddf17,ddf32 from mig_link_docs_2 where doku_id_target_fol is null and ddf3 is not null and ddf10 like '%DA%' and fehler is null and id < 177869 "; resultRows = d3.sql.executeAndGet( (String) sqlQuery ); xlog( d3, 4, " Es wurden " + resultRows.size() + " Treffer gefunden." ); xlog( d3, 4, "************************************************" ); if ( resultRows.size() > 0 ) { for( int i = 0 ; i <= resultRows.size() - 1 ; i++ ) { def dummy_ddf3, dummy_ddf4, dummy_ddf23, dummy_ddf17, dummy_ddf32; xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": pruefen, ob folgende Aktenstruktur existiert:" ); xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": Unique-ID Dokument : [" + resultRows[ i ].unique_id_doc + "]" ); xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": DDF10 / Aktennummer : [" + resultRows[ i ].ddf10 + "]" ); if ( ( ! resultRows[ i ].ddf3 ) || ( resultRows[ i ].ddf3 == "null" ) ) { dummy_ddf3 = ""; } else { dummy_ddf3 = resultRows[ i ].ddf3; } xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": DDF03 / Oberregister : [" + dummy_ddf3 + "]" ); if ( ( ! resultRows[ i ].ddf4 ) || ( resultRows[ i ].ddf4 == "null" ) ) { dummy_ddf4 = ""; } else { dummy_ddf4 = resultRows[ i ].ddf4; } xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": DDF04 / Register : [" + dummy_ddf4 + "]" ); if ( ( ! resultRows[ i ].ddf23 ) || ( resultRows[ i ].ddf23 == "null" ) ) { dummy_ddf23 = ""; } else { dummy_ddf23 = resultRows[ i ].ddf23; } xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": DDF23 / Unterregister : [" + dummy_ddf23 + "]" ); if ( ( ! resultRows[ i ].ddf17 ) || ( resultRows[ i ].ddf17 == "null" ) ) { dummy_ddf17 = ""; } else { dummy_ddf17 = resultRows[ i ].ddf17; } xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": DDF17 / 2. Unterregister : [" + dummy_ddf17 + "]" ); if ( ( ! resultRows[ i ].ddf32 ) || ( resultRows[ i ].ddf32 == "null" ) ) { dummy_ddf32 = ""; } else { dummy_ddf32 = resultRows[ i ].ddf32; } xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": DDF32 / 3. Unterregister : [" + dummy_ddf32 + "]" ); def typ = resultRows[ i ].ddf10.substring(5, 7); xlog( d3, 5, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": erkannter Typ: " + typ ); def orakte, rakte, urakte, urakte2, urakte3; switch ( typ ) { case "FI": akte = "AFIBA"; orakte = "AFIOR"; rakte = "AFIRA"; urakte = "AFIUR"; urakte2 = "AFIU2"; urakte3 = ""; break; case "DA": akte = "ADAUR"; orakte = "AOREG"; rakte = "AREGS"; urakte = "AUREG"; urakte2 = "AURG2"; urakte3 = "AURG3"; break; case "ST": akte = "ASTEU"; orakte = "ASTOR"; rakte = "ASTRA"; urakte = "ASTUR"; urakte2 = "ASTU2"; urakte3 = ""; break; case "BE": akte = "ABERB"; orakte = "ABERO"; rakte = "ABERA"; urakte = "ABEUR"; urakte2 = "ABEU2"; urakte3 = ""; break; case "BP": akte = "ABETR"; orakte = "ABEOR"; rakte = "ABEPA"; urakte = "ABPUR"; urakte2 = "ABPU2"; urakte3 = ""; break; case "LO": akte = "ALOJA"; orakte = "ALBOR"; rakte = "ALBRE"; urakte = "ALJUR"; urakte2 = "ALJR2"; urakte3 = ""; break; case "LS": akte = "ALBSA"; orakte = "ALBSO"; rakte = "ALORE"; urakte = "ALOUR"; urakte2 = "ALBU2"; urakte3 = ""; break; case "JA": akte = "AJAAA"; orakte = "AJAOB"; rakte = "AJAAB"; urakte = "AJAUR"; urakte2 = "AJAU2"; urakte3 = ""; break; case "RE": akte = "AAURE"; orakte = "AAURR"; rakte = "AAURA"; urakte = "AAURU"; urakte2 = "AAUR2"; urakte3 = ""; break; } def schritt_1 = [ "kue_dokuart": orakte, "dok_dat_feld_10": resultRows[ i ].ddf10, "dok_dat_feld_3": dummy_ddf3 ]; def schritt_2 = [ "kue_dokuart": rakte, "dok_dat_feld_10": resultRows[ i ].ddf10, "dok_dat_feld_3": dummy_ddf3, "dok_dat_feld_4": dummy_ddf4 ]; def schritt_3 = [ "kue_dokuart": urakte, "dok_dat_feld_10": resultRows[ i ].ddf10, "dok_dat_feld_3": dummy_ddf3, "dok_dat_feld_4": dummy_ddf4, "dok_dat_feld_23": dummy_ddf23 ]; def schritt_4 = [ "kue_dokuart": urakte2, "dok_dat_feld_10": resultRows[ i ].ddf10, "dok_dat_feld_3": dummy_ddf3, "dok_dat_feld_4": dummy_ddf4, "dok_dat_feld_23": dummy_ddf23, "dok_dat_feld_17": dummy_ddf17 ]; def schritt_5 = [ "kue_dokuart": urakte3, "dok_dat_feld_10": resultRows[ i ].ddf10, "dok_dat_feld_3": dummy_ddf3, "dok_dat_feld_4": dummy_ddf4, "dok_dat_feld_23": dummy_ddf23, "dok_dat_feld_17": dummy_ddf17, "dok_dat_feld_32": dummy_ddf32 ]; def schritte = [ schritt_1, schritt_2, schritt_3, schritt_4, schritt_5 ]; def gemerkte_doku_id; def lege_akte_an; for ( int m = 0; m <= schritte.size() - 1 ; m++ ) { // Zusammenbauen des Such-Statements: def STATEMENT = "select doku_id from firmen_spezifisch where "; def log = "Suche nach folgenden Kriterien : "; def x = 0; def und; def kein_problem = true; lege_akte_an = true; schritte[ m ].each { eintrag -> //xlog( d3, 3, "Key [" + eintrag.key + "] Value [" + eintrag.value + "]" ); if ( x > 0 ) { und = " and "; } else { und = ""; x = 1; } if ( ( eintrag.value == "" ) || ( eintrag.value == null ) ) { kein_problem = false; } if ( ( eintrag.key == "kue_dokuart" ) && ( eintrag.value == "" ) ) { kein_problem = false; } STATEMENT = STATEMENT + und + eintrag.key + " = '" + eintrag.value + "' "; log = log + "[" + eintrag.key + "] => [" + eintrag.value + "] "; } if ( kein_problem ) { xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": " + log ); xlog( d3, 5, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": " + STATEMENT ); def ergebnis = d3.sql.executeAndGet( (String) STATEMENT ); if ( ergebnis.size() > 0 ) { // Akte existiert // Doku-ID merken: gemerkte_doku_id = ergebnis[ 0 ].doku_id; xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": Akte existiert, gemerkte Doku-ID: [" + gemerkte_doku_id + "]" ); //def updatesql = "update mig_verknuepfung set ziel_dok = '" + ergebnis[ 0 ].doku_id + "' where id = " + resultRows[ i ].id; } else { xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": Akte existiert nicht, muss angelegt werden." ); // Akte existiert nicht, muss angelegt werden: Document newDoc = d3.archive.newDocument(); //xlog( d3, 2, "Schritte kue_dokuart = [" + schritte[ m ] + "]"); xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": Setze Dokumentart [" + schritte[ m ].kue_dokuart + "]" ); newDoc.type = schritte[ m ].kue_dokuart; newDoc.status = Document.DocStatus.DOC_STAT_RELEASE; //newDoc.editor = "dvelop"; // Mit diesem Statement wird versucht, die Hauptakte zu finden, um von dieser dann Eigenschaftswerte zu lesen. Kann diese Akte nicht gefunden werden, ist das ein Fehlerzustand, // der am Datensatz in der Quelle festgehalten wird. STATEMENT = "select doku_id, dok_dat_feld_25, dok_dat_feld_42, dok_dat_feld_21, dok_dat_feld_2, dok_dat_feld_13, dok_dat_feld_37, dok_dat_feld_1 from firmen_spezifisch where kue_dokuart = '" + akte + "' and dok_dat_feld_10 = '" + resultRows[ i ].ddf10 + "'"; def erg = d3.sql.executeAndGet( (String) STATEMENT ); //xlog( d3, 5, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": " + STATEMENT ); if ( schritte[ m ].dok_dat_feld_1 ) // Mandantnummer { xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": Setze DDF1 / Mandantnummer [" + schritte[ m ].dok_dat_feld_1 + "]" ); newDoc.field[ 1 ] = schritte[ m ].dok_dat_feld_1; } if ( erg.size() > 0 ) { if ( ( erg[ 0 ].dok_dat_feld_1 ) && ( ! schritte[ m ].dok_dat_feld_1 ) ) { xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": Setze DDF1 / Mandantnummer [" + erg[ 0 ].dok_dat_feld_1 + "]" ); newDoc.field[ 1 ] = erg[ 0 ].dok_dat_feld_1; } xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": Setze DDF10 / Aktennummer [" + resultRows[ i ].ddf10 + "]" ); newDoc.field[ 10 ] = resultRows[ i ].ddf10; if ( erg[ 0 ].dok_dat_feld_25 ) { xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": Setze DDF25 / Geschaeftsfuehrer [" + erg[ 0 ].dok_dat_feld_25 + "]" ); newDoc.field[ 25 ] = erg[ 0 ].dok_dat_feld_25; } if ( erg[ 0 ].dok_dat_feld_42 ) { xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": Setze DDF42 / Briefkopf [" + erg[ 0 ].dok_dat_feld_42 + "]" ); newDoc.field[ 42 ] = erg[ 0 ].dok_dat_feld_42; } if ( erg[ 0 ].dok_dat_feld_21 ) { xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": Setze DDF21 / Aktenname [" + erg[ 0 ].dok_dat_feld_21 + "]" ); newDoc.field[ 21 ] = erg[ 0 ].dok_dat_feld_21; } if ( erg[ 0 ].dok_dat_feld_2 ) { xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": Setze DDF2 / Mandantname [" + erg[ 0 ].dok_dat_feld_2 + "]" ); newDoc.field[ 2 ] = erg[ 0 ].dok_dat_feld_2; } if ( erg[ 0 ].dok_dat_feld_13 ) { xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": Setze DDF13 / Mandantgruppennummer [" + erg[ 0 ].dok_dat_feld_13 + "]" ); newDoc.field[ 13 ] = erg[ 0 ].dok_dat_feld_13; } if ( erg[ 0 ].dok_dat_feld_37 ) { xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": Setze DDF37 / Mandatsverantwortlicher [" + erg[ 0 ].dok_dat_feld_37 + "]" ); newDoc.field[ 37 ] = erg[ 0 ].dok_dat_feld_37; } } else { lege_akte_an = false; } if ( schritte[ m ].dok_dat_feld_3 ) // Oberregister { xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": Setze DDF3 / Oberregister [" + schritte[ m ].dok_dat_feld_3 + "]" ); newDoc.field[ 3 ] = schritte[ m ].dok_dat_feld_3; } if ( schritte[ m ].dok_dat_feld_4 ) // Register { xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": Setze DDF4 / Register [" + schritte[ m ].dok_dat_feld_4 + "]" ); newDoc.field[ 4 ] = schritte[ m ].dok_dat_feld_4; } if ( schritte[ m ].dok_dat_feld_23 ) // Unterregister { xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": Setze DDF23 / Unterregister [" + schritte[ m ].dok_dat_feld_23 + "]" ); newDoc.field[ 23 ] = schritte[ m ].dok_dat_feld_23; } if ( schritte[ m ].dok_dat_feld_17 ) // 2. Unterregister { xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": Setze DDF17 / 2. Unterregister [" + schritte[ m ].dok_dat_feld_17 + "]" ); newDoc.field[ 17 ] = schritte[ m ].dok_dat_feld_17; } if ( schritte[ m ].dok_dat_feld_32 ) // 3. Unterregister { xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": Setze DDF32 / 3. Unterregister [" + schritte[ m ].dok_dat_feld_32 + "]" ); newDoc.field[ 32 ] = schritte[ m ].dok_dat_feld_32; } def fehler = false; if ( debug == 0 ) { if ( lege_akte_an ) { try { newDoc = d3.archive.importDocument( newDoc ); } catch ( D3Exception e ) { xlog( d3, 2, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": Akte konnte nicht erzeugt werden: " + e.message ); fehler = true; } if ( ! fehler ) { xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": Doku-ID der erzeugten Akte : [" + newDoc.id + "]" ); gemerkte_doku_id = newDoc.id; xlog( d3, 4, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": Akte existiert, gemerkte Doku-ID: [" + gemerkte_doku_id + "]" ); } } else { xlog( d3, 3, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": Hauptakte wurde nicht gefunden => Akte wurde nicht erzeugt." ); break; } } else { xlog( d3, 3, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": Akte wurde nicht erzeugt / Debug-Modus eingeschaltet." ); } } xlog( d3, 3, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ":****************************" ); } } if ( gemerkte_doku_id ) { def USTATEMENT = "update mig_link_docs_2 set doku_id_target_fol = '" + gemerkte_doku_id + "' where id = '" + resultRows[ i ].id + "'"; if ( debug == 0 ) { xlog( d3, 3, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": setze gemerkte Doku-ID [" + gemerkte_doku_id + "] fuer ID " + resultRows[ i ].id ); d3.sql.executeAndGet( (String) USTATEMENT ); } else { xlog( d3, 3, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": Debug-Modus eingeschaltet, [" + gemerkte_doku_id + "] fuer ID " + resultRows[ i ].id + " wurde nicht gesetzt."); } } if ( ! lege_akte_an ) { def USTATEMENT = "update mig_link_docs_2 set fehler = 'Die Hauptakte existiert nicht.' where id = '" + resultRows[ i ].id + "'"; if ( debug == 0 ) { xlog( d3, 3, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": setze Fehler 'Die Hauptakte existiert nicht.' fuer ID " + resultRows[ i ].id ); d3.sql.executeAndGet( (String) USTATEMENT ); } else { xlog( d3, 3, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ": Debug-Modus eingeschaltet, Fehler 'Die Hauptakte existiert nicht.' fuer ID " + resultRows[ i ].id + " wurde nicht gesetzt."); } } xlog( d3, 3, resultRows[ i ].ddf10 + " / " + resultRows[ i ].id + ":*******************************************************" ); } } def xlog( D3Interface d3, int loglevel, String logtext ) { def logdatei = "d:\\d3\\apps\\" + prg + ".txt"; def g_loglevel = 5; def g_logdirect = "BEIDE"; // BEIDE oder D3LOG oder DATEI def date = new Date(); def zeitstempel = date.format( "yyyy.MM.dd HH:mm:ss", TimeZone.getTimeZone('CET') ); def loglevel_lang = "[INFO ]"; if ( loglevel <= g_loglevel ) { switch ( loglevel ) { case 1: loglevel_lang = "[FATAL]"; if ( ( g_logdirect == "D3LOG" ) || ( g_logdirect == "BEIDE" ) ) { d3.log.critical( logtext ); } break; case 2: loglevel_lang = "[ERROR]"; if ( ( g_logdirect == "D3LOG" ) || ( g_logdirect == "BEIDE" ) ) { d3.log.error( logtext ); } break; case 3: loglevel_lang = "[WARN ]"; if ( ( g_logdirect == "D3LOG" ) || ( g_logdirect == "BEIDE" ) ) { d3.log.warn( logtext ); } break; case 4: loglevel_lang = "[INFO ]"; if ( ( g_logdirect == "D3LOG" ) || ( g_logdirect == "BEIDE" ) ) { d3.log.info( logtext ); } break; case 5: loglevel_lang = "[DEBUG]"; // Da die d.3 Server i.d.R. nicht im Debug-Modus laufen, erscheinen DEBUG-Meldungen nicht im Log. if ( ( g_logdirect == "D3LOG" ) || ( g_logdirect == "BEIDE" ) ) { d3.log.debug( logtext ); } break; } } if ( ( g_logdirect == "DATEI" ) || ( g_logdirect == "BEIDE" ) ) { new File( logdatei ).append( zeitstempel + " " + loglevel_lang + " " + logtext + "\n", "UTF8" ); } return 0; }