Initialer Upload

This commit is contained in:
2024-06-14 10:39:14 +02:00
commit b2304afa4b
41 changed files with 20891 additions and 0 deletions

File diff suppressed because it is too large Load Diff

3346
Kleeberg/30_hooks.groovy Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,24 @@
public class ERwflProcessConstants{
// Base-Uri without trailing "/"
static final String gBaseUri = "https://d3one.kleeberg.kleeberg.de";
// API-Key of a user with the right to start a process. It is recommended to use a user without d.3 document permissions
static final String gApiKey = "BkelbC0cc2uf1PZ4Aftzvtw/tQKsUR7AGbj0/IrTDl/wIu34gyX4LWWU4NUkTDYEWF9uOfpxTIwn48fke1xzs8jJ5/dXf5ABBWRhuff/Z3U=&_z_A0V5ayCSDIwDiNS1nL5awyU2f_-oPqbOvu-W7spr3dMu6-RJODofIJ5nAN5pPh6GH3hdFbitxB2cXYhhUspF1O2Bu33Qq";
// Process ID
static final String gProzessId = "Eingangsrechnungsworkflow";
// Repository ID
static final String gRepoId = "7b813cf7-9909-54ba-a333-f62d302fdfdc";
// Dokumenttype used within the Hook-Definition
static final String gDocType = "DEREC"
// Assignee group for first Task
//static final String gBuchhaltung = "identity://" + "/identityprovider/scim/groups/dd1cbb6d-8603-4ffd-a666-f0d61c9502df"; //ID ist von der Gruppe D3T_BUHA
static final String gBuchhaltung = "identity://" + "/identityprovider/scim/groups/7a37a8d3-45ff-46fa-9b3a-451681f7ac95"; //ID ist von der Gruppe D3T_BUHA_ER (Laut Fehlerliste soll hier eine Umstellung auf die Gruppe D3T_BUHA_ER umgestellt werden)
// Subject first Task
static final String gSubject = "Eingangsrechnungsworkflow initial zur weiteren Bearbeitung prüfen";
}

View File

@@ -0,0 +1,89 @@
// Hooks
import com.dvelop.d3.server.*
import com.dvelop.d3.server.core.D3Interface
// REST / Http
import javax.net.ssl.HttpsURLConnection
import groovy.json.JsonSlurper
class Eingangsrechnungsworkflow {
// Constructor
Eingangsrechnungsworkflow() {}
@Entrypoint(entrypoint = "hook_insert_exit_30")
@Condition(doctype = [ERwflProcessConstants.gDocType])
int ProcessInsertExit30_1(D3Interface d3, Document doc, String fileDestination, Integer importOk, User d3User, DocumentType docType){
def processId = ERwflProcessConstants.gProzessId;
def baseUri = ERwflProcessConstants.gBaseUri;
def repoId = ERwflProcessConstants.gRepoId;
def docId = doc.id;
def subject = ERwflProcessConstants.gSubject;
def empfaengerBuchhaltung = ERwflProcessConstants.gBuchhaltung;
def date = new Date();
def timeString = date.getDateTimeString();
def businessKey = "${processId}-${timeString}-${docId}";
businessKey = businessKey.replaceAll(" ", "");
def jsonBody = """{
"businessKey": "${businessKey}",
"variables": {
"empfaengerBuchhaltung" : "${empfaengerBuchhaltung}",
"formInstanceId" : "${businessKey}",
"baseUri" : "${baseUri}",
"docId" : "${docId}",
"repoId" : "${repoId}",
"subject" : "${subject}",
"dv_attachment": "dmsObject:///dms/r/${repoId}/o2/${docId}"
}
}"""
def migrationDoc = doc.field[48];
if ( migrationDoc == null || migrationDoc == "" ){
d3.log.info("ProcessInsertExit30_1 - Groovy hook insert_exit_30_1 " + doc.id + processId);
validateGenericProcessStart( d3, doc, d3User, processId, jsonBody );
}
return 0
}
public static def validateGenericProcessStart(D3Interface d3, Document doc, User d3User, def processId, def jsonBody ) {
try {
def body = jsonBody;
def http = new URL( ERwflProcessConstants.gBaseUri + "/process/processes/" + processId + "/instances").openConnection() as HttpsURLConnection
http.setRequestMethod('POST')
http.setDoOutput(true)
http.setRequestProperty("Content-Type", "application/json; charset=utf-8")
http.setRequestProperty("Authorization", "Bearer " + ERwflProcessConstants.gApiKey )
http.setRequestProperty("Accept-Charset" , "utf-8")
http.outputStream.write(body.getBytes("UTF-8"))
http.connect()
def response = [:]
if (http.responseCode == 200 || http.responseCode == 201) {
def location = http.getHeaderField("location");
d3.log.info("Process was started: " + location);
d3.log.info("Process was started on: " + http);
d3.log.info("Process was started on baseUri: " + ERwflProcessConstants.gBaseUri );
} else {
response = http.getResponseMessage()
d3.log.error("Error while starting process: " + response + "(" + http.responseCode + ")");
d3.log.error("POST-Request send: " + http + "(" + http.responseCode + ")");
return -1;
}
} catch (Exception e) {
d3.log.error("Exception while starting process: " + e.getMessage());
return -1;
}
return 0;
}
}

View File

@@ -0,0 +1,270 @@
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 = "mehrfachfelder_einrichten.groovy";
@Field version = "0.1";
@Field kunde = "Dr. Kleeberg & Partner GmbH";
// Dieses Skript soll bei allen Dokumenten innerhalb der Mandatenakte die verknüpften Akten in 60er-Felder eintragen, damit die Dokumente bei einer passenden Suche gefunden werden.
// Dabei wird festgehalten, welche Dokumente bereits aktualisiert wurden.
/////////////////////////////////////////////////////////////////////////
// debug = 0 => es finden Änderungen am Datenbestand statt
// debug = 1 => es finden keine Änderungen am Datenbestand statt
@Field debug = 0;
@Field suffix = Math.abs( new Random().nextInt() % (99999 - 10000) ) + 10000;
/////////////////////////////////////////////////////////////////////////
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 i, ergebniszeilen, ergebnistext;
def dokumentarten = "'DBERA', 'DBETR', 'DDAUE', 'DDEBD', 'DFIBU', 'DABSC', 'DLOHN', 'DLSTD', 'DSTEU' ";
def sqlQuery = "select top (10000) doku_id, kue_dokuart from firmen_spezifisch where kue_dokuart in ( " + dokumentarten + " ) and doku_id not in ( select doku_id from dv_mehrf_feld) order by kue_dokuart";
DB_Zeilen = d3.sql.executeAndGet( (String) sqlQuery );
if ( DB_Zeilen.size() > 0 )
{
xlog( d3, 4, " Es wurde(n) " + DB_Zeilen.size() + " Treffer gefunden." );
xlog( d3, 4, "************************************************" );
for ( i = 0; i < DB_Zeilen.size(); i++ )
{
def docChild = DB_Zeilen[ i ].doku_id;
xlog( d3, 4, i + ": bearbeite Doku-ID " + docChild );
def ueberdoks = d3.call.link_get_parents( docChild, "Master" );
//xlog( d3, 4, i + ": bearbeite ueberdoks-ID " + ueberdoks + " " + ueberdoks.size() );
def ziel_dok_ids = "";
if ( ueberdoks.size() > 0 )
{
ueberdoks.each
{
xlog( d3, 4, i + ": => Kind: " + docChild + " Elternelement: " + it );
ziel_dok_ids = ziel_dok_ids + "'" + it + "',";
}
ziel_dok_ids = ziel_dok_ids.substring( 0, ziel_dok_ids.length( ) - 1 );
xlog( d3, 4, i + ": Ziel-Dok_IDs: " + ziel_dok_ids );
def STATEMENT = "select kue_dokuart, dok_dat_feld_1, dok_dat_feld_2, dok_dat_feld_10, dok_dat_feld_13, dok_dat_feld_21 from firmen_spezifisch where doku_id in ( " + ziel_dok_ids + " ) ";
def resultRows = d3.sql.executeAndGet( STATEMENT );
if ( resultRows.size() > 0 )
{
// Schreiben der Verknüpfungen an das Dokument:
def currentDoc = d3.archive.getDocument( docChild );
// Die Felder werden vor dem Füllen geleert, damit - für den Fall, dass weniger neue Werte reingeschrieben werden als vorher drin waren - keine
// deplazierten Restwerte in den Feldern stehen bleiben. (Könnte man vielleicht auch eleganter lösen.)
// Felder leeren:
for ( int m = 1 ; m <= Integer.valueOf( d3.config.value( "CUR_60ER_FIELD_NR" ) ); m++ )
{
currentDoc.field[ 60 ][ m ] = ""; // Mandantennamen
currentDoc.field[ 61 ][ m ] = ""; // Mandantennummern
currentDoc.field[ 62 ][ m ] = ""; // Mandantengruppennummern
currentDoc.field[ 63 ][ m ] = ""; // Aktennamen
currentDoc.field[ 64 ][ m ] = ""; // Aktennummern
}
// Jetzt Felder füllen mit den gefundenen Werten:
for ( int j = 1 ; j <= resultRows.size(); j++ )
{
currentDoc.field[ 60 ][ j ] = resultRows[ j - 1 ].dok_dat_feld_2; // Mandantennamen
currentDoc.field[ 61 ][ j ] = resultRows[ j - 1 ].dok_dat_feld_1; // Mandantennummern
currentDoc.field[ 62 ][ j ] = resultRows[ j - 1 ].dok_dat_feld_13; // Mandantengruppennummern
currentDoc.field[ 63 ][ j ] = resultRows[ j - 1 ].dok_dat_feld_21; // Aktennamen
currentDoc.field[ 64 ][ j ] = resultRows[ j - 1 ].dok_dat_feld_10; // Aktennummern
xlog( d3, 4, i + ": Dokument " + docChild + ": Info-Zeile " + j + " gesetzt: <" + resultRows[ j - 1 ].kue_dokuart + "> <" + resultRows[ j - 1 ].dok_dat_feld_2 + "> <" + resultRows[ j - 1 ].dok_dat_feld_1 + "> <" + resultRows[ j - 1 ].dok_dat_feld_13 + "> <" + resultRows[ j - 1 ].dok_dat_feld_21 + "> <" + resultRows[ j - 1 ].dok_dat_feld_10 + ">" );
}
currentDoc.updateAttributes( "Master" );
dokument_fertig( d3, docChild, "Aktualisierung erfolgt." );
xlog( d3, 4, i + ": Dokument " + docChild + ": Aktualisierung erfolgt." );
}
}
else
{
dokument_fertig( d3, docChild, "keine uebergeordneten Akten" );
xlog( d3, 3, i + ": Dokument " + docChild + " hat keine uebergeordneten Akten." );
}
xlog( d3, 4, "************************************************" );
}
}
else
{
xlog( d3, 3, "Es wurden keine passenden Treffer gefunden!" );
}
def dokument_fertig( D3Interface d3, String doku_id, String meldung )
{
def meldung_db;
if ( meldung.length() > 200 )
{
meldung_db = meldung.substring( 0, 199 );
}
else
{
meldung_db = meldung;
}
if ( debug == 0 )
{
//xlog( d3, 4, "Angekommen" );
sql = "insert into dv_mehrf_feld (doku_id, status) values ( '" + doku_id + "', '" + meldung + "' )";
d3.sql.execute( sql );
}
}
def xlog( D3Interface d3, int loglevel, String logtext )
{
def logdatei = "d:\\d3\\logs\\" + prg + "_" + suffix + ".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;
}

View File

@@ -0,0 +1,594 @@
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");
def prg = "migration_akte_ausgangsrechakte.groovy";
def version = "0.1";
def 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;
// In welcher Tabelle soll nach den zu erstellenden Akten gesucht werden?
@Field zieltabelle = "mig_ausgangsrechnungsakte";
// Konfiguration der Aktenartkürzel
@Field dokuart_sammelakte = "AMAND";
@Field dokuart_hauptakte = "AAURE";
@Field dokuart_oberregisterakte = "AAURR";
@Field dokuart_registerakte = "AAURA";
// der hier konfigurierte Wert wird verwendet, wenn kein sonstiger Hauptaktenname gefunden wird.
@Field standard_hauptaktenname = "Ausgangsrechnungsakte";
// DDF 1 / ADM_Aktentyp aus der Aktenart ADM_Verwaltung Mandantenakte (AVMNT) - mit diesem Schlüssel werden die benötigten (Ober-)Register aus den Stammdaten in der Aktenart AVMNT ermittelt.
@Field aktenschluessel = "Ausgangsrechnungsakte";
/////////////////////////////////////////////////////////////////////////
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, "* Aktenart Sammelakte : " + dokuart_sammelakte );
xlog( d3, 4, "* Aktenart Hauptakte : " + dokuart_hauptakte );
xlog( d3, 4, "* Aktenart Oberregisterakte : " + dokuart_oberregisterakte );
xlog( d3, 4, "* Aktenart Registerakte : " + dokuart_registerakte );
xlog( d3, 4, "* Zieltabelle : " + zieltabelle );
xlog( d3, 4, "* Standard-Hauptaktenname : " + standard_hauptaktenname );
xlog( d3, 4, "* Aktenschluessel : " + aktenschluessel );
xlog( d3, 4, "************************************************" );
def sqlQuery = "select top (100) id,ddf1,ddf48,ddf10,ddf21,ddf22,ddf25,ddf37,ddf42,ddf60,ddf69 from " + zieltabelle + " where fehler is null and doku_id is null";
treffer = d3.sql.executeAndGet( (String) sqlQuery );
xlog( d3, 4, " Es wurden " + treffer.size() + " Treffer gefunden." );
xlog( d3, 4, "************************************************" );
if ( treffer.size() > 0 )
{
for ( i = 0; i < treffer.size(); i++ )
{
// Prüfung, ob die Mandantnummer in der Aktennummer zu der Mandantnummer aus der Tabelle passt - andernfalls Fehler.
def mandantnr_aus_aktennr = treffer[ i ].ddf10.substring( 0, 5 );
//JFEL toString eingefügt, da der Vergleich sonst scheitert.
//if ( mandantnr_aus_aktennr == treffer[ i ].ddf1 )
if ( mandantnr_aus_aktennr == treffer[ i ].ddf1.toString() )
{
// Es wird eine neue Hauptakte erstellt
def newDocfield_1, newDocfield_2, newDocfield_10, newDocfield_13, newDocfield_21, newDocfield_22, newDocfield_25, newDocfield_37, newDocfield_42, newDocfield_60 = [ ], newDocfield_69 = [ ];
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Mandantennummer DDF1 : [" + treffer[ i ].ddf1 + "]" );
//JFEL toString eingefügt, da sonst später beim wegschreiben ein Java-Class-Error auftritt.
//newDocfield_1 = treffer[ i ].ddf1;
newDocfield_1 = treffer[ i ].ddf1.toString();
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Aktennummer DDF10 : [" + treffer[ i ].ddf10 + "]" );
newDocfield_10 = treffer[ i ].ddf10;
if ( treffer[ i ].ddf21 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Aktenname DDF21 : [" + treffer[ i ].ddf21 + "]" );
newDocfield_21 = treffer[ i ].ddf21;
}
else
{
xlog( d3, 3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenname wurde nicht gefunden. Setze Standardbezeichnung '" + standard_hauptaktenname + "'." );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Aktenname DDF21 : <" + standard_hauptaktenname + ">" );
newDocfield_21 = standard_hauptaktenname;
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze physischer Aufbewahrungsort DDF22 : [" + treffer[ i ].ddf22 + "]" );
newDocfield_22 = treffer[ i ].ddf22;
if ( treffer[ i ].ddf25 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Geschaeftsfuehrer DDF25 : [" + treffer[ i ].ddf25 + "]" );
newDocfield_25 = treffer[ i ].ddf25;
}
else
{
def STATEMENT = "select dok_dat_feld_25 from firmen_spezifisch where kue_dokuart = 'AMAND' and dok_dat_feld_1 = '" + newDocfield_1 + "'";
def treffer_STATEMENT = d3.sql.executeAndGet( (String) STATEMENT );
if ( treffer_STATEMENT.size() > 0 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Geschaeftsfuehrer DDF25 aus M.-Akte : [" + treffer_STATEMENT[ 0 ].dok_dat_feld_25 + "]" );
newDocfield_25 = treffer_STATEMENT[ 0 ].dok_dat_feld_25;
}
else
{
xlog( d3, 3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Es konnte kein Wert für Geschaeftsfuehrer / DDF25 gefunden werden." );
}
}
if ( treffer[ i ].ddf37 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Auftragsverantwortlicher DDF37 : [" + treffer[ i ].ddf37 + "]" );
newDocfield_37 = treffer[ i ].ddf37;
}
else
{
def STATEMENT = "select dok_dat_feld_37 from firmen_spezifisch where kue_dokuart = 'AMAND' and dok_dat_feld_1 = '" + newDocfield_1 + "'";
def treffer_STATEMENT = d3.sql.executeAndGet( (String) STATEMENT );
if ( treffer_STATEMENT.size() > 0 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Auftragsverantwortlicher DDF37 aus M.-Akte: [" + treffer_STATEMENT[ 0 ].dok_dat_feld_37 + "]" );
newDocfield_37 = treffer_STATEMENT[ 0 ].dok_dat_feld_37;
}
else
{
xlog( d3, 3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Es konnte kein Wert für Auftragsverantwortlicher / DDF37 gefunden werden." );
}
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Briefkopf DDF42 : [" + treffer[ i ].ddf42 + "]" );
newDocfield_42 = treffer[ i ].ddf42;
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Unique-ID Migration DDF48 : [" + treffer[ i ].ddf48 + "]" );
newDocfield_48 = treffer[ i ].ddf48;
// Postempfänger
if ( treffer[ i ].ddf60 )
{
def splitted_str_array = treffer[ i ].ddf60.split( ';' );
for ( int j = 0; j < splitted_str_array.length; j++ )
{
def filler = " ";
if ( j >= 10 )
{
filler = "";
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Setze Postempfaenger DDF60 / " + filler + j + " : [" + splitted_str_array[ j ] + "]" );
newDocfield_60[ j ] = splitted_str_array[ j ];
}
}
// Berechtigter:
if ( treffer[ i ].ddf69 )
{
def splitted_str_array = treffer[ i ].ddf69.split( ';' );
for ( int j = 0; j < splitted_str_array.length; j++ )
{
def filler = " ";
if ( j >= 10 )
{
filler = "";
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Setze Berechtigter DDF69 / " + filler + j + " : [" + splitted_str_array[ j ] + "]" );
newDocfield_69[ j ] = splitted_str_array[ j ];
}
}
// Prüfung, ob zu dieser Hauptakte eine passende Sammelakte existiert
// Falls ja: Übernahme der Mandantenstammdaten der entsprechenden Akte
// Falls nein: Fehler in DB eintragen und Abbruch der Verarbeitung dieses Treffers
sqlQuery = "select doku_id, dok_dat_feld_1, dok_dat_feld_2, dok_dat_feld_13 from firmen_spezifisch where kue_dokuart = '" + dokuart_sammelakte + "' and dok_dat_feld_1 = '" + treffer[ i ].ddf1 + "'";
ergebnis = d3.sql.executeAndGet( (String) sqlQuery );
if ( ergebnis.size() > 0 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Mandantenname DDF2 : [" + ergebnis[ 0 ].dok_dat_feld_2 + "]" );
newDocfield_2 = ergebnis[ 0 ].dok_dat_feld_2;
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Mandantengruppennummer DDF13 : [" + ergebnis[ 0 ].dok_dat_feld_13 + "]" );
newDocfield_13 = ergebnis[ 0 ].dok_dat_feld_13;
// Akte mit Stammdaten und Infos aus der Tabelle "zieltabelle" erstellen
// Registerstruktur unterhalb ebenfalls erstellen
Document newDoc = d3.archive.newDocument();
newDoc.type = dokuart_hauptakte;
newDoc.status = Document.DocStatus.DOC_STAT_PROCESSING;
newDoc.editor = "dvelop";
newDoc.field[ 1 ] = newDocfield_1;
newDoc.field[ 2 ] = newDocfield_2;
newDoc.field[ 10 ] = newDocfield_10;
newDoc.field[ 13 ] = newDocfield_13;
newDoc.field[ 21 ] = newDocfield_21;
newDoc.field[ 22 ] = newDocfield_22;
newDoc.field[ 25 ] = newDocfield_25;
newDoc.field[ 37 ] = newDocfield_37;
newDoc.field[ 42 ] = newDocfield_42;
newDoc.field[ 48 ] = newDocfield_48;
for ( int i = 0; i < newDocfield_60.size(); i++ )
{
newDoc.field[ 60 ][ i + 1 ] = newDocfield_60[ i ];
}
for ( int i = 0; i < newDocfield_69.size(); i++ )
{
newDoc.field[ 69 ][ i + 1 ] = newDocfield_69[ i ];
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": =============================" );
//Pruefung ob die anzulegende Akte ggf. schon im System angelegt wurde
sqlQuery = "select doku_id from firmen_spezifisch where kue_dokuart = '" + dokuart_hauptakte + "' and dok_dat_feld_1 = '" + newDocfield_1 + "' AND dok_dat_feld_10 = '" + newDocfield_10 + "'";
ergebnis = d3.sql.executeAndGet( (String) sqlQuery );
if ( ergebnis.size() > 0 ) {
fehler( d3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage [" + newDoc.field[ 10 ] + "] nicht durchgefuehrt da die Akte bereits existiert doku_id: [" + ergebnis[ 0 ].doku_id + "]", (int) treffer[ i ].id );
continue;
}
def aktenanlage_erfolgreich = true;
if ( debug == 0 )
{
try
{
newDoc = d3.archive.importDocument( newDoc );
}
catch ( D3Exception e )
{
fehler( d3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Akte [" + newDoc.field[ 10 ] + "] konnte nicht erzeugt werden: " + e.message, (int) treffer[ i ].id );
aktenanlage_erfolgreich = false;
}
if ( aktenanlage_erfolgreich )
{
// sichern der erzeugten Doku-ID
if ( debug == 0 )
{
sqlQuery = "update " + zieltabelle + " set doku_id = '" + newDoc.id + "' where id = " + treffer[ i ].id;
d3.sql.execute( sqlQuery );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage [" + newDoc.field[ 10 ] + "] erfolgreich, doku_id: [" + newDoc.id + "]" );
}
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Keine Aktenanlage fuer [" + newDoc.field[ 10 ] + "] (Debug-Modus eingeschaltet)." );
}
if ( aktenanlage_erfolgreich )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": =============================" );
//////////////////////////////////////////
// Ebene unterhalb der Hauptakte anlegen
// Dokumentart: Hauptakten-Oberregisterakte, darin alle in den Stammdaten angelegten Oberregister
sqlQuery = "select distinct dok_dat_feld_2 from firmen_spezifisch where kue_dokuart = 'AVMNT' and dok_dat_feld_1 = '" + aktenschluessel + "'";
def resultRows = d3.sql.executeAndGet( (String) sqlQuery );
if ( resultRows.size() > 0 )
{
resultRows.each
{
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": erstelle Oberregister-Akte: [" + it.dok_dat_feld_2 + "]" );
Document newDocOReg = d3.archive.newDocument();
newDocOReg.type = dokuart_oberregisterakte;
newDocOReg.status = Document.DocStatus.DOC_STAT_PROCESSING;
newDocOReg.editor = "dvelop";
newDocOReg.field[ 1 ] = newDocfield_1;
newDocOReg.field[ 2 ] = newDocfield_2;
newDocOReg.field[ 3 ] = it.dok_dat_feld_2; // Oberregister
newDocOReg.field[ 10 ] = newDocfield_10;
newDocOReg.field[ 13 ] = newDocfield_13;
newDocOReg.field[ 21 ] = newDocfield_21;
newDocOReg.field[ 25 ] = newDocfield_25;
newDocOReg.field[ 42 ] = newDocfield_42;
newDocOReg.field[ 37 ] = newDocfield_37;
newDocOReg.field[ 42 ] = newDocfield_42;
for ( int i = 0; i < newDocfield_69.size(); i++ )
{
newDocOReg.field[ 69 ][ i + 1 ] = newDocfield_69[ i ];
}
if ( debug == 0 )
{
try
{
newDocOReg = d3.archive.importDocument( newDocOReg );
}
catch ( D3Exception e )
{
xlog( d3, 2, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Akte [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "] konnte nicht erzeugt werden: " + e.message );
aktenanlage_erfolgreich = false;
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Keine Aktenanlage fuer [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "] (Debug-Modus eingeschaltet)." );
}
if ( ( aktenanlage_erfolgreich ) && ( debug == 0 ) )
{
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage erfolgreich, doku_id: [" + newDoc.id + "][" + newDocOReg.id + "]" );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage erfolgreich, doku_id: [" + newDoc.id + "][" + newDocOReg.id + "] Register: [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "]" );
}
}
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Weitere Akten werden wegen Fehler nicht angelegt." );
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": =============================" );
if ( aktenanlage_erfolgreich )
{
//////////////////////////////////////////
// Ebene unterhalb der Hauptakten-Oberregisterakte anlegen
// Dokumentart: Hauptakten-Registerakte, darin alle in den Stammdaten angelegten Register
sqlQuery = "select distinct dok_dat_feld_2, dok_dat_feld_3 from firmen_spezifisch where kue_dokuart = 'AVMNT' and dok_dat_feld_1 = '" + aktenschluessel + "' and dok_dat_feld_3 != ''";
def resultRows = d3.sql.executeAndGet( (String) sqlQuery );
if ( resultRows.size() > 0 )
{
resultRows.each
{
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": erstelle Register-Akte: [" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "]" );
Document newDocReg = d3.archive.newDocument();
newDocReg.type = dokuart_registerakte;
newDocReg.status = Document.DocStatus.DOC_STAT_PROCESSING;
newDocReg.editor = "dvelop";
newDocReg.field[ 1 ] = newDocfield_1;
newDocReg.field[ 2 ] = newDocfield_2;
newDocReg.field[ 3 ] = it.dok_dat_feld_2; // Oberregister
newDocReg.field[ 4 ] = it.dok_dat_feld_3; // Register
newDocReg.field[ 10 ] = newDocfield_10;
newDocReg.field[ 13 ] = newDocfield_13;
newDocReg.field[ 21 ] = newDocfield_21;
newDocReg.field[ 25 ] = newDocfield_25;
newDocReg.field[ 42 ] = newDocfield_42;
newDocReg.field[ 37 ] = newDocfield_37;
newDocReg.field[ 42 ] = newDocfield_42;
for ( int i = 0; i < newDocfield_69.size(); i++ )
{
newDocReg.field[ 69 ][ i + 1 ] = newDocfield_69[ i ];
}
if ( debug == 0 )
{
try
{
newDocReg = d3.archive.importDocument( newDocReg );
}
catch ( D3Exception e )
{
xlog( d3, 2, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Akte [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "] konnte nicht erzeugt werden: " + e.message );
aktenanlage_erfolgreich = false;
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Keine Aktenanlage fuer [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "] (Debug-Modus eingeschaltet)." );
}
if ( ( aktenanlage_erfolgreich ) && ( debug == 0 ) )
{
sqlQuery = "select doku_id from firmen_spezifisch where kue_dokuart = '" + dokuart_oberregisterakte + "' and dok_dat_feld_10 = '" + newDoc.field[ 10 ] + "' and dok_dat_feld_3 = '" + it.dok_dat_feld_2 + "'";
//xlog( d3, 3, sqlQuery );
e = d3.sql.executeAndGet( sqlQuery );
def oregdokuid;
if ( e.size() > 0 )
{
oregdokuid = e[0].doku_id;
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage erfolgreich, doku_id: [" + newDoc.id + "][" + oregdokuid + "][" + newDocReg.id + "] Register: [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "]" );
}
}
}
}
}
else
{
fehler( d3, "Es wurde keine passende Sammelakte gefunden. [" + treffer[ i ].ddf10 + "]", (int) treffer[ i ].id );
}
xlog( d3, 4, "************************************************" );
}
else
{
// Fehler
fehler( d3, "Mandantennummer in Tabelle und in Aktennummer unterscheiden sich.", (int) treffer[ i ].id );
}
}
}
def fehler( D3Interface d3, String meldung, int id )
{
def meldung_db;
if ( meldung.length() > 250 )
{
meldung_db = meldung.substring( 0, 249 );
}
else
{
meldung_db = meldung;
}
if ( debug == 0 )
{
sql = "update " + zieltabelle + " set fehler = '" + meldung_db + "' where id = " + id;
d3.sql.execute( sql );
}
xlog( d3, 2, meldung );
}
def xlog( D3Interface d3, int loglevel, String logtext )
{
def logdatei = "d:\\d3\\apps\\" + zieltabelle + ".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;
}

View File

@@ -0,0 +1,586 @@
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");
def prg = "migration_akte.groovy";
def version = "0.1";
def 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;
// In welcher Tabelle soll nach den zu erstellenden Akten gesucht werden?
@Field zieltabelle = "mig_beratungsakten";
// Konfiguration der Aktenartkürzel
@Field dokuart_sammelakte = "ABESA";
@Field dokuart_hauptakte = "ABERB";
@Field dokuart_oberregisterakte = "ABERO";
@Field dokuart_registerakte = "ABERA";
// der hier konfigurierte Wert wird verwendet, wenn kein sonstiger Hauptaktenname gefunden wird.
@Field standard_hauptaktenname = "Beratungsakte";
// DDF 1 / ADM_Aktentyp aus der Aktenart ADM_Verwaltung Mandantenakte (AVMNT) - mit diesem Schlüssel werden die benötigten (Ober-)Register aus den Stammdaten in der Aktenart AVMNT ermittelt.
@Field aktenschluessel = "Beratungsakte";
/////////////////////////////////////////////////////////////////////////
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, "* Aktenart Sammelakte : " + dokuart_sammelakte );
xlog( d3, 4, "* Aktenart Hauptakte : " + dokuart_hauptakte );
xlog( d3, 4, "* Aktenart Oberregisterakte : " + dokuart_oberregisterakte );
xlog( d3, 4, "* Aktenart Registerakte : " + dokuart_registerakte );
xlog( d3, 4, "* Zieltabelle : " + zieltabelle );
xlog( d3, 4, "* Standard-Hauptaktenname : " + standard_hauptaktenname );
xlog( d3, 4, "* Aktenschluessel : " + aktenschluessel );
xlog( d3, 4, "************************************************" );
def sqlQuery = "select id,ddf1,ddf48,ddf10,ddf21,ddf22,ddf25,ddf37,ddf42,ddf60,ddf69 from " + zieltabelle + " where fehler ='Doppelte Aktennummer'";
treffer = d3.sql.executeAndGet( (String) sqlQuery );
xlog( d3, 4, " Es wurden " + treffer.size() + " Treffer gefunden." );
xlog( d3, 4, "************************************************" );
if ( treffer.size() > 0 )
{
for ( i = 0; i < treffer.size(); i++ )
{
// Prüfung, ob die Mandantnummer in der Aktennummer zu der Mandantnummer aus der Tabelle passt - andernfalls Fehler.
def mandantnr_aus_aktennr = treffer[ i ].ddf10.substring( 0, 5 );
//JFEL toString eingefügt, da der Vergleich sonst scheitert.
//if ( mandantnr_aus_aktennr == treffer[ i ].ddf1 )
if ( mandantnr_aus_aktennr == treffer[ i ].ddf1.toString() )
{
// Es wird eine neue Hauptakte erstellt
def newDocfield_1, newDocfield_2, newDocfield_10, newDocfield_13, newDocfield_21, newDocfield_22, newDocfield_25, newDocfield_37, newDocfield_42, newDocfield_60 = [ ], newDocfield_69 = [ ];
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Mandantennummer DDF1 : [" + treffer[ i ].ddf1 + "]" );
//JFEL toString eingefügt
//newDocfield_1 = treffer[ i ].ddf1;
newDocfield_1 = treffer[ i ].ddf1.toString();
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Aktennummer DDF10 : [" + treffer[ i ].ddf10 + "]" );
newDocfield_10 = treffer[ i ].ddf10;
if ( treffer[ i ].ddf21 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Aktenname DDF21 : [" + treffer[ i ].ddf21 + "]" );
newDocfield_21 = treffer[ i ].ddf21;
}
else
{
xlog( d3, 3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenname wurde nicht gefunden. Setze Standardbezeichnung '" + standard_hauptaktenname + "'." );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Aktenname DDF21 : <" + standard_hauptaktenname + ">" );
newDocfield_21 = standard_hauptaktenname;
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze physischer Aufbewahrungsort DDF22 : [" + treffer[ i ].ddf22 + "]" );
newDocfield_22 = treffer[ i ].ddf22;
if ( treffer[ i ].ddf25 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Geschaeftsfuehrer DDF25 : [" + treffer[ i ].ddf25 + "]" );
newDocfield_25 = treffer[ i ].ddf25;
}
else
{
def STATEMENT = "select dok_dat_feld_25 from firmen_spezifisch where kue_dokuart = 'AMAND' and dok_dat_feld_1 = '" + newDocfield_1 + "'";
def treffer_STATEMENT = d3.sql.executeAndGet( (String) STATEMENT );
if ( treffer_STATEMENT.size() > 0 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Geschaeftsfuehrer DDF25 aus M.-Akte : [" + treffer_STATEMENT[ 0 ].dok_dat_feld_25 + "]" );
newDocfield_25 = treffer_STATEMENT[ 0 ].dok_dat_feld_25;
}
else
{
xlog( d3, 3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Es konnte kein Wert für Geschaeftsfuehrer / DDF25 gefunden werden." );
}
}
if ( treffer[ i ].ddf37 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Auftragsverantwortlicher DDF37 : [" + treffer[ i ].ddf37 + "]" );
newDocfield_37 = treffer[ i ].ddf37;
}
else
{
def STATEMENT = "select dok_dat_feld_37 from firmen_spezifisch where kue_dokuart = 'AMAND' and dok_dat_feld_1 = '" + newDocfield_1 + "'";
def treffer_STATEMENT = d3.sql.executeAndGet( (String) STATEMENT );
if ( treffer_STATEMENT.size() > 0 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Auftragsverantwortlicher DDF37 aus M.-Akte: [" + treffer_STATEMENT[ 0 ].dok_dat_feld_37 + "]" );
newDocfield_37 = treffer_STATEMENT[ 0 ].dok_dat_feld_37;
}
else
{
xlog( d3, 3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Es konnte kein Wert für Auftragsverantwortlicher / DDF37 gefunden werden." );
}
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Briefkopf DDF42 : [" + treffer[ i ].ddf42 + "]" );
newDocfield_42 = treffer[ i ].ddf42;
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Unique-ID Migration DDF48 : [" + treffer[ i ].ddf48 + "]" );
newDocfield_48 = treffer[ i ].ddf48;
// Postempfänger
if ( treffer[ i ].ddf60 )
{
def splitted_str_array = treffer[ i ].ddf60.split( ';' );
for ( int j = 0; j < splitted_str_array.length; j++ )
{
def filler = " ";
if ( j >= 10 )
{
filler = "";
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Setze Postempfaenger DDF60 / " + filler + j + " : [" + splitted_str_array[ j ] + "]" );
newDocfield_60[ j ] = splitted_str_array[ j ];
}
}
// Berechtigter:
if ( treffer[ i ].ddf69 )
{
def splitted_str_array = treffer[ i ].ddf69.split( ';' );
for ( int j = 0; j < splitted_str_array.length; j++ )
{
def filler = " ";
if ( j >= 10 )
{
filler = "";
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Setze Berechtigter DDF69 / " + filler + j + " : [" + splitted_str_array[ j ] + "]" );
newDocfield_69[ j ] = splitted_str_array[ j ];
}
}
// Prüfung, ob zu dieser Hauptakte eine passende Sammelakte existiert
// Falls ja: Übernahme der Mandantenstammdaten der entsprechenden Akte
// Falls nein: Fehler in DB eintragen und Abbruch der Verarbeitung dieses Treffers
sqlQuery = "select doku_id, dok_dat_feld_1, dok_dat_feld_2, dok_dat_feld_13 from firmen_spezifisch where kue_dokuart = '" + dokuart_sammelakte + "' and dok_dat_feld_1 = '" + treffer[ i ].ddf1 + "'";
ergebnis = d3.sql.executeAndGet( (String) sqlQuery );
if ( ergebnis.size() > 0 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Mandantenname DDF2 : [" + ergebnis[ 0 ].dok_dat_feld_2 + "]" );
newDocfield_2 = ergebnis[ 0 ].dok_dat_feld_2;
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Mandantengruppennummer DDF13 : [" + ergebnis[ 0 ].dok_dat_feld_13 + "]" );
newDocfield_13 = ergebnis[ 0 ].dok_dat_feld_13;
// Akte mit Stammdaten und Infos aus der Tabelle "zieltabelle" erstellen
// Registerstruktur unterhalb ebenfalls erstellen
Document newDoc = d3.archive.newDocument();
newDoc.type = dokuart_hauptakte;
newDoc.status = Document.DocStatus.DOC_STAT_PROCESSING;
newDoc.editor = "dvelop";
newDoc.field[ 1 ] = newDocfield_1;
newDoc.field[ 2 ] = newDocfield_2;
newDoc.field[ 10 ] = newDocfield_10;
newDoc.field[ 13 ] = newDocfield_13;
newDoc.field[ 21 ] = newDocfield_21;
newDoc.field[ 22 ] = newDocfield_22;
newDoc.field[ 25 ] = newDocfield_25;
newDoc.field[ 37 ] = newDocfield_37;
newDoc.field[ 42 ] = newDocfield_42;
newDoc.field[ 48 ] = newDocfield_48;
for ( int i = 0; i < newDocfield_60.size(); i++ )
{
newDoc.field[ 60 ][ i + 1 ] = newDocfield_60[ i ];
}
for ( int i = 0; i < newDocfield_69.size(); i++ )
{
newDoc.field[ 69 ][ i + 1 ] = newDocfield_69[ i ];
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": =============================" );
//Pruefung ob die anzulegende Akte ggf. schon im System angelegt wurde
sqlQuery = "select doku_id from firmen_spezifisch where kue_dokuart = '" + dokuart_hauptakte + "' and dok_dat_feld_1 = '" + newDocfield_1 + "' AND dok_dat_feld_10 = '" + newDocfield_10 + "'";
ergebnis = d3.sql.executeAndGet( (String) sqlQuery );
if ( ergebnis.size() > 0 ) {
fehler( d3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage [" + newDoc.field[ 10 ] + "] nicht durchgefuehrt da die Akte bereits existiert, doku_id: " + ergebnis[ 0 ].doku_id, (int) treffer[ i ].id );
continue;
}
def aktenanlage_erfolgreich = true;
if ( debug == 0 )
{
try
{
newDoc = d3.archive.importDocument( newDoc );
}
catch ( D3Exception e )
{
fehler( d3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Akte [" + newDoc.field[ 10 ] + "] konnte nicht erzeugt werden: " + e.message, (int) treffer[ i ].id );
aktenanlage_erfolgreich = false;
}
if ( aktenanlage_erfolgreich )
{
// sichern der erzeugten Doku-ID
if ( debug == 0 )
{
sqlQuery = "update " + zieltabelle + " set doku_id = '" + newDoc.id + "' where id = " + treffer[ i ].id;
d3.sql.execute( sqlQuery );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage [" + newDoc.field[ 10 ] + "] erfolgreich, doku_id: [" + newDoc.id + "]" );
}
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Keine Aktenanlage fuer [" + newDoc.field[ 10 ] + "] (Debug-Modus eingeschaltet)." );
}
if ( aktenanlage_erfolgreich )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": =============================" );
//////////////////////////////////////////
// Ebene unterhalb der Hauptakte anlegen
// Dokumentart: Hauptakten-Oberregisterakte, darin alle in den Stammdaten angelegten Oberregister
sqlQuery = "select distinct dok_dat_feld_2 from firmen_spezifisch where kue_dokuart = 'AVMNT' and dok_dat_feld_1 = '" + aktenschluessel + "'";
def resultRows = d3.sql.executeAndGet( (String) sqlQuery );
if ( resultRows.size() > 0 )
{
resultRows.each
{
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": erstelle Oberregister-Akte: [" + it.dok_dat_feld_2 + "]" );
Document newDocOReg = d3.archive.newDocument();
newDocOReg.type = dokuart_oberregisterakte;
newDocOReg.status = Document.DocStatus.DOC_STAT_PROCESSING;
newDocOReg.editor = "dvelop";
newDocOReg.field[ 1 ] = newDocfield_1;
newDocOReg.field[ 2 ] = newDocfield_2;
newDocOReg.field[ 3 ] = it.dok_dat_feld_2; // Oberregister
newDocOReg.field[ 10 ] = newDocfield_10;
newDocOReg.field[ 13 ] = newDocfield_13;
newDocOReg.field[ 21 ] = newDocfield_21;
newDocOReg.field[ 25 ] = newDocfield_25;
newDocOReg.field[ 42 ] = newDocfield_42;
for ( int i = 0; i < newDocfield_69.size(); i++ )
{
newDocOReg.field[ 69 ][ i + 1 ] = newDocfield_69[ i ];
}
if ( debug == 0 )
{
try
{
newDocOReg = d3.archive.importDocument( newDocOReg );
}
catch ( D3Exception e )
{
xlog( d3, 2, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Akte [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "] konnte nicht erzeugt werden: " + e.message );
aktenanlage_erfolgreich = false;
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Keine Aktenanlage fuer [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "] (Debug-Modus eingeschaltet)." );
}
if ( ( aktenanlage_erfolgreich ) && ( debug == 0 ) )
{
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage erfolgreich, doku_id: [" + newDoc.id + "][" + newDocOReg.id + "]" );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage erfolgreich, doku_id: [" + newDoc.id + "][" + newDocOReg.id + "] Register: [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "]" );
}
}
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Weitere Akten werden wegen Fehler nicht angelegt." );
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": =============================" );
if ( aktenanlage_erfolgreich )
{
//////////////////////////////////////////
// Ebene unterhalb der Hauptakten-Oberregisterakte anlegen
// Dokumentart: Hauptakten-Registerakte, darin alle in den Stammdaten angelegten Register
sqlQuery = "select distinct dok_dat_feld_2, dok_dat_feld_3 from firmen_spezifisch where kue_dokuart = 'AVMNT' and dok_dat_feld_1 = '" + aktenschluessel + "' and dok_dat_feld_3 != ''";
def resultRows = d3.sql.executeAndGet( (String) sqlQuery );
if ( resultRows.size() > 0 )
{
resultRows.each
{
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": erstelle Register-Akte: [" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "]" );
Document newDocReg = d3.archive.newDocument();
newDocReg.type = dokuart_registerakte;
newDocReg.status = Document.DocStatus.DOC_STAT_PROCESSING;
newDocReg.editor = "dvelop";
newDocReg.field[ 1 ] = newDocfield_1;
newDocReg.field[ 2 ] = newDocfield_2;
newDocReg.field[ 3 ] = it.dok_dat_feld_2; // Oberregister
newDocReg.field[ 4 ] = it.dok_dat_feld_3; // Register
newDocReg.field[ 10 ] = newDocfield_10;
newDocReg.field[ 13 ] = newDocfield_13;
newDocReg.field[ 21 ] = newDocfield_21;
newDocReg.field[ 25 ] = newDocfield_25;
newDocReg.field[ 42 ] = newDocfield_42;
for ( int i = 0; i < newDocfield_69.size(); i++ )
{
newDocReg.field[ 69 ][ i + 1 ] = newDocfield_69[ i ];
}
if ( debug == 0 )
{
try
{
newDocReg = d3.archive.importDocument( newDocReg );
}
catch ( D3Exception e )
{
xlog( d3, 2, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Akte [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "] konnte nicht erzeugt werden: " + e.message );
aktenanlage_erfolgreich = false;
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Keine Aktenanlage fuer [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "] (Debug-Modus eingeschaltet)." );
}
if ( ( aktenanlage_erfolgreich ) && ( debug == 0 ) )
{
sqlQuery = "select doku_id from firmen_spezifisch where kue_dokuart = '" + dokuart_oberregisterakte + "' and dok_dat_feld_10 = '" + newDoc.field[ 10 ] + "' and dok_dat_feld_3 = '" + it.dok_dat_feld_2 + "'";
//xlog( d3, 3, sqlQuery );
e = d3.sql.executeAndGet( sqlQuery );
def oregdokuid;
if ( e.size() > 0 )
{
oregdokuid = e[0].doku_id;
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage erfolgreich, doku_id: [" + newDoc.id + "][" + oregdokuid + "][" + newDocReg.id + "] Register: [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "]" );
}
}
}
}
}
else
{
fehler( d3, "Es wurde keine passende Sammelakte gefunden. [" + treffer[ i ].ddf10 + "]", (int) treffer[ i ].id );
}
xlog( d3, 4, "************************************************" );
}
else
{
// Fehler
fehler( d3, "Mandantennummer in Tabelle und in Aktennummer unterscheiden sich.", (int) treffer[ i ].id );
}
}
}
def fehler( D3Interface d3, String meldung, int id )
{
def meldung_db;
if ( meldung.length() > 250 )
{
meldung_db = meldung.substring( 0, 249 );
}
else
{
meldung_db = meldung;
}
if ( debug == 0 )
{
sql = "update " + zieltabelle + " set fehler = '" + meldung_db + "' where id = " + id;
d3.sql.execute( sql );
}
xlog( d3, 2, meldung );
}
def xlog( D3Interface d3, int loglevel, String logtext )
{
def logdatei = "d:\\d3\\apps\\" + zieltabelle + ".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;
}

View File

@@ -0,0 +1,586 @@
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");
def prg = "migration_akte.groovy";
def version = "0.1";
def 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;
// In welcher Tabelle soll nach den zu erstellenden Akten gesucht werden?
@Field zieltabelle = "mig_beratungsakte";
// Konfiguration der Aktenartkürzel
@Field dokuart_sammelakte = "ABESA";
@Field dokuart_hauptakte = "ABERB";
@Field dokuart_oberregisterakte = "ABERO";
@Field dokuart_registerakte = "ABERA";
// der hier konfigurierte Wert wird verwendet, wenn kein sonstiger Hauptaktenname gefunden wird.
@Field standard_hauptaktenname = "Beratungsakte";
// DDF 1 / ADM_Aktentyp aus der Aktenart ADM_Verwaltung Mandantenakte (AVMNT) - mit diesem Schlüssel werden die benötigten (Ober-)Register aus den Stammdaten in der Aktenart AVMNT ermittelt.
@Field aktenschluessel = "Beratungsakte";
/////////////////////////////////////////////////////////////////////////
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, "* Aktenart Sammelakte : " + dokuart_sammelakte );
xlog( d3, 4, "* Aktenart Hauptakte : " + dokuart_hauptakte );
xlog( d3, 4, "* Aktenart Oberregisterakte : " + dokuart_oberregisterakte );
xlog( d3, 4, "* Aktenart Registerakte : " + dokuart_registerakte );
xlog( d3, 4, "* Zieltabelle : " + zieltabelle );
xlog( d3, 4, "* Standard-Hauptaktenname : " + standard_hauptaktenname );
xlog( d3, 4, "* Aktenschluessel : " + aktenschluessel );
xlog( d3, 4, "************************************************" );
def sqlQuery = "select top (100) id,ddf1,ddf48,ddf10,ddf21,ddf22,ddf25,ddf37,ddf42,ddf60,ddf69 from " + zieltabelle + " where fehler is null and doku_id is null and id < 7000 ";
treffer = d3.sql.executeAndGet( (String) sqlQuery );
xlog( d3, 4, " Es wurden " + treffer.size() + " Treffer gefunden." );
xlog( d3, 4, "************************************************" );
if ( treffer.size() > 0 )
{
for ( i = 0; i < treffer.size(); i++ )
{
// Prüfung, ob die Mandantnummer in der Aktennummer zu der Mandantnummer aus der Tabelle passt - andernfalls Fehler.
def mandantnr_aus_aktennr = treffer[ i ].ddf10.substring( 0, 5 );
//JFEL toString eingefügt, da der Vergleich sonst scheitert.
//if ( mandantnr_aus_aktennr == treffer[ i ].ddf1 )
if ( mandantnr_aus_aktennr == treffer[ i ].ddf1.toString() )
{
// Es wird eine neue Hauptakte erstellt
def newDocfield_1, newDocfield_2, newDocfield_10, newDocfield_13, newDocfield_21, newDocfield_22, newDocfield_25, newDocfield_37, newDocfield_42, newDocfield_60 = [ ], newDocfield_69 = [ ];
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Mandantennummer DDF1 : [" + treffer[ i ].ddf1 + "]" );
//JFEL toString eingefügt
//newDocfield_1 = treffer[ i ].ddf1;
newDocfield_1 = treffer[ i ].ddf1.toString();
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Aktennummer DDF10 : [" + treffer[ i ].ddf10 + "]" );
newDocfield_10 = treffer[ i ].ddf10;
if ( treffer[ i ].ddf21 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Aktenname DDF21 : [" + treffer[ i ].ddf21 + "]" );
newDocfield_21 = treffer[ i ].ddf21;
}
else
{
xlog( d3, 3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenname wurde nicht gefunden. Setze Standardbezeichnung '" + standard_hauptaktenname + "'." );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Aktenname DDF21 : <" + standard_hauptaktenname + ">" );
newDocfield_21 = standard_hauptaktenname;
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze physischer Aufbewahrungsort DDF22 : [" + treffer[ i ].ddf22 + "]" );
newDocfield_22 = treffer[ i ].ddf22;
if ( treffer[ i ].ddf25 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Geschaeftsfuehrer DDF25 : [" + treffer[ i ].ddf25 + "]" );
newDocfield_25 = treffer[ i ].ddf25;
}
else
{
def STATEMENT = "select dok_dat_feld_25 from firmen_spezifisch where kue_dokuart = 'AMAND' and dok_dat_feld_1 = '" + newDocfield_1 + "'";
def treffer_STATEMENT = d3.sql.executeAndGet( (String) STATEMENT );
if ( treffer_STATEMENT.size() > 0 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Geschaeftsfuehrer DDF25 aus M.-Akte : [" + treffer_STATEMENT[ 0 ].dok_dat_feld_25 + "]" );
newDocfield_25 = treffer_STATEMENT[ 0 ].dok_dat_feld_25;
}
else
{
xlog( d3, 3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Es konnte kein Wert für Geschaeftsfuehrer / DDF25 gefunden werden." );
}
}
if ( treffer[ i ].ddf37 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Auftragsverantwortlicher DDF37 : [" + treffer[ i ].ddf37 + "]" );
newDocfield_37 = treffer[ i ].ddf37;
}
else
{
def STATEMENT = "select dok_dat_feld_37 from firmen_spezifisch where kue_dokuart = 'AMAND' and dok_dat_feld_1 = '" + newDocfield_1 + "'";
def treffer_STATEMENT = d3.sql.executeAndGet( (String) STATEMENT );
if ( treffer_STATEMENT.size() > 0 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Auftragsverantwortlicher DDF37 aus M.-Akte: [" + treffer_STATEMENT[ 0 ].dok_dat_feld_37 + "]" );
newDocfield_37 = treffer_STATEMENT[ 0 ].dok_dat_feld_37;
}
else
{
xlog( d3, 3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Es konnte kein Wert für Auftragsverantwortlicher / DDF37 gefunden werden." );
}
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Briefkopf DDF42 : [" + treffer[ i ].ddf42 + "]" );
newDocfield_42 = treffer[ i ].ddf42;
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Unique-ID Migration DDF48 : [" + treffer[ i ].ddf48 + "]" );
newDocfield_48 = treffer[ i ].ddf48;
// Postempfänger
if ( treffer[ i ].ddf60 )
{
def splitted_str_array = treffer[ i ].ddf60.split( ';' );
for ( int j = 0; j < splitted_str_array.length; j++ )
{
def filler = " ";
if ( j >= 10 )
{
filler = "";
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Setze Postempfaenger DDF60 / " + filler + j + " : [" + splitted_str_array[ j ] + "]" );
newDocfield_60[ j ] = splitted_str_array[ j ];
}
}
// Berechtigter:
if ( treffer[ i ].ddf69 )
{
def splitted_str_array = treffer[ i ].ddf69.split( ';' );
for ( int j = 0; j < splitted_str_array.length; j++ )
{
def filler = " ";
if ( j >= 10 )
{
filler = "";
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Setze Berechtigter DDF69 / " + filler + j + " : [" + splitted_str_array[ j ] + "]" );
newDocfield_69[ j ] = splitted_str_array[ j ];
}
}
// Prüfung, ob zu dieser Hauptakte eine passende Sammelakte existiert
// Falls ja: Übernahme der Mandantenstammdaten der entsprechenden Akte
// Falls nein: Fehler in DB eintragen und Abbruch der Verarbeitung dieses Treffers
sqlQuery = "select doku_id, dok_dat_feld_1, dok_dat_feld_2, dok_dat_feld_13 from firmen_spezifisch where kue_dokuart = '" + dokuart_sammelakte + "' and dok_dat_feld_1 = '" + treffer[ i ].ddf1 + "'";
ergebnis = d3.sql.executeAndGet( (String) sqlQuery );
if ( ergebnis.size() > 0 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Mandantenname DDF2 : [" + ergebnis[ 0 ].dok_dat_feld_2 + "]" );
newDocfield_2 = ergebnis[ 0 ].dok_dat_feld_2;
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Mandantengruppennummer DDF13 : [" + ergebnis[ 0 ].dok_dat_feld_13 + "]" );
newDocfield_13 = ergebnis[ 0 ].dok_dat_feld_13;
// Akte mit Stammdaten und Infos aus der Tabelle "zieltabelle" erstellen
// Registerstruktur unterhalb ebenfalls erstellen
Document newDoc = d3.archive.newDocument();
newDoc.type = dokuart_hauptakte;
newDoc.status = Document.DocStatus.DOC_STAT_PROCESSING;
newDoc.editor = "dvelop";
newDoc.field[ 1 ] = newDocfield_1;
newDoc.field[ 2 ] = newDocfield_2;
newDoc.field[ 10 ] = newDocfield_10;
newDoc.field[ 13 ] = newDocfield_13;
newDoc.field[ 21 ] = newDocfield_21;
newDoc.field[ 22 ] = newDocfield_22;
newDoc.field[ 25 ] = newDocfield_25;
newDoc.field[ 37 ] = newDocfield_37;
newDoc.field[ 42 ] = newDocfield_42;
newDoc.field[ 48 ] = newDocfield_48;
for ( int i = 0; i < newDocfield_60.size(); i++ )
{
newDoc.field[ 60 ][ i + 1 ] = newDocfield_60[ i ];
}
for ( int i = 0; i < newDocfield_69.size(); i++ )
{
newDoc.field[ 69 ][ i + 1 ] = newDocfield_69[ i ];
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": =============================" );
//Pruefung ob die anzulegende Akte ggf. schon im System angelegt wurde
sqlQuery = "select doku_id from firmen_spezifisch where kue_dokuart = '" + dokuart_hauptakte + "' and dok_dat_feld_1 = '" + newDocfield_1 + "' AND dok_dat_feld_10 = '" + newDocfield_10 + "'";
ergebnis = d3.sql.executeAndGet( (String) sqlQuery );
if ( ergebnis.size() > 0 ) {
fehler( d3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage [" + newDoc.field[ 10 ] + "] nicht durchgefuehrt da die Akte bereits existiert, doku_id: " + ergebnis[ 0 ].doku_id, (int) treffer[ i ].id );
continue;
}
def aktenanlage_erfolgreich = true;
if ( debug == 0 )
{
try
{
newDoc = d3.archive.importDocument( newDoc );
}
catch ( D3Exception e )
{
fehler( d3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Akte [" + newDoc.field[ 10 ] + "] konnte nicht erzeugt werden: " + e.message, (int) treffer[ i ].id );
aktenanlage_erfolgreich = false;
}
if ( aktenanlage_erfolgreich )
{
// sichern der erzeugten Doku-ID
if ( debug == 0 )
{
sqlQuery = "update " + zieltabelle + " set doku_id = '" + newDoc.id + "' where id = " + treffer[ i ].id;
d3.sql.execute( sqlQuery );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage [" + newDoc.field[ 10 ] + "] erfolgreich, doku_id: [" + newDoc.id + "]" );
}
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Keine Aktenanlage fuer [" + newDoc.field[ 10 ] + "] (Debug-Modus eingeschaltet)." );
}
if ( aktenanlage_erfolgreich )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": =============================" );
//////////////////////////////////////////
// Ebene unterhalb der Hauptakte anlegen
// Dokumentart: Hauptakten-Oberregisterakte, darin alle in den Stammdaten angelegten Oberregister
sqlQuery = "select distinct dok_dat_feld_2 from firmen_spezifisch where kue_dokuart = 'AVMNT' and dok_dat_feld_1 = '" + aktenschluessel + "'";
def resultRows = d3.sql.executeAndGet( (String) sqlQuery );
if ( resultRows.size() > 0 )
{
resultRows.each
{
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": erstelle Oberregister-Akte: [" + it.dok_dat_feld_2 + "]" );
Document newDocOReg = d3.archive.newDocument();
newDocOReg.type = dokuart_oberregisterakte;
newDocOReg.status = Document.DocStatus.DOC_STAT_PROCESSING;
newDocOReg.editor = "dvelop";
newDocOReg.field[ 1 ] = newDocfield_1;
newDocOReg.field[ 2 ] = newDocfield_2;
newDocOReg.field[ 3 ] = it.dok_dat_feld_2; // Oberregister
newDocOReg.field[ 10 ] = newDocfield_10;
newDocOReg.field[ 13 ] = newDocfield_13;
newDocOReg.field[ 21 ] = newDocfield_21;
newDocOReg.field[ 25 ] = newDocfield_25;
newDocOReg.field[ 42 ] = newDocfield_42;
for ( int i = 0; i < newDocfield_69.size(); i++ )
{
newDocOReg.field[ 69 ][ i + 1 ] = newDocfield_69[ i ];
}
if ( debug == 0 )
{
try
{
newDocOReg = d3.archive.importDocument( newDocOReg );
}
catch ( D3Exception e )
{
xlog( d3, 2, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Akte [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "] konnte nicht erzeugt werden: " + e.message );
aktenanlage_erfolgreich = false;
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Keine Aktenanlage fuer [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "] (Debug-Modus eingeschaltet)." );
}
if ( ( aktenanlage_erfolgreich ) && ( debug == 0 ) )
{
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage erfolgreich, doku_id: [" + newDoc.id + "][" + newDocOReg.id + "]" );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage erfolgreich, doku_id: [" + newDoc.id + "][" + newDocOReg.id + "] Register: [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "]" );
}
}
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Weitere Akten werden wegen Fehler nicht angelegt." );
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": =============================" );
if ( aktenanlage_erfolgreich )
{
//////////////////////////////////////////
// Ebene unterhalb der Hauptakten-Oberregisterakte anlegen
// Dokumentart: Hauptakten-Registerakte, darin alle in den Stammdaten angelegten Register
sqlQuery = "select distinct dok_dat_feld_2, dok_dat_feld_3 from firmen_spezifisch where kue_dokuart = 'AVMNT' and dok_dat_feld_1 = '" + aktenschluessel + "' and dok_dat_feld_3 != ''";
def resultRows = d3.sql.executeAndGet( (String) sqlQuery );
if ( resultRows.size() > 0 )
{
resultRows.each
{
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": erstelle Register-Akte: [" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "]" );
Document newDocReg = d3.archive.newDocument();
newDocReg.type = dokuart_registerakte;
newDocReg.status = Document.DocStatus.DOC_STAT_PROCESSING;
newDocReg.editor = "dvelop";
newDocReg.field[ 1 ] = newDocfield_1;
newDocReg.field[ 2 ] = newDocfield_2;
newDocReg.field[ 3 ] = it.dok_dat_feld_2; // Oberregister
newDocReg.field[ 4 ] = it.dok_dat_feld_3; // Register
newDocReg.field[ 10 ] = newDocfield_10;
newDocReg.field[ 13 ] = newDocfield_13;
newDocReg.field[ 21 ] = newDocfield_21;
newDocReg.field[ 25 ] = newDocfield_25;
newDocReg.field[ 42 ] = newDocfield_42;
for ( int i = 0; i < newDocfield_69.size(); i++ )
{
newDocReg.field[ 69 ][ i + 1 ] = newDocfield_69[ i ];
}
if ( debug == 0 )
{
try
{
newDocReg = d3.archive.importDocument( newDocReg );
}
catch ( D3Exception e )
{
xlog( d3, 2, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Akte [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "] konnte nicht erzeugt werden: " + e.message );
aktenanlage_erfolgreich = false;
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Keine Aktenanlage fuer [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "] (Debug-Modus eingeschaltet)." );
}
if ( ( aktenanlage_erfolgreich ) && ( debug == 0 ) )
{
sqlQuery = "select doku_id from firmen_spezifisch where kue_dokuart = '" + dokuart_oberregisterakte + "' and dok_dat_feld_10 = '" + newDoc.field[ 10 ] + "' and dok_dat_feld_3 = '" + it.dok_dat_feld_2 + "'";
//xlog( d3, 3, sqlQuery );
e = d3.sql.executeAndGet( sqlQuery );
def oregdokuid;
if ( e.size() > 0 )
{
oregdokuid = e[0].doku_id;
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage erfolgreich, doku_id: [" + newDoc.id + "][" + oregdokuid + "][" + newDocReg.id + "] Register: [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "]" );
}
}
}
}
}
else
{
fehler( d3, "Es wurde keine passende Sammelakte gefunden. [" + treffer[ i ].ddf10 + "]", (int) treffer[ i ].id );
}
xlog( d3, 4, "************************************************" );
}
else
{
// Fehler
fehler( d3, "Mandantennummer in Tabelle und in Aktennummer unterscheiden sich.", (int) treffer[ i ].id );
}
}
}
def fehler( D3Interface d3, String meldung, int id )
{
def meldung_db;
if ( meldung.length() > 250 )
{
meldung_db = meldung.substring( 0, 249 );
}
else
{
meldung_db = meldung;
}
if ( debug == 0 )
{
sql = "update " + zieltabelle + " set fehler = '" + meldung_db + "' where id = " + id;
d3.sql.execute( sql );
}
xlog( d3, 2, meldung );
}
def xlog( D3Interface d3, int loglevel, String logtext )
{
def logdatei = "d:\\d3\\apps\\" + zieltabelle + "_1.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;
}

View File

@@ -0,0 +1,586 @@
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");
def prg = "migration_akte.groovy";
def version = "0.1";
def 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;
// In welcher Tabelle soll nach den zu erstellenden Akten gesucht werden?
@Field zieltabelle = "mig_beratungsakte";
// Konfiguration der Aktenartkürzel
@Field dokuart_sammelakte = "ABESA";
@Field dokuart_hauptakte = "ABERB";
@Field dokuart_oberregisterakte = "ABERO";
@Field dokuart_registerakte = "ABERA";
// der hier konfigurierte Wert wird verwendet, wenn kein sonstiger Hauptaktenname gefunden wird.
@Field standard_hauptaktenname = "Beratungsakte";
// DDF 1 / ADM_Aktentyp aus der Aktenart ADM_Verwaltung Mandantenakte (AVMNT) - mit diesem Schlüssel werden die benötigten (Ober-)Register aus den Stammdaten in der Aktenart AVMNT ermittelt.
@Field aktenschluessel = "Beratungsakte";
/////////////////////////////////////////////////////////////////////////
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, "* Aktenart Sammelakte : " + dokuart_sammelakte );
xlog( d3, 4, "* Aktenart Hauptakte : " + dokuart_hauptakte );
xlog( d3, 4, "* Aktenart Oberregisterakte : " + dokuart_oberregisterakte );
xlog( d3, 4, "* Aktenart Registerakte : " + dokuart_registerakte );
xlog( d3, 4, "* Zieltabelle : " + zieltabelle );
xlog( d3, 4, "* Standard-Hauptaktenname : " + standard_hauptaktenname );
xlog( d3, 4, "* Aktenschluessel : " + aktenschluessel );
xlog( d3, 4, "************************************************" );
def sqlQuery = "select top (100) id,ddf1,ddf48,ddf10,ddf21,ddf22,ddf25,ddf37,ddf42,ddf60,ddf69 from " + zieltabelle + " where fehler is null and doku_id is null and id >= 7000 and id < 14000 ";
treffer = d3.sql.executeAndGet( (String) sqlQuery );
xlog( d3, 4, " Es wurden " + treffer.size() + " Treffer gefunden." );
xlog( d3, 4, "************************************************" );
if ( treffer.size() > 0 )
{
for ( i = 0; i < treffer.size(); i++ )
{
// Prüfung, ob die Mandantnummer in der Aktennummer zu der Mandantnummer aus der Tabelle passt - andernfalls Fehler.
def mandantnr_aus_aktennr = treffer[ i ].ddf10.substring( 0, 5 );
//JFEL toString eingefügt, da der Vergleich sonst scheitert.
//if ( mandantnr_aus_aktennr == treffer[ i ].ddf1 )
if ( mandantnr_aus_aktennr == treffer[ i ].ddf1.toString() )
{
// Es wird eine neue Hauptakte erstellt
def newDocfield_1, newDocfield_2, newDocfield_10, newDocfield_13, newDocfield_21, newDocfield_22, newDocfield_25, newDocfield_37, newDocfield_42, newDocfield_60 = [ ], newDocfield_69 = [ ];
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Mandantennummer DDF1 : [" + treffer[ i ].ddf1 + "]" );
//JFEL toString eingefügt
//newDocfield_1 = treffer[ i ].ddf1;
newDocfield_1 = treffer[ i ].ddf1.toString();
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Aktennummer DDF10 : [" + treffer[ i ].ddf10 + "]" );
newDocfield_10 = treffer[ i ].ddf10;
if ( treffer[ i ].ddf21 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Aktenname DDF21 : [" + treffer[ i ].ddf21 + "]" );
newDocfield_21 = treffer[ i ].ddf21;
}
else
{
xlog( d3, 3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenname wurde nicht gefunden. Setze Standardbezeichnung '" + standard_hauptaktenname + "'." );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Aktenname DDF21 : <" + standard_hauptaktenname + ">" );
newDocfield_21 = standard_hauptaktenname;
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze physischer Aufbewahrungsort DDF22 : [" + treffer[ i ].ddf22 + "]" );
newDocfield_22 = treffer[ i ].ddf22;
if ( treffer[ i ].ddf25 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Geschaeftsfuehrer DDF25 : [" + treffer[ i ].ddf25 + "]" );
newDocfield_25 = treffer[ i ].ddf25;
}
else
{
def STATEMENT = "select dok_dat_feld_25 from firmen_spezifisch where kue_dokuart = 'AMAND' and dok_dat_feld_1 = '" + newDocfield_1 + "'";
def treffer_STATEMENT = d3.sql.executeAndGet( (String) STATEMENT );
if ( treffer_STATEMENT.size() > 0 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Geschaeftsfuehrer DDF25 aus M.-Akte : [" + treffer_STATEMENT[ 0 ].dok_dat_feld_25 + "]" );
newDocfield_25 = treffer_STATEMENT[ 0 ].dok_dat_feld_25;
}
else
{
xlog( d3, 3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Es konnte kein Wert für Geschaeftsfuehrer / DDF25 gefunden werden." );
}
}
if ( treffer[ i ].ddf37 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Auftragsverantwortlicher DDF37 : [" + treffer[ i ].ddf37 + "]" );
newDocfield_37 = treffer[ i ].ddf37;
}
else
{
def STATEMENT = "select dok_dat_feld_37 from firmen_spezifisch where kue_dokuart = 'AMAND' and dok_dat_feld_1 = '" + newDocfield_1 + "'";
def treffer_STATEMENT = d3.sql.executeAndGet( (String) STATEMENT );
if ( treffer_STATEMENT.size() > 0 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Auftragsverantwortlicher DDF37 aus M.-Akte: [" + treffer_STATEMENT[ 0 ].dok_dat_feld_37 + "]" );
newDocfield_37 = treffer_STATEMENT[ 0 ].dok_dat_feld_37;
}
else
{
xlog( d3, 3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Es konnte kein Wert für Auftragsverantwortlicher / DDF37 gefunden werden." );
}
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Briefkopf DDF42 : [" + treffer[ i ].ddf42 + "]" );
newDocfield_42 = treffer[ i ].ddf42;
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Unique-ID Migration DDF48 : [" + treffer[ i ].ddf48 + "]" );
newDocfield_48 = treffer[ i ].ddf48;
// Postempfänger
if ( treffer[ i ].ddf60 )
{
def splitted_str_array = treffer[ i ].ddf60.split( ';' );
for ( int j = 0; j < splitted_str_array.length; j++ )
{
def filler = " ";
if ( j >= 10 )
{
filler = "";
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Setze Postempfaenger DDF60 / " + filler + j + " : [" + splitted_str_array[ j ] + "]" );
newDocfield_60[ j ] = splitted_str_array[ j ];
}
}
// Berechtigter:
if ( treffer[ i ].ddf69 )
{
def splitted_str_array = treffer[ i ].ddf69.split( ';' );
for ( int j = 0; j < splitted_str_array.length; j++ )
{
def filler = " ";
if ( j >= 10 )
{
filler = "";
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Setze Berechtigter DDF69 / " + filler + j + " : [" + splitted_str_array[ j ] + "]" );
newDocfield_69[ j ] = splitted_str_array[ j ];
}
}
// Prüfung, ob zu dieser Hauptakte eine passende Sammelakte existiert
// Falls ja: Übernahme der Mandantenstammdaten der entsprechenden Akte
// Falls nein: Fehler in DB eintragen und Abbruch der Verarbeitung dieses Treffers
sqlQuery = "select doku_id, dok_dat_feld_1, dok_dat_feld_2, dok_dat_feld_13 from firmen_spezifisch where kue_dokuart = '" + dokuart_sammelakte + "' and dok_dat_feld_1 = '" + treffer[ i ].ddf1 + "'";
ergebnis = d3.sql.executeAndGet( (String) sqlQuery );
if ( ergebnis.size() > 0 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Mandantenname DDF2 : [" + ergebnis[ 0 ].dok_dat_feld_2 + "]" );
newDocfield_2 = ergebnis[ 0 ].dok_dat_feld_2;
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Mandantengruppennummer DDF13 : [" + ergebnis[ 0 ].dok_dat_feld_13 + "]" );
newDocfield_13 = ergebnis[ 0 ].dok_dat_feld_13;
// Akte mit Stammdaten und Infos aus der Tabelle "zieltabelle" erstellen
// Registerstruktur unterhalb ebenfalls erstellen
Document newDoc = d3.archive.newDocument();
newDoc.type = dokuart_hauptakte;
newDoc.status = Document.DocStatus.DOC_STAT_PROCESSING;
newDoc.editor = "dvelop";
newDoc.field[ 1 ] = newDocfield_1;
newDoc.field[ 2 ] = newDocfield_2;
newDoc.field[ 10 ] = newDocfield_10;
newDoc.field[ 13 ] = newDocfield_13;
newDoc.field[ 21 ] = newDocfield_21;
newDoc.field[ 22 ] = newDocfield_22;
newDoc.field[ 25 ] = newDocfield_25;
newDoc.field[ 37 ] = newDocfield_37;
newDoc.field[ 42 ] = newDocfield_42;
newDoc.field[ 48 ] = newDocfield_48;
for ( int i = 0; i < newDocfield_60.size(); i++ )
{
newDoc.field[ 60 ][ i + 1 ] = newDocfield_60[ i ];
}
for ( int i = 0; i < newDocfield_69.size(); i++ )
{
newDoc.field[ 69 ][ i + 1 ] = newDocfield_69[ i ];
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": =============================" );
//Pruefung ob die anzulegende Akte ggf. schon im System angelegt wurde
sqlQuery = "select doku_id from firmen_spezifisch where kue_dokuart = '" + dokuart_hauptakte + "' and dok_dat_feld_1 = '" + newDocfield_1 + "' AND dok_dat_feld_10 = '" + newDocfield_10 + "'";
ergebnis = d3.sql.executeAndGet( (String) sqlQuery );
if ( ergebnis.size() > 0 ) {
fehler( d3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage [" + newDoc.field[ 10 ] + "] nicht durchgefuehrt da die Akte bereits existiert, doku_id: " + ergebnis[ 0 ].doku_id, (int) treffer[ i ].id );
continue;
}
def aktenanlage_erfolgreich = true;
if ( debug == 0 )
{
try
{
newDoc = d3.archive.importDocument( newDoc );
}
catch ( D3Exception e )
{
fehler( d3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Akte [" + newDoc.field[ 10 ] + "] konnte nicht erzeugt werden: " + e.message, (int) treffer[ i ].id );
aktenanlage_erfolgreich = false;
}
if ( aktenanlage_erfolgreich )
{
// sichern der erzeugten Doku-ID
if ( debug == 0 )
{
sqlQuery = "update " + zieltabelle + " set doku_id = '" + newDoc.id + "' where id = " + treffer[ i ].id;
d3.sql.execute( sqlQuery );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage [" + newDoc.field[ 10 ] + "] erfolgreich, doku_id: [" + newDoc.id + "]" );
}
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Keine Aktenanlage fuer [" + newDoc.field[ 10 ] + "] (Debug-Modus eingeschaltet)." );
}
if ( aktenanlage_erfolgreich )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": =============================" );
//////////////////////////////////////////
// Ebene unterhalb der Hauptakte anlegen
// Dokumentart: Hauptakten-Oberregisterakte, darin alle in den Stammdaten angelegten Oberregister
sqlQuery = "select distinct dok_dat_feld_2 from firmen_spezifisch where kue_dokuart = 'AVMNT' and dok_dat_feld_1 = '" + aktenschluessel + "'";
def resultRows = d3.sql.executeAndGet( (String) sqlQuery );
if ( resultRows.size() > 0 )
{
resultRows.each
{
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": erstelle Oberregister-Akte: [" + it.dok_dat_feld_2 + "]" );
Document newDocOReg = d3.archive.newDocument();
newDocOReg.type = dokuart_oberregisterakte;
newDocOReg.status = Document.DocStatus.DOC_STAT_PROCESSING;
newDocOReg.editor = "dvelop";
newDocOReg.field[ 1 ] = newDocfield_1;
newDocOReg.field[ 2 ] = newDocfield_2;
newDocOReg.field[ 3 ] = it.dok_dat_feld_2; // Oberregister
newDocOReg.field[ 10 ] = newDocfield_10;
newDocOReg.field[ 13 ] = newDocfield_13;
newDocOReg.field[ 21 ] = newDocfield_21;
newDocOReg.field[ 25 ] = newDocfield_25;
newDocOReg.field[ 42 ] = newDocfield_42;
for ( int i = 0; i < newDocfield_69.size(); i++ )
{
newDocOReg.field[ 69 ][ i + 1 ] = newDocfield_69[ i ];
}
if ( debug == 0 )
{
try
{
newDocOReg = d3.archive.importDocument( newDocOReg );
}
catch ( D3Exception e )
{
xlog( d3, 2, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Akte [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "] konnte nicht erzeugt werden: " + e.message );
aktenanlage_erfolgreich = false;
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Keine Aktenanlage fuer [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "] (Debug-Modus eingeschaltet)." );
}
if ( ( aktenanlage_erfolgreich ) && ( debug == 0 ) )
{
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage erfolgreich, doku_id: [" + newDoc.id + "][" + newDocOReg.id + "]" );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage erfolgreich, doku_id: [" + newDoc.id + "][" + newDocOReg.id + "] Register: [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "]" );
}
}
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Weitere Akten werden wegen Fehler nicht angelegt." );
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": =============================" );
if ( aktenanlage_erfolgreich )
{
//////////////////////////////////////////
// Ebene unterhalb der Hauptakten-Oberregisterakte anlegen
// Dokumentart: Hauptakten-Registerakte, darin alle in den Stammdaten angelegten Register
sqlQuery = "select distinct dok_dat_feld_2, dok_dat_feld_3 from firmen_spezifisch where kue_dokuart = 'AVMNT' and dok_dat_feld_1 = '" + aktenschluessel + "' and dok_dat_feld_3 != ''";
def resultRows = d3.sql.executeAndGet( (String) sqlQuery );
if ( resultRows.size() > 0 )
{
resultRows.each
{
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": erstelle Register-Akte: [" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "]" );
Document newDocReg = d3.archive.newDocument();
newDocReg.type = dokuart_registerakte;
newDocReg.status = Document.DocStatus.DOC_STAT_PROCESSING;
newDocReg.editor = "dvelop";
newDocReg.field[ 1 ] = newDocfield_1;
newDocReg.field[ 2 ] = newDocfield_2;
newDocReg.field[ 3 ] = it.dok_dat_feld_2; // Oberregister
newDocReg.field[ 4 ] = it.dok_dat_feld_3; // Register
newDocReg.field[ 10 ] = newDocfield_10;
newDocReg.field[ 13 ] = newDocfield_13;
newDocReg.field[ 21 ] = newDocfield_21;
newDocReg.field[ 25 ] = newDocfield_25;
newDocReg.field[ 42 ] = newDocfield_42;
for ( int i = 0; i < newDocfield_69.size(); i++ )
{
newDocReg.field[ 69 ][ i + 1 ] = newDocfield_69[ i ];
}
if ( debug == 0 )
{
try
{
newDocReg = d3.archive.importDocument( newDocReg );
}
catch ( D3Exception e )
{
xlog( d3, 2, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Akte [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "] konnte nicht erzeugt werden: " + e.message );
aktenanlage_erfolgreich = false;
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Keine Aktenanlage fuer [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "] (Debug-Modus eingeschaltet)." );
}
if ( ( aktenanlage_erfolgreich ) && ( debug == 0 ) )
{
sqlQuery = "select doku_id from firmen_spezifisch where kue_dokuart = '" + dokuart_oberregisterakte + "' and dok_dat_feld_10 = '" + newDoc.field[ 10 ] + "' and dok_dat_feld_3 = '" + it.dok_dat_feld_2 + "'";
//xlog( d3, 3, sqlQuery );
e = d3.sql.executeAndGet( sqlQuery );
def oregdokuid;
if ( e.size() > 0 )
{
oregdokuid = e[0].doku_id;
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage erfolgreich, doku_id: [" + newDoc.id + "][" + oregdokuid + "][" + newDocReg.id + "] Register: [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "]" );
}
}
}
}
}
else
{
fehler( d3, "Es wurde keine passende Sammelakte gefunden. [" + treffer[ i ].ddf10 + "]", (int) treffer[ i ].id );
}
xlog( d3, 4, "************************************************" );
}
else
{
// Fehler
fehler( d3, "Mandantennummer in Tabelle und in Aktennummer unterscheiden sich.", (int) treffer[ i ].id );
}
}
}
def fehler( D3Interface d3, String meldung, int id )
{
def meldung_db;
if ( meldung.length() > 250 )
{
meldung_db = meldung.substring( 0, 249 );
}
else
{
meldung_db = meldung;
}
if ( debug == 0 )
{
sql = "update " + zieltabelle + " set fehler = '" + meldung_db + "' where id = " + id;
d3.sql.execute( sql );
}
xlog( d3, 2, meldung );
}
def xlog( D3Interface d3, int loglevel, String logtext )
{
def logdatei = "d:\\d3\\apps\\" + zieltabelle + "_2.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;
}

View File

@@ -0,0 +1,586 @@
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");
def prg = "migration_akte.groovy";
def version = "0.1";
def 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;
// In welcher Tabelle soll nach den zu erstellenden Akten gesucht werden?
@Field zieltabelle = "mig_beratungsakte";
// Konfiguration der Aktenartkürzel
@Field dokuart_sammelakte = "ABESA";
@Field dokuart_hauptakte = "ABERB";
@Field dokuart_oberregisterakte = "ABERO";
@Field dokuart_registerakte = "ABERA";
// der hier konfigurierte Wert wird verwendet, wenn kein sonstiger Hauptaktenname gefunden wird.
@Field standard_hauptaktenname = "Beratungsakte";
// DDF 1 / ADM_Aktentyp aus der Aktenart ADM_Verwaltung Mandantenakte (AVMNT) - mit diesem Schlüssel werden die benötigten (Ober-)Register aus den Stammdaten in der Aktenart AVMNT ermittelt.
@Field aktenschluessel = "Beratungsakte";
/////////////////////////////////////////////////////////////////////////
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, "* Aktenart Sammelakte : " + dokuart_sammelakte );
xlog( d3, 4, "* Aktenart Hauptakte : " + dokuart_hauptakte );
xlog( d3, 4, "* Aktenart Oberregisterakte : " + dokuart_oberregisterakte );
xlog( d3, 4, "* Aktenart Registerakte : " + dokuart_registerakte );
xlog( d3, 4, "* Zieltabelle : " + zieltabelle );
xlog( d3, 4, "* Standard-Hauptaktenname : " + standard_hauptaktenname );
xlog( d3, 4, "* Aktenschluessel : " + aktenschluessel );
xlog( d3, 4, "************************************************" );
def sqlQuery = "select top (100) id,ddf1,ddf48,ddf10,ddf21,ddf22,ddf25,ddf37,ddf42,ddf60,ddf69 from " + zieltabelle + " where fehler is null and doku_id is null and id >= 14000 ";
treffer = d3.sql.executeAndGet( (String) sqlQuery );
xlog( d3, 4, " Es wurden " + treffer.size() + " Treffer gefunden." );
xlog( d3, 4, "************************************************" );
if ( treffer.size() > 0 )
{
for ( i = 0; i < treffer.size(); i++ )
{
// Prüfung, ob die Mandantnummer in der Aktennummer zu der Mandantnummer aus der Tabelle passt - andernfalls Fehler.
def mandantnr_aus_aktennr = treffer[ i ].ddf10.substring( 0, 5 );
//JFEL toString eingefügt, da der Vergleich sonst scheitert.
//if ( mandantnr_aus_aktennr == treffer[ i ].ddf1 )
if ( mandantnr_aus_aktennr == treffer[ i ].ddf1.toString() )
{
// Es wird eine neue Hauptakte erstellt
def newDocfield_1, newDocfield_2, newDocfield_10, newDocfield_13, newDocfield_21, newDocfield_22, newDocfield_25, newDocfield_37, newDocfield_42, newDocfield_60 = [ ], newDocfield_69 = [ ];
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Mandantennummer DDF1 : [" + treffer[ i ].ddf1 + "]" );
//JFEL toString eingefügt
//newDocfield_1 = treffer[ i ].ddf1;
newDocfield_1 = treffer[ i ].ddf1.toString();
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Aktennummer DDF10 : [" + treffer[ i ].ddf10 + "]" );
newDocfield_10 = treffer[ i ].ddf10;
if ( treffer[ i ].ddf21 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Aktenname DDF21 : [" + treffer[ i ].ddf21 + "]" );
newDocfield_21 = treffer[ i ].ddf21;
}
else
{
xlog( d3, 3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenname wurde nicht gefunden. Setze Standardbezeichnung '" + standard_hauptaktenname + "'." );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Aktenname DDF21 : <" + standard_hauptaktenname + ">" );
newDocfield_21 = standard_hauptaktenname;
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze physischer Aufbewahrungsort DDF22 : [" + treffer[ i ].ddf22 + "]" );
newDocfield_22 = treffer[ i ].ddf22;
if ( treffer[ i ].ddf25 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Geschaeftsfuehrer DDF25 : [" + treffer[ i ].ddf25 + "]" );
newDocfield_25 = treffer[ i ].ddf25;
}
else
{
def STATEMENT = "select dok_dat_feld_25 from firmen_spezifisch where kue_dokuart = 'AMAND' and dok_dat_feld_1 = '" + newDocfield_1 + "'";
def treffer_STATEMENT = d3.sql.executeAndGet( (String) STATEMENT );
if ( treffer_STATEMENT.size() > 0 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Geschaeftsfuehrer DDF25 aus M.-Akte : [" + treffer_STATEMENT[ 0 ].dok_dat_feld_25 + "]" );
newDocfield_25 = treffer_STATEMENT[ 0 ].dok_dat_feld_25;
}
else
{
xlog( d3, 3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Es konnte kein Wert für Geschaeftsfuehrer / DDF25 gefunden werden." );
}
}
if ( treffer[ i ].ddf37 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Auftragsverantwortlicher DDF37 : [" + treffer[ i ].ddf37 + "]" );
newDocfield_37 = treffer[ i ].ddf37;
}
else
{
def STATEMENT = "select dok_dat_feld_37 from firmen_spezifisch where kue_dokuart = 'AMAND' and dok_dat_feld_1 = '" + newDocfield_1 + "'";
def treffer_STATEMENT = d3.sql.executeAndGet( (String) STATEMENT );
if ( treffer_STATEMENT.size() > 0 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Auftragsverantwortlicher DDF37 aus M.-Akte: [" + treffer_STATEMENT[ 0 ].dok_dat_feld_37 + "]" );
newDocfield_37 = treffer_STATEMENT[ 0 ].dok_dat_feld_37;
}
else
{
xlog( d3, 3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Es konnte kein Wert für Auftragsverantwortlicher / DDF37 gefunden werden." );
}
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Briefkopf DDF42 : [" + treffer[ i ].ddf42 + "]" );
newDocfield_42 = treffer[ i ].ddf42;
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Unique-ID Migration DDF48 : [" + treffer[ i ].ddf48 + "]" );
newDocfield_48 = treffer[ i ].ddf48;
// Postempfänger
if ( treffer[ i ].ddf60 )
{
def splitted_str_array = treffer[ i ].ddf60.split( ';' );
for ( int j = 0; j < splitted_str_array.length; j++ )
{
def filler = " ";
if ( j >= 10 )
{
filler = "";
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Setze Postempfaenger DDF60 / " + filler + j + " : [" + splitted_str_array[ j ] + "]" );
newDocfield_60[ j ] = splitted_str_array[ j ];
}
}
// Berechtigter:
if ( treffer[ i ].ddf69 )
{
def splitted_str_array = treffer[ i ].ddf69.split( ';' );
for ( int j = 0; j < splitted_str_array.length; j++ )
{
def filler = " ";
if ( j >= 10 )
{
filler = "";
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Setze Berechtigter DDF69 / " + filler + j + " : [" + splitted_str_array[ j ] + "]" );
newDocfield_69[ j ] = splitted_str_array[ j ];
}
}
// Prüfung, ob zu dieser Hauptakte eine passende Sammelakte existiert
// Falls ja: Übernahme der Mandantenstammdaten der entsprechenden Akte
// Falls nein: Fehler in DB eintragen und Abbruch der Verarbeitung dieses Treffers
sqlQuery = "select doku_id, dok_dat_feld_1, dok_dat_feld_2, dok_dat_feld_13 from firmen_spezifisch where kue_dokuart = '" + dokuart_sammelakte + "' and dok_dat_feld_1 = '" + treffer[ i ].ddf1 + "'";
ergebnis = d3.sql.executeAndGet( (String) sqlQuery );
if ( ergebnis.size() > 0 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Mandantenname DDF2 : [" + ergebnis[ 0 ].dok_dat_feld_2 + "]" );
newDocfield_2 = ergebnis[ 0 ].dok_dat_feld_2;
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Mandantengruppennummer DDF13 : [" + ergebnis[ 0 ].dok_dat_feld_13 + "]" );
newDocfield_13 = ergebnis[ 0 ].dok_dat_feld_13;
// Akte mit Stammdaten und Infos aus der Tabelle "zieltabelle" erstellen
// Registerstruktur unterhalb ebenfalls erstellen
Document newDoc = d3.archive.newDocument();
newDoc.type = dokuart_hauptakte;
newDoc.status = Document.DocStatus.DOC_STAT_PROCESSING;
newDoc.editor = "dvelop";
newDoc.field[ 1 ] = newDocfield_1;
newDoc.field[ 2 ] = newDocfield_2;
newDoc.field[ 10 ] = newDocfield_10;
newDoc.field[ 13 ] = newDocfield_13;
newDoc.field[ 21 ] = newDocfield_21;
newDoc.field[ 22 ] = newDocfield_22;
newDoc.field[ 25 ] = newDocfield_25;
newDoc.field[ 37 ] = newDocfield_37;
newDoc.field[ 42 ] = newDocfield_42;
newDoc.field[ 48 ] = newDocfield_48;
for ( int i = 0; i < newDocfield_60.size(); i++ )
{
newDoc.field[ 60 ][ i + 1 ] = newDocfield_60[ i ];
}
for ( int i = 0; i < newDocfield_69.size(); i++ )
{
newDoc.field[ 69 ][ i + 1 ] = newDocfield_69[ i ];
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": =============================" );
//Pruefung ob die anzulegende Akte ggf. schon im System angelegt wurde
sqlQuery = "select doku_id from firmen_spezifisch where kue_dokuart = '" + dokuart_hauptakte + "' and dok_dat_feld_1 = '" + newDocfield_1 + "' AND dok_dat_feld_10 = '" + newDocfield_10 + "'";
ergebnis = d3.sql.executeAndGet( (String) sqlQuery );
if ( ergebnis.size() > 0 ) {
fehler( d3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage [" + newDoc.field[ 10 ] + "] nicht durchgefuehrt da die Akte bereits existiert, doku_id: " + ergebnis[ 0 ].doku_id, (int) treffer[ i ].id );
continue;
}
def aktenanlage_erfolgreich = true;
if ( debug == 0 )
{
try
{
newDoc = d3.archive.importDocument( newDoc );
}
catch ( D3Exception e )
{
fehler( d3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Akte [" + newDoc.field[ 10 ] + "] konnte nicht erzeugt werden: " + e.message, (int) treffer[ i ].id );
aktenanlage_erfolgreich = false;
}
if ( aktenanlage_erfolgreich )
{
// sichern der erzeugten Doku-ID
if ( debug == 0 )
{
sqlQuery = "update " + zieltabelle + " set doku_id = '" + newDoc.id + "' where id = " + treffer[ i ].id;
d3.sql.execute( sqlQuery );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage [" + newDoc.field[ 10 ] + "] erfolgreich, doku_id: [" + newDoc.id + "]" );
}
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Keine Aktenanlage fuer [" + newDoc.field[ 10 ] + "] (Debug-Modus eingeschaltet)." );
}
if ( aktenanlage_erfolgreich )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": =============================" );
//////////////////////////////////////////
// Ebene unterhalb der Hauptakte anlegen
// Dokumentart: Hauptakten-Oberregisterakte, darin alle in den Stammdaten angelegten Oberregister
sqlQuery = "select distinct dok_dat_feld_2 from firmen_spezifisch where kue_dokuart = 'AVMNT' and dok_dat_feld_1 = '" + aktenschluessel + "'";
def resultRows = d3.sql.executeAndGet( (String) sqlQuery );
if ( resultRows.size() > 0 )
{
resultRows.each
{
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": erstelle Oberregister-Akte: [" + it.dok_dat_feld_2 + "]" );
Document newDocOReg = d3.archive.newDocument();
newDocOReg.type = dokuart_oberregisterakte;
newDocOReg.status = Document.DocStatus.DOC_STAT_PROCESSING;
newDocOReg.editor = "dvelop";
newDocOReg.field[ 1 ] = newDocfield_1;
newDocOReg.field[ 2 ] = newDocfield_2;
newDocOReg.field[ 3 ] = it.dok_dat_feld_2; // Oberregister
newDocOReg.field[ 10 ] = newDocfield_10;
newDocOReg.field[ 13 ] = newDocfield_13;
newDocOReg.field[ 21 ] = newDocfield_21;
newDocOReg.field[ 25 ] = newDocfield_25;
newDocOReg.field[ 42 ] = newDocfield_42;
for ( int i = 0; i < newDocfield_69.size(); i++ )
{
newDocOReg.field[ 69 ][ i + 1 ] = newDocfield_69[ i ];
}
if ( debug == 0 )
{
try
{
newDocOReg = d3.archive.importDocument( newDocOReg );
}
catch ( D3Exception e )
{
xlog( d3, 2, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Akte [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "] konnte nicht erzeugt werden: " + e.message );
aktenanlage_erfolgreich = false;
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Keine Aktenanlage fuer [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "] (Debug-Modus eingeschaltet)." );
}
if ( ( aktenanlage_erfolgreich ) && ( debug == 0 ) )
{
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage erfolgreich, doku_id: [" + newDoc.id + "][" + newDocOReg.id + "]" );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage erfolgreich, doku_id: [" + newDoc.id + "][" + newDocOReg.id + "] Register: [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "]" );
}
}
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Weitere Akten werden wegen Fehler nicht angelegt." );
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": =============================" );
if ( aktenanlage_erfolgreich )
{
//////////////////////////////////////////
// Ebene unterhalb der Hauptakten-Oberregisterakte anlegen
// Dokumentart: Hauptakten-Registerakte, darin alle in den Stammdaten angelegten Register
sqlQuery = "select distinct dok_dat_feld_2, dok_dat_feld_3 from firmen_spezifisch where kue_dokuart = 'AVMNT' and dok_dat_feld_1 = '" + aktenschluessel + "' and dok_dat_feld_3 != ''";
def resultRows = d3.sql.executeAndGet( (String) sqlQuery );
if ( resultRows.size() > 0 )
{
resultRows.each
{
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": erstelle Register-Akte: [" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "]" );
Document newDocReg = d3.archive.newDocument();
newDocReg.type = dokuart_registerakte;
newDocReg.status = Document.DocStatus.DOC_STAT_PROCESSING;
newDocReg.editor = "dvelop";
newDocReg.field[ 1 ] = newDocfield_1;
newDocReg.field[ 2 ] = newDocfield_2;
newDocReg.field[ 3 ] = it.dok_dat_feld_2; // Oberregister
newDocReg.field[ 4 ] = it.dok_dat_feld_3; // Register
newDocReg.field[ 10 ] = newDocfield_10;
newDocReg.field[ 13 ] = newDocfield_13;
newDocReg.field[ 21 ] = newDocfield_21;
newDocReg.field[ 25 ] = newDocfield_25;
newDocReg.field[ 42 ] = newDocfield_42;
for ( int i = 0; i < newDocfield_69.size(); i++ )
{
newDocReg.field[ 69 ][ i + 1 ] = newDocfield_69[ i ];
}
if ( debug == 0 )
{
try
{
newDocReg = d3.archive.importDocument( newDocReg );
}
catch ( D3Exception e )
{
xlog( d3, 2, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Akte [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "] konnte nicht erzeugt werden: " + e.message );
aktenanlage_erfolgreich = false;
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Keine Aktenanlage fuer [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "] (Debug-Modus eingeschaltet)." );
}
if ( ( aktenanlage_erfolgreich ) && ( debug == 0 ) )
{
sqlQuery = "select doku_id from firmen_spezifisch where kue_dokuart = '" + dokuart_oberregisterakte + "' and dok_dat_feld_10 = '" + newDoc.field[ 10 ] + "' and dok_dat_feld_3 = '" + it.dok_dat_feld_2 + "'";
//xlog( d3, 3, sqlQuery );
e = d3.sql.executeAndGet( sqlQuery );
def oregdokuid;
if ( e.size() > 0 )
{
oregdokuid = e[0].doku_id;
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage erfolgreich, doku_id: [" + newDoc.id + "][" + oregdokuid + "][" + newDocReg.id + "] Register: [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "]" );
}
}
}
}
}
else
{
fehler( d3, "Es wurde keine passende Sammelakte gefunden. [" + treffer[ i ].ddf10 + "]", (int) treffer[ i ].id );
}
xlog( d3, 4, "************************************************" );
}
else
{
// Fehler
fehler( d3, "Mandantennummer in Tabelle und in Aktennummer unterscheiden sich.", (int) treffer[ i ].id );
}
}
}
def fehler( D3Interface d3, String meldung, int id )
{
def meldung_db;
if ( meldung.length() > 250 )
{
meldung_db = meldung.substring( 0, 249 );
}
else
{
meldung_db = meldung;
}
if ( debug == 0 )
{
sql = "update " + zieltabelle + " set fehler = '" + meldung_db + "' where id = " + id;
d3.sql.execute( sql );
}
xlog( d3, 2, meldung );
}
def xlog( D3Interface d3, int loglevel, String logtext )
{
def logdatei = "d:\\d3\\apps\\" + zieltabelle + "_3.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;
}

View File

@@ -0,0 +1,591 @@
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");
def prg = "migration_akte.groovy";
def version = "0.1";
def 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;
// In welcher Tabelle soll nach den zu erstellenden Akten gesucht werden?
@Field zieltabelle = "mig_betriebspruefungsakte";
// Konfiguration der Aktenartkürzel
@Field dokuart_sammelakte = "ABPSA";
@Field dokuart_hauptakte = "ABETR";
@Field dokuart_oberregisterakte = "ABEOR";
@Field dokuart_registerakte = "ABEPA";
// der hier konfigurierte Wert wird verwendet, wenn kein sonstiger Hauptaktenname gefunden wird.
@Field standard_hauptaktenname = "Betriebspruefungsakte";
// DDF 1 / ADM_Aktentyp aus der Aktenart ADM_Verwaltung Mandantenakte (AVMNT) - mit diesem Schlüssel werden die benötigten (Ober-)Register aus den Stammdaten in der Aktenart AVMNT ermittelt.
@Field aktenschluessel = "Betriebspruefungsakte";
/////////////////////////////////////////////////////////////////////////
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, "* Aktenart Sammelakte : " + dokuart_sammelakte );
xlog( d3, 4, "* Aktenart Hauptakte : " + dokuart_hauptakte );
xlog( d3, 4, "* Aktenart Oberregisterakte : " + dokuart_oberregisterakte );
xlog( d3, 4, "* Aktenart Registerakte : " + dokuart_registerakte );
xlog( d3, 4, "* Zieltabelle : " + zieltabelle );
xlog( d3, 4, "* Standard-Hauptaktenname : " + standard_hauptaktenname );
xlog( d3, 4, "* Aktenschluessel : " + aktenschluessel );
xlog( d3, 4, "************************************************" );
def sqlQuery = "select id,ddf1,ddf48,ddf10,ddf21,ddf22,ddf25,ddf37,ddf42,ddf60,ddf69 from " + zieltabelle + " where fehler is null and doku_id is null";
treffer = d3.sql.executeAndGet( (String) sqlQuery );
xlog( d3, 4, " Es wurden " + treffer.size() + " Treffer gefunden." );
xlog( d3, 4, "************************************************" );
if ( treffer.size() > 0 )
{
for ( i = 0; i < treffer.size(); i++ )
{
// Prüfung, ob die Mandantnummer in der Aktennummer zu der Mandantnummer aus der Tabelle passt - andernfalls Fehler.
def mandantnr_aus_aktennr = treffer[ i ].ddf10.substring( 0, 5 );
//JFEL ToString eingefügt
//if ( mandantnr_aus_aktennr == treffer[ i ].ddf1 )
if ( mandantnr_aus_aktennr == treffer[ i ].ddf1.toString() )
{
// Es wird eine neue Hauptakte erstellt
def newDocfield_1, newDocfield_2, newDocfield_10, newDocfield_13, newDocfield_21, newDocfield_22, newDocfield_25, newDocfield_37, newDocfield_42, newDocfield_60 = [ ], newDocfield_69 = [ ];
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Mandantennummer DDF1 : [" + treffer[ i ].ddf1 + "]" );
///JFEL toString eingebaut
//newDocfield_1 = treffer[ i ].ddf1;
newDocfield_1 = treffer[ i ].ddf1.toString();
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Aktennummer DDF10 : [" + treffer[ i ].ddf10 + "]" );
newDocfield_10 = treffer[ i ].ddf10;
if ( treffer[ i ].ddf21 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Aktenname DDF21 : [" + treffer[ i ].ddf21 + "]" );
newDocfield_21 = treffer[ i ].ddf21;
}
else
{
xlog( d3, 3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenname wurde nicht gefunden. Setze Standardbezeichnung '" + standard_hauptaktenname + "'." );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Aktenname DDF21 : <" + standard_hauptaktenname + ">" );
newDocfield_21 = standard_hauptaktenname;
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze physischer Aufbewahrungsort DDF22 : [" + treffer[ i ].ddf22 + "]" );
newDocfield_22 = treffer[ i ].ddf22;
if ( treffer[ i ].ddf25 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Geschaeftsfuehrer DDF25 : [" + treffer[ i ].ddf25 + "]" );
newDocfield_25 = treffer[ i ].ddf25;
}
else
{
def STATEMENT = "select dok_dat_feld_25 from firmen_spezifisch where kue_dokuart = 'AMAND' and dok_dat_feld_1 = '" + newDocfield_1 + "'";
def treffer_STATEMENT = d3.sql.executeAndGet( (String) STATEMENT );
if ( treffer_STATEMENT.size() > 0 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Geschaeftsfuehrer DDF25 aus M.-Akte : [" + treffer_STATEMENT[ 0 ].dok_dat_feld_25 + "]" );
newDocfield_25 = treffer_STATEMENT[ 0 ].dok_dat_feld_25;
}
else
{
xlog( d3, 3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Es konnte kein Wert für Geschaeftsfuehrer / DDF25 gefunden werden." );
}
}
if ( treffer[ i ].ddf37 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Auftragsverantwortlicher DDF37 : [" + treffer[ i ].ddf37 + "]" );
newDocfield_37 = treffer[ i ].ddf37;
}
else
{
def STATEMENT = "select dok_dat_feld_37 from firmen_spezifisch where kue_dokuart = 'AMAND' and dok_dat_feld_1 = '" + newDocfield_1 + "'";
def treffer_STATEMENT = d3.sql.executeAndGet( (String) STATEMENT );
if ( treffer_STATEMENT.size() > 0 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Auftragsverantwortlicher DDF37 aus M.-Akte: [" + treffer_STATEMENT[ 0 ].dok_dat_feld_37 + "]" );
newDocfield_37 = treffer_STATEMENT[ 0 ].dok_dat_feld_37;
}
else
{
xlog( d3, 3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Es konnte kein Wert für Auftragsverantwortlicher / DDF37 gefunden werden." );
}
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Briefkopf DDF42 : [" + treffer[ i ].ddf42 + "]" );
newDocfield_42 = treffer[ i ].ddf42;
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Unique-ID Migration DDF48 : [" + treffer[ i ].ddf48 + "]" );
newDocfield_48 = treffer[ i ].ddf48;
// Postempfänger
if ( treffer[ i ].ddf60 )
{
def splitted_str_array = treffer[ i ].ddf60.split( ';' );
for ( int j = 0; j < splitted_str_array.length; j++ )
{
def filler = " ";
if ( j >= 10 )
{
filler = "";
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Setze Postempfaenger DDF60 / " + filler + j + " : [" + splitted_str_array[ j ] + "]" );
newDocfield_60[ j ] = splitted_str_array[ j ];
}
}
// Berechtigter:
if ( treffer[ i ].ddf69 )
{
def splitted_str_array = treffer[ i ].ddf69.split( ';' );
for ( int j = 0; j < splitted_str_array.length; j++ )
{
def filler = " ";
if ( j >= 10 )
{
filler = "";
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Setze Berechtigter DDF69 / " + filler + j + " : [" + splitted_str_array[ j ] + "]" );
newDocfield_69[ j ] = splitted_str_array[ j ];
}
}
// Prüfung, ob zu dieser Hauptakte eine passende Sammelakte existiert
// Falls ja: Übernahme der Mandantenstammdaten der entsprechenden Akte
// Falls nein: Fehler in DB eintragen und Abbruch der Verarbeitung dieses Treffers
sqlQuery = "select doku_id, dok_dat_feld_1, dok_dat_feld_2, dok_dat_feld_13 from firmen_spezifisch where kue_dokuart = '" + dokuart_sammelakte + "' and dok_dat_feld_1 = '" + treffer[ i ].ddf1 + "'";
ergebnis = d3.sql.executeAndGet( (String) sqlQuery );
if ( ergebnis.size() > 0 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Mandantenname DDF2 : [" + ergebnis[ 0 ].dok_dat_feld_2 + "]" );
newDocfield_2 = ergebnis[ 0 ].dok_dat_feld_2;
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Mandantengruppennummer DDF13 : [" + ergebnis[ 0 ].dok_dat_feld_13 + "]" );
newDocfield_13 = ergebnis[ 0 ].dok_dat_feld_13;
// Akte mit Stammdaten und Infos aus der Tabelle "zieltabelle" erstellen
// Registerstruktur unterhalb ebenfalls erstellen
Document newDoc = d3.archive.newDocument();
newDoc.type = dokuart_hauptakte;
newDoc.status = Document.DocStatus.DOC_STAT_PROCESSING;
newDoc.editor = "dvelop";
newDoc.field[ 1 ] = newDocfield_1;
newDoc.field[ 2 ] = newDocfield_2;
newDoc.field[ 10 ] = newDocfield_10;
newDoc.field[ 13 ] = newDocfield_13;
newDoc.field[ 21 ] = newDocfield_21;
newDoc.field[ 22 ] = newDocfield_22;
newDoc.field[ 25 ] = newDocfield_25;
newDoc.field[ 37 ] = newDocfield_37;
newDoc.field[ 42 ] = newDocfield_42;
newDoc.field[ 48 ] = newDocfield_48;
for ( int i = 0; i < newDocfield_60.size(); i++ )
{
newDoc.field[ 60 ][ i + 1 ] = newDocfield_60[ i ];
}
for ( int i = 0; i < newDocfield_69.size(); i++ )
{
newDoc.field[ 69 ][ i + 1 ] = newDocfield_69[ i ];
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": =============================" );
//Pruefung ob die anzulegende Akte ggf. schon im System angelegt wurde
sqlQuery = "select doku_id from firmen_spezifisch where kue_dokuart = '" + dokuart_hauptakte + "' and dok_dat_feld_1 = '" + newDocfield_1 + "' AND dok_dat_feld_10 = '" + newDocfield_10 + "'";
ergebnis = d3.sql.executeAndGet( (String) sqlQuery );
if ( ergebnis.size() > 0 ) {
fehler( d3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage [" + newDoc.field[ 10 ] + "] nicht durchgefuehrt da die Akte bereits existiert, doku_id: " + ergebnis[ 0 ].doku_id, (int) treffer[ i ].id );
continue;
}
def aktenanlage_erfolgreich = true;
if ( debug == 0 )
{
try
{
newDoc = d3.archive.importDocument( newDoc );
}
catch ( D3Exception e )
{
fehler( d3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Akte [" + newDoc.field[ 10 ] + "] konnte nicht erzeugt werden: " + e.message, (int) treffer[ i ].id );
aktenanlage_erfolgreich = false;
}
if ( aktenanlage_erfolgreich )
{
// sichern der erzeugten Doku-ID
if ( debug == 0 )
{
sqlQuery = "update " + zieltabelle + " set doku_id = '" + newDoc.id + "' where id = " + treffer[ i ].id;
d3.sql.execute( sqlQuery );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage [" + newDoc.field[ 10 ] + "] erfolgreich, doku_id: [" + newDoc.id + "]" );
}
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Keine Aktenanlage fuer [" + newDoc.field[ 10 ] + "] (Debug-Modus eingeschaltet)." );
}
if ( aktenanlage_erfolgreich )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": =============================" );
//////////////////////////////////////////
// Ebene unterhalb der Hauptakte anlegen
// Dokumentart: Hauptakten-Oberregisterakte, darin alle in den Stammdaten angelegten Oberregister
sqlQuery = "select distinct dok_dat_feld_2 from firmen_spezifisch where kue_dokuart = 'AVMNT' and dok_dat_feld_1 = '" + aktenschluessel + "'";
def resultRows = d3.sql.executeAndGet( (String) sqlQuery );
if ( resultRows.size() > 0 )
{
resultRows.each
{
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": erstelle Oberregister-Akte: [" + it.dok_dat_feld_2 + "]" );
Document newDocOReg = d3.archive.newDocument();
newDocOReg.type = dokuart_oberregisterakte;
newDocOReg.status = Document.DocStatus.DOC_STAT_PROCESSING;
newDocOReg.editor = "dvelop";
newDocOReg.field[ 1 ] = newDocfield_1;
newDocOReg.field[ 2 ] = newDocfield_2;
newDocOReg.field[ 3 ] = it.dok_dat_feld_2; // Oberregister
newDocOReg.field[ 10 ] = newDocfield_10;
newDocOReg.field[ 13 ] = newDocfield_13;
newDocOReg.field[ 21 ] = newDocfield_21;
newDocOReg.field[ 25 ] = newDocfield_25;
newDocOReg.field[ 42 ] = newDocfield_42;
for ( int i = 0; i < newDocfield_69.size(); i++ )
{
newDocOReg.field[ 69 ][ i + 1 ] = newDocfield_69[ i ];
}
if ( debug == 0 )
{
try
{
newDocOReg = d3.archive.importDocument( newDocOReg );
}
catch ( D3Exception e )
{
xlog( d3, 2, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Akte [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "] konnte nicht erzeugt werden: " + e.message );
aktenanlage_erfolgreich = false;
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Keine Aktenanlage fuer [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "] (Debug-Modus eingeschaltet)." );
}
if ( ( aktenanlage_erfolgreich ) && ( debug == 0 ) )
{
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage erfolgreich, doku_id: [" + newDoc.id + "][" + newDocOReg.id + "]" );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage erfolgreich, doku_id: [" + newDoc.id + "][" + newDocOReg.id + "] Register: [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "]" );
}
}
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Weitere Akten werden wegen Fehler nicht angelegt." );
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": =============================" );
if ( aktenanlage_erfolgreich )
{
//////////////////////////////////////////
// Ebene unterhalb der Hauptakten-Oberregisterakte anlegen
// Dokumentart: Hauptakten-Registerakte, darin alle in den Stammdaten angelegten Register
sqlQuery = "select distinct dok_dat_feld_2, dok_dat_feld_3 from firmen_spezifisch where kue_dokuart = 'AVMNT' and dok_dat_feld_1 = '" + aktenschluessel + "' and dok_dat_feld_3 != ''";
def resultRows = d3.sql.executeAndGet( (String) sqlQuery );
if ( resultRows.size() > 0 )
{
resultRows.each
{
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": erstelle Register-Akte: [" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "]" );
Document newDocReg = d3.archive.newDocument();
newDocReg.type = dokuart_registerakte;
newDocReg.status = Document.DocStatus.DOC_STAT_PROCESSING;
newDocReg.editor = "dvelop";
newDocReg.field[ 1 ] = newDocfield_1;
newDocReg.field[ 2 ] = newDocfield_2;
newDocReg.field[ 3 ] = it.dok_dat_feld_2; // Oberregister
newDocReg.field[ 4 ] = it.dok_dat_feld_3; // Register
newDocReg.field[ 10 ] = newDocfield_10;
newDocReg.field[ 13 ] = newDocfield_13;
newDocReg.field[ 21 ] = newDocfield_21;
newDocReg.field[ 25 ] = newDocfield_25;
newDocReg.field[ 42 ] = newDocfield_42;
for ( int i = 0; i < newDocfield_69.size(); i++ )
{
newDocReg.field[ 69 ][ i + 1 ] = newDocfield_69[ i ];
}
if ( debug == 0 )
{
try
{
newDocReg = d3.archive.importDocument( newDocReg );
}
catch ( D3Exception e )
{
xlog( d3, 2, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Akte [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "] konnte nicht erzeugt werden: " + e.message );
aktenanlage_erfolgreich = false;
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Keine Aktenanlage fuer [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "] (Debug-Modus eingeschaltet)." );
}
if ( ( aktenanlage_erfolgreich ) && ( debug == 0 ) )
{
sqlQuery = "select doku_id from firmen_spezifisch where kue_dokuart = '" + dokuart_oberregisterakte + "' and dok_dat_feld_10 = '" + newDoc.field[ 10 ] + "' and dok_dat_feld_3 = '" + it.dok_dat_feld_2 + "'";
//xlog( d3, 3, sqlQuery );
e = d3.sql.executeAndGet( sqlQuery );
def oregdokuid;
if ( e.size() > 0 )
{
oregdokuid = e[0].doku_id;
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage erfolgreich, doku_id: [" + newDoc.id + "][" + oregdokuid + "][" + newDocReg.id + "] Register: [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "]" );
}
}
}
}
}
else
{
fehler( d3, "Es wurde keine passende Sammelakte gefunden. [" + treffer[ i ].ddf10 + "]", (int) treffer[ i ].id );
}
xlog( d3, 4, "************************************************" );
}
else
{
// Fehler
fehler( d3, "Mandantennummer in Tabelle und in Aktennummer unterscheiden sich.", (int) treffer[ i ].id );
}
}
}
def fehler( D3Interface d3, String meldung, int id )
{
def meldung_db;
if ( meldung.length() > 250 )
{
meldung_db = meldung.substring( 0, 249 );
}
else
{
meldung_db = meldung;
}
if ( debug == 0 )
{
sql = "update " + zieltabelle + " set fehler = '" + meldung_db + "' where id = " + id;
d3.sql.execute( sql );
}
xlog( d3, 2, meldung );
}
def xlog( D3Interface d3, int loglevel, String logtext )
{
def logdatei = "d:\\d3\\apps\\" + zieltabelle + ".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;
}

View File

@@ -0,0 +1,671 @@
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");
def prg = "migration_akte_dauerakte.groovy";
def version = "0.1";
def 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;
// In welcher Tabelle soll nach den zu erstellenden Akten gesucht werden?
@Field zieltabelle = "mig_dauerakte";
// Konfiguration der Aktenartkürzel
@Field dokuart_sammelakte = "AMAND"; //Es gibt keine Sammelakte fuer Dauerakten, daher werden die Infos aus der Mandantenakte ermittelt
@Field dokuart_hauptakte = "ADAUR";
@Field dokuart_oberregisterakte = "AOREG";
@Field dokuart_registerakte = "AREGS";
@Field dokuart_unterregisterakte = "AUREG";
// der hier konfigurierte Wert wird verwendet, wenn kein sonstiger Hauptaktenname gefunden wird.
@Field standard_hauptaktenname = "Dauerakte";
// DDF 1 / ADM_Aktentyp aus der Aktenart ADM_Verwaltung Mandantenakte (AVMNT) - mit diesem Schlüssel werden die benötigten (Ober-)Register aus den Stammdaten in der Aktenart AVMNT ermittelt.
@Field aktenschluessel = "Dauerakte";
/////////////////////////////////////////////////////////////////////////
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, "* Aktenart Sammelakte : " + dokuart_sammelakte );
xlog( d3, 4, "* Aktenart Hauptakte : " + dokuart_hauptakte );
xlog( d3, 4, "* Aktenart Oberregisterakte : " + dokuart_oberregisterakte );
xlog( d3, 4, "* Aktenart Registerakte : " + dokuart_registerakte );
xlog( d3, 4, "* Zieltabelle : " + zieltabelle );
xlog( d3, 4, "* Standard-Hauptaktenname : " + standard_hauptaktenname );
xlog( d3, 4, "* Aktenschluessel : " + aktenschluessel );
xlog( d3, 4, "************************************************" );
def sqlQuery = "select top (100) id,ddf1,ddf48,ddf10,ddf21,ddf22,ddf25,ddf37,ddf42,ddf60,ddf69 from " + zieltabelle + " where fehler is null and doku_id is null";
treffer = d3.sql.executeAndGet( (String) sqlQuery );
xlog( d3, 4, " Es wurden " + treffer.size() + " Treffer gefunden." );
xlog( d3, 4, "************************************************" );
if ( treffer.size() > 0 )
{
for ( i = 0; i < treffer.size(); i++ )
{
// Prüfung, ob die Mandantnummer in der Aktennummer zu der Mandantnummer aus der Tabelle passt - andernfalls Fehler.
def mandantnr_aus_aktennr = treffer[ i ].ddf10.substring( 0, 5 );
//JFEL toString eingefügt, da der Vergleich sonst scheitert.
//if ( mandantnr_aus_aktennr == treffer[ i ].ddf1 )
if ( mandantnr_aus_aktennr == treffer[ i ].ddf1.toString() )
{
// Es wird eine neue Hauptakte erstellt
def newDocfield_1, newDocfield_2, newDocfield_10, newDocfield_13, newDocfield_21, newDocfield_22, newDocfield_25, newDocfield_37, newDocfield_42, newDocfield_48, newDocfield_60 = [ ], newDocfield_69 = [ ];
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Mandantennummer DDF1 : [" + treffer[ i ].ddf1 + "]" );
//JFEL toString eingefügt, da sonst später beim wegschreiben ein Java-Class-Error auftritt.
//newDocfield_1 = treffer[ i ].ddf1;
newDocfield_1 = treffer[ i ].ddf1.toString();
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Aktennummer DDF10 : [" + treffer[ i ].ddf10 + "]" );
newDocfield_10 = treffer[ i ].ddf10;
if ( treffer[ i ].ddf21 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Aktenname DDF21 : [" + treffer[ i ].ddf21 + "]" );
newDocfield_21 = treffer[ i ].ddf21;
}
else
{
xlog( d3, 3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenname wurde nicht gefunden. Setze Standardbezeichnung '" + standard_hauptaktenname + "'." );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Aktenname DDF21 : <" + standard_hauptaktenname + ">" );
newDocfield_21 = standard_hauptaktenname;
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze physischer Aufbewahrungsort DDF22 : [" + treffer[ i ].ddf22 + "]" );
newDocfield_22 = treffer[ i ].ddf22;
if ( treffer[ i ].ddf25 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Geschaeftsfuehrer DDF25 : [" + treffer[ i ].ddf25 + "]" );
newDocfield_25 = treffer[ i ].ddf25;
}
else
{
def STATEMENT = "select dok_dat_feld_25 from firmen_spezifisch where kue_dokuart = 'AMAND' and dok_dat_feld_1 = '" + newDocfield_1 + "'";
def treffer_STATEMENT = d3.sql.executeAndGet( (String) STATEMENT );
if ( treffer_STATEMENT.size() > 0 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Geschaeftsfuehrer DDF25 aus M.-Akte : [" + treffer_STATEMENT[ 0 ].dok_dat_feld_25 + "]" );
newDocfield_25 = treffer_STATEMENT[ 0 ].dok_dat_feld_25;
}
else
{
xlog( d3, 3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Es konnte kein Wert für Geschaeftsfuehrer / DDF25 gefunden werden." );
}
}
if ( treffer[ i ].ddf37 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Auftragsverantwortlicher DDF37 : [" + treffer[ i ].ddf37 + "]" );
newDocfield_37 = treffer[ i ].ddf37;
}
else
{
def STATEMENT = "select dok_dat_feld_37 from firmen_spezifisch where kue_dokuart = 'AMAND' and dok_dat_feld_1 = '" + newDocfield_1 + "'";
def treffer_STATEMENT = d3.sql.executeAndGet( (String) STATEMENT );
if ( treffer_STATEMENT.size() > 0 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Auftragsverantwortlicher DDF37 aus M.-Akte: [" + treffer_STATEMENT[ 0 ].dok_dat_feld_37 + "]" );
newDocfield_37 = treffer_STATEMENT[ 0 ].dok_dat_feld_37;
}
else
{
xlog( d3, 3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Es konnte kein Wert für Auftragsverantwortlicher / DDF37 gefunden werden." );
}
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Briefkopf DDF42 : [" + treffer[ i ].ddf42 + "]" );
newDocfield_42 = treffer[ i ].ddf42;
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Unique-ID Migration DDF48 : [" + treffer[ i ].ddf48 + "]" );
newDocfield_48 = treffer[ i ].ddf48;
// Postempfänger
if ( treffer[ i ].ddf60 )
{
def splitted_str_array = treffer[ i ].ddf60.split( ';' );
for ( int j = 0; j < splitted_str_array.length; j++ )
{
def filler = " ";
if ( j >= 10 )
{
filler = "";
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Setze Postempfaenger DDF60 / " + filler + j + " : [" + splitted_str_array[ j ] + "]" );
newDocfield_60[ j ] = splitted_str_array[ j ];
}
}
// Berechtigter:
if ( treffer[ i ].ddf69 )
{
def splitted_str_array = treffer[ i ].ddf69.split( ';' );
for ( int j = 0; j < splitted_str_array.length; j++ )
{
def filler = " ";
if ( j >= 10 )
{
filler = "";
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Setze Berechtigter DDF69 / " + filler + j + " : [" + splitted_str_array[ j ] + "]" );
newDocfield_69[ j ] = splitted_str_array[ j ];
}
}
// Prüfung, ob zu dieser Hauptakte eine passende Sammelakte existiert
// Falls ja: Übernahme der Mandantenstammdaten der entsprechenden Akte
// Falls nein: Fehler in DB eintragen und Abbruch der Verarbeitung dieses Treffers
sqlQuery = "select doku_id, dok_dat_feld_1, dok_dat_feld_2, dok_dat_feld_13 from firmen_spezifisch where kue_dokuart = '" + dokuart_sammelakte + "' and dok_dat_feld_1 = '" + treffer[ i ].ddf1 + "'";
ergebnis = d3.sql.executeAndGet( (String) sqlQuery );
if ( ergebnis.size() > 0 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Mandantenname DDF2 : [" + ergebnis[ 0 ].dok_dat_feld_2 + "]" );
newDocfield_2 = ergebnis[ 0 ].dok_dat_feld_2;
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Mandantengruppennummer DDF13 : [" + ergebnis[ 0 ].dok_dat_feld_13 + "]" );
newDocfield_13 = ergebnis[ 0 ].dok_dat_feld_13;
// Akte mit Stammdaten und Infos aus der Tabelle "zieltabelle" erstellen
// Registerstruktur unterhalb ebenfalls erstellen
Document newDoc = d3.archive.newDocument();
newDoc.type = dokuart_hauptakte;
newDoc.status = Document.DocStatus.DOC_STAT_PROCESSING;
newDoc.editor = "dvelop";
newDoc.field[ 1 ] = newDocfield_1;
newDoc.field[ 2 ] = newDocfield_2;
newDoc.field[ 10 ] = newDocfield_10;
newDoc.field[ 13 ] = newDocfield_13;
newDoc.field[ 21 ] = newDocfield_21;
newDoc.field[ 22 ] = newDocfield_22;
newDoc.field[ 25 ] = newDocfield_25;
newDoc.field[ 37 ] = newDocfield_37;
newDoc.field[ 42 ] = newDocfield_42;
newDoc.field[ 48 ] = newDocfield_48;
for ( int i = 0; i < newDocfield_60.size(); i++ )
{
newDoc.field[ 60 ][ i + 1 ] = newDocfield_60[ i ];
}
for ( int i = 0; i < newDocfield_69.size(); i++ )
{
newDoc.field[ 69 ][ i + 1 ] = newDocfield_69[ i ];
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": =============================" );
//Pruefung ob die anzulegende Akte ggf. schon im System angelegt wurde
sqlQuery = "select doku_id from firmen_spezifisch where kue_dokuart = '" + dokuart_hauptakte + "' and dok_dat_feld_1 = '" + newDocfield_1 + "' AND dok_dat_feld_10 = '" + newDocfield_10 + "'";
ergebnis = d3.sql.executeAndGet( (String) sqlQuery );
if ( ergebnis.size() > 0 ) {
fehler( d3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage [" + newDoc.field[ 10 ] + "] nicht durchgefuehrt da die Akte bereits existiert, doku_id: " + ergebnis[ 0 ].doku_id, (int) treffer[ i ].id );
continue;
}
def aktenanlage_erfolgreich = true;
if ( debug == 0 )
{
try
{
newDoc = d3.archive.importDocument( newDoc );
}
catch ( D3Exception e )
{
fehler( d3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Akte [" + newDoc.field[ 10 ] + "] konnte nicht erzeugt werden: " + e.message, (int) treffer[ i ].id );
aktenanlage_erfolgreich = false;
}
if ( aktenanlage_erfolgreich )
{
// sichern der erzeugten Doku-ID
if ( debug == 0 )
{
sqlQuery = "update " + zieltabelle + " set doku_id = '" + newDoc.id + "' where id = " + treffer[ i ].id;
d3.sql.execute( sqlQuery );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage [" + newDoc.field[ 10 ] + "] erfolgreich, doku_id: [" + newDoc.id + "]" );
}
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Keine Aktenanlage fuer [" + newDoc.field[ 10 ] + "] (Debug-Modus eingeschaltet)." );
}
if ( aktenanlage_erfolgreich )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": =============================" );
//////////////////////////////////////////
// Ebene unterhalb der Hauptakte anlegen
// Dokumentart: Hauptakten-Oberregisterakte, darin alle in den Stammdaten angelegten Oberregister
sqlQuery = "select distinct dok_dat_feld_2 from firmen_spezifisch where kue_dokuart = 'AVMNT' and dok_dat_feld_1 = '" + aktenschluessel + "'";
def resultRows = d3.sql.executeAndGet( (String) sqlQuery );
if ( resultRows.size() > 0 )
{
resultRows.each
{
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": erstelle Oberregister-Akte: [" + it.dok_dat_feld_2 + "]" );
Document newDocOReg = d3.archive.newDocument();
newDocOReg.type = dokuart_oberregisterakte;
newDocOReg.status = Document.DocStatus.DOC_STAT_PROCESSING;
newDocOReg.editor = "dvelop";
newDocOReg.field[ 1 ] = newDocfield_1;
newDocOReg.field[ 2 ] = newDocfield_2;
newDocOReg.field[ 3 ] = it.dok_dat_feld_2; // Oberregister
newDocOReg.field[ 10 ] = newDocfield_10;
newDocOReg.field[ 13 ] = newDocfield_13;
newDocOReg.field[ 21 ] = newDocfield_21;
newDocOReg.field[ 25 ] = newDocfield_25;
newDocOReg.field[ 37 ] = newDocfield_37;
newDocOReg.field[ 42 ] = newDocfield_42;
for ( int i = 0; i < newDocfield_69.size(); i++ )
{
newDocOReg.field[ 69 ][ i + 1 ] = newDocfield_69[ i ];
}
if ( debug == 0 )
{
try
{
newDocOReg = d3.archive.importDocument( newDocOReg );
}
catch ( D3Exception e )
{
xlog( d3, 2, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Akte [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "] konnte nicht erzeugt werden: " + e.message );
aktenanlage_erfolgreich = false;
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Keine Aktenanlage fuer [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "] (Debug-Modus eingeschaltet)." );
}
if ( ( aktenanlage_erfolgreich ) && ( debug == 0 ) )
{
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage erfolgreich, doku_id: [" + newDoc.id + "][" + newDocOReg.id + "]" );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage erfolgreich, doku_id: [" + newDoc.id + "][" + newDocOReg.id + "] Register: [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "]" );
}
}
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Weitere Akten werden wegen Fehler nicht angelegt." );
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": =============================" );
if ( aktenanlage_erfolgreich )
{
//////////////////////////////////////////
// Ebene unterhalb der Hauptakten-Oberregisterakte anlegen
// Dokumentart: Hauptakten-Registerakte, darin alle in den Stammdaten angelegten Register
sqlQuery = "select distinct dok_dat_feld_2, dok_dat_feld_3 from firmen_spezifisch where kue_dokuart = 'AVMNT' and dok_dat_feld_1 = '" + aktenschluessel + "' and dok_dat_feld_3 != ''";
def resultRows = d3.sql.executeAndGet( (String) sqlQuery );
if ( resultRows.size() > 0 )
{
resultRows.each
{
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": erstelle Register-Akte: [" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "]" );
Document newDocReg = d3.archive.newDocument();
newDocReg.type = dokuart_registerakte;
newDocReg.status = Document.DocStatus.DOC_STAT_PROCESSING;
newDocReg.editor = "dvelop";
newDocReg.field[ 1 ] = newDocfield_1;
newDocReg.field[ 2 ] = newDocfield_2;
newDocReg.field[ 3 ] = it.dok_dat_feld_2; // Oberregister
newDocReg.field[ 4 ] = it.dok_dat_feld_3; // Register
newDocReg.field[ 10 ] = newDocfield_10;
newDocReg.field[ 13 ] = newDocfield_13;
newDocReg.field[ 21 ] = newDocfield_21;
newDocReg.field[ 25 ] = newDocfield_25;
newDocReg.field[ 37 ] = newDocfield_37;
newDocReg.field[ 42 ] = newDocfield_42;
for ( int i = 0; i < newDocfield_69.size(); i++ )
{
newDocReg.field[ 69 ][ i + 1 ] = newDocfield_69[ i ];
}
if ( debug == 0 )
{
try
{
newDocReg = d3.archive.importDocument( newDocReg );
}
catch ( D3Exception e )
{
xlog( d3, 2, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Akte [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "] konnte nicht erzeugt werden: " + e.message );
aktenanlage_erfolgreich = false;
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Keine Aktenanlage fuer [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "] (Debug-Modus eingeschaltet)." );
}
if ( ( aktenanlage_erfolgreich ) && ( debug == 0 ) )
{
sqlQuery = "select doku_id from firmen_spezifisch where kue_dokuart = '" + dokuart_oberregisterakte + "' and dok_dat_feld_10 = '" + newDoc.field[ 10 ] + "' and dok_dat_feld_3 = '" + it.dok_dat_feld_2 + "'";
//xlog( d3, 3, sqlQuery );
e = d3.sql.executeAndGet( sqlQuery );
def oregdokuid;
if ( e.size() > 0 )
{
oregdokuid = e[0].doku_id;
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage erfolgreich, doku_id: [" + newDoc.id + "][" + oregdokuid + "][" + newDocReg.id + "] Register: [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "]" );
}
}
}
}
if ( aktenanlage_erfolgreich )
{
//////////////////////////////////////////
// Ebene unterhalb der Hauptakten-Oberregisterakte anlegen
// Dokumentart: Hauptakten-Registerakte, darin alle in den Stammdaten angelegten Unterregister
sqlQuery = "select distinct dok_dat_feld_2, dok_dat_feld_3, dok_dat_feld_4 from firmen_spezifisch where kue_dokuart = 'AVMNT' and dok_dat_feld_1 = '" + aktenschluessel + "' and dok_dat_feld_4 != ''";
def resultRows = d3.sql.executeAndGet( (String) sqlQuery );
if ( resultRows.size() > 0 )
{
resultRows.each
{
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": erstelle Register-Akte: [" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "][" + it.dok_dat_feld_4 + "]" );
Document newDocUReg = d3.archive.newDocument();
newDocUReg.type = dokuart_unterregisterakte;
newDocUReg.status = Document.DocStatus.DOC_STAT_PROCESSING;
newDocUReg.editor = "dvelop";
newDocUReg.field[ 1 ] = newDocfield_1;
newDocUReg.field[ 2 ] = newDocfield_2;
newDocUReg.field[ 3 ] = it.dok_dat_feld_2; // Oberregister
newDocUReg.field[ 4 ] = it.dok_dat_feld_3; // Register
newDocUReg.field[ 10 ] = newDocfield_10;
newDocUReg.field[ 13 ] = newDocfield_13;
newDocUReg.field[ 21 ] = newDocfield_21;
newDocUReg.field[ 23 ] = it.dok_dat_feld_4; // Unterregister
newDocUReg.field[ 25 ] = newDocfield_25;
newDocUReg.field[ 37 ] = newDocfield_37;
newDocUReg.field[ 42 ] = newDocfield_42;
for ( int i = 0; i < newDocfield_69.size(); i++ )
{
newDocUReg.field[ 69 ][ i + 1 ] = newDocfield_69[ i ];
}
if ( debug == 0 )
{
try
{
newDocUReg = d3.archive.importDocument( newDocUReg );
}
catch ( D3Exception e )
{
xlog( d3, 2, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Akte [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "][" + it.dok_dat_feld_4 + "] konnte nicht erzeugt werden: " + e.message );
aktenanlage_erfolgreich = false;
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Keine Aktenanlage fuer [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "][" + it.dok_dat_feld_4 + "] (Debug-Modus eingeschaltet)." );
}
if ( ( aktenanlage_erfolgreich ) && ( debug == 0 ) )
{
sqlQuery = "select doku_id from firmen_spezifisch where kue_dokuart = '" + dokuart_oberregisterakte + "' and dok_dat_feld_10 = '" + newDoc.field[ 10 ] + "' and dok_dat_feld_3 = '" + it.dok_dat_feld_2 + "' and dok_dat_feld_23 = '" + it.dok_dat_feld_4 + "'";
//xlog( d3, 3, sqlQuery );
e = d3.sql.executeAndGet( sqlQuery );
def oregdokuid;
if ( e.size() > 0 )
{
oregdokuid = e[0].doku_id;
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage erfolgreich, doku_id: [" + newDoc.id + "][" + oregdokuid + "][" + newDocUReg.id + "] Register: [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "]" );
}
}
}
}
}
else
{
fehler( d3, "Es wurde keine passende Mandantenakte gefunden. [" + treffer[ i ].ddf10 + "]", (int) treffer[ i ].id );
}
xlog( d3, 4, "************************************************" );
}
else
{
// Fehler
fehler( d3, "Mandantennummer in Tabelle und in Aktennummer unterscheiden sich.", (int) treffer[ i ].id );
}
}
}
def fehler( D3Interface d3, String meldung, int id )
{
def meldung_db;
if ( meldung.length() > 250 )
{
meldung_db = meldung.substring( 0, 249 );
}
else
{
meldung_db = meldung;
}
if ( debug == 0 )
{
sql = "update " + zieltabelle + " set fehler = '" + meldung_db + "' where id = " + id;
d3.sql.execute( sql );
}
xlog( d3, 2, meldung );
}
def xlog( D3Interface d3, int loglevel, String logtext )
{
def logdatei = "d:\\d3\\apps\\" + zieltabelle + ".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;
}

View File

@@ -0,0 +1,336 @@
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");
def prg = "migration_akte.groovy";
def version = "0.1";
def 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;
// In welcher Tabelle soll nach den zu erstellenden Akten gesucht werden?
@Field zieltabelle = "mig_eigenverwaltungsakte";
// Konfiguration der Aktenartkürzel
@Field dokuart_sammelakte = "";
@Field dokuart_hauptakte = "AEVAK";
@Field dokuart_oberregisterakte = "AEVOR";
@Field dokuart_registerakte = "AEVRE";
// der hier konfigurierte Wert wird verwendet, wenn kein sonstiger Hauptaktenname gefunden wird.
@Field standard_hauptaktenname = "Eigenverwaltungsakte";
// DDF 1 / ADM_Aktentyp aus der Aktenart ADM_Verwaltung Mandantenakte (AVMNT) - mit diesem Schlüssel werden die benötigten (Ober-)Register aus den Stammdaten in der Aktenart AVMNT ermittelt.
@Field aktenschluessel = "Beratungsakte";
/////////////////////////////////////////////////////////////////////////
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, "* Aktenart Sammelakte : " + dokuart_sammelakte );
xlog( d3, 4, "* Aktenart Hauptakte : " + dokuart_hauptakte );
xlog( d3, 4, "* Aktenart Oberregisterakte : " + dokuart_oberregisterakte );
xlog( d3, 4, "* Aktenart Registerakte : " + dokuart_registerakte );
xlog( d3, 4, "* Zieltabelle : " + zieltabelle );
xlog( d3, 4, "* Standard-Hauptaktenname : " + standard_hauptaktenname );
xlog( d3, 4, "* Aktenschluessel : " + aktenschluessel );
xlog( d3, 4, "************************************************" );
def sqlQuery = "select top (100) id,ddf48,ddf10,ddf21,ddf25,ddf60,ddf69,ddf41 from " + zieltabelle + " where fehler is null and doku_id is null";
treffer = d3.sql.executeAndGet( (String) sqlQuery );
xlog( d3, 4, " Es wurden " + treffer.size() + " Treffer gefunden." );
xlog( d3, 4, "************************************************" );
if ( treffer.size() > 0 )
{
for ( i = 0; i < treffer.size(); i++ )
{
// Es wird eine neue Hauptakte erstellt
def newDocfield_10, newDocfield_21, newDocfield_25, newDocfield_41, newDocfield_48, newDocfield_60 = [ ], newDocfield_69 = [ ];
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Aktennummer DDF10 : [" + treffer[ i ].ddf10 + "]" );
newDocfield_10 = treffer[ i ].ddf10;
if ( treffer[ i ].ddf21 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Aktenname DDF21 : [" + treffer[ i ].ddf21 + "]" );
newDocfield_21 = treffer[ i ].ddf21;
}
else
{
xlog( d3, 3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenname wurde nicht gefunden. Setze Standardbezeichnung '" + standard_hauptaktenname + "'." );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Aktenname DDF21 : <" + standard_hauptaktenname + ">" );
newDocfield_21 = standard_hauptaktenname;
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Geschaeftsfuehrer DDF25 : [" + treffer[ i ].ddf25 + "]" );
newDocfield_25 = treffer[ i ].ddf25;
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Briefkopf DDF41 : [" + treffer[ i ].ddf41 + "]" );
newDocfield_41 = treffer[ i ].ddf41;
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Unique-ID Migration DDF48 : [" + treffer[ i ].ddf48 + "]" );
newDocfield_48 = treffer[ i ].ddf48;
// Postempfänger
if ( treffer[ i ].ddf60 )
{
def splitted_str_array = treffer[ i ].ddf60.split( ';' );
for ( int j = 0; j < splitted_str_array.length; j++ )
{
def filler = " ";
if ( j >= 10 )
{
filler = "";
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Setze Postempfaenger DDF60 / " + filler + j + " : [" + splitted_str_array[ j ] + "]" );
newDocfield_60[ j ] = splitted_str_array[ j ];
}
}
// Berechtigter:
if ( treffer[ i ].ddf69 )
{
def splitted_str_array = treffer[ i ].ddf69.split( ';' );
for ( int j = 0; j < splitted_str_array.length; j++ )
{
def filler = " ";
if ( j >= 10 )
{
filler = "";
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Setze Berechtigter DDF69 / " + filler + j + " : [" + splitted_str_array[ j ] + "]" );
newDocfield_69[ j ] = splitted_str_array[ j ];
}
}
// Eigenverwaltungsakten haben keine Sammelakten, daher ist der Part entfernt worden
// Akte mit Stammdaten und Infos aus der Tabelle "zieltabelle" erstellen
// Registerstruktur unterhalb ebenfalls erstellen
Document newDoc = d3.archive.newDocument();
newDoc.type = dokuart_hauptakte;
newDoc.status = Document.DocStatus.DOC_STAT_PROCESSING;
newDoc.editor = "dvelop";
newDoc.field[ 10 ] = newDocfield_10;
newDoc.field[ 21 ] = newDocfield_21;
newDoc.field[ 25 ] = newDocfield_25;
newDoc.field[ 41 ] = newDocfield_41;
newDoc.field[ 48 ] = newDocfield_48;
for ( int i = 0; i < newDocfield_60.size(); i++ )
{
newDoc.field[ 60 ][ i + 1 ] = newDocfield_60[ i ];
}
for ( int i = 0; i < newDocfield_69.size(); i++ )
{
newDoc.field[ 69 ][ i + 1 ] = newDocfield_69[ i ];
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": =============================" );
//Pruefung ob die anzulegende Akte ggf. schon im System angelegt wurde
sqlQuery = "select doku_id from firmen_spezifisch where kue_dokuart = '" + dokuart_hauptakte + "' AND dok_dat_feld_10 = '" + newDocfield_10 + "'";
ergebnis = d3.sql.executeAndGet( (String) sqlQuery );
if ( ergebnis.size() > 0 ) {
fehler( d3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage [" + newDoc.field[ 10 ] + "] nicht durchgefuehrt da die Akte bereits existiert doku_id: " + ergebnis[ 0 ].doku_id, (int) treffer[ i ].id );
continue;
}
def aktenanlage_erfolgreich = true;
if ( debug == 0 )
{
try
{
newDoc = d3.archive.importDocument( newDoc );
}
catch ( D3Exception e )
{
fehler( d3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Akte [" + newDoc.field[ 10 ] + "] konnte nicht erzeugt werden: " + e.message, (int) treffer[ i ].id );
aktenanlage_erfolgreich = false;
}
if ( aktenanlage_erfolgreich )
{
// sichern der erzeugten Doku-ID
if ( debug == 0 )
{
sqlQuery = "update " + zieltabelle + " set doku_id = '" + newDoc.id + "' where id = " + treffer[ i ].id;
d3.sql.execute( sqlQuery );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage [" + newDoc.field[ 10 ] + "] erfolgreich, doku_id: [" + newDoc.id + "]" );
}
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Keine Aktenanlage fuer [" + newDoc.field[ 10 ] + "] (Debug-Modus eingeschaltet)." );
}
// Eigenverwaltungsakten haben keine fest definierte Unterstruktur, daher ist der Code hier entfernt worden
xlog( d3, 4, "************************************************" );
}
}
def fehler( D3Interface d3, String meldung, int id )
{
def meldung_db;
if ( meldung.length() > 250 )
{
meldung_db = meldung.substring( 0, 249 );
}
else
{
meldung_db = meldung;
}
if ( debug == 0 )
{
sql = "update " + zieltabelle + " set fehler = '" + meldung_db + "' where id = " + id;
d3.sql.execute( sql );
}
xlog( d3, 2, meldung );
}
def xlog( D3Interface d3, int loglevel, String logtext )
{
def logdatei = "d:\\d3\\apps\\" + zieltabelle + ".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;
}

View File

@@ -0,0 +1,599 @@
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");
def prg = "migration_akte.groovy";
def version = "0.1";
def 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;
// In welcher Tabelle soll nach den zu erstellenden Akten gesucht werden?
@Field zieltabelle = "mig_finanzbuchhaltungsakte";
// Konfiguration der Aktenartkürzel
@Field dokuart_sammelakte = "AFBSA";
@Field dokuart_hauptakte = "AFIBA";
@Field dokuart_oberregisterakte = "AFIOR";
@Field dokuart_registerakte = "AFIRA";
// der hier konfigurierte Wert wird verwendet, wenn kein sonstiger Hauptaktenname gefunden wird.
@Field standard_hauptaktenname = "Finanzbuchhaltungs-Akte";
// DDF 1 / ADM_Aktentyp aus der Aktenart ADM_Verwaltung Mandantenakte (AVMNT) - mit diesem Schlüssel werden die benötigten (Ober-)Register aus den Stammdaten in der Aktenart AVMNT ermittelt.
@Field aktenschluessel = "Fibuakte";
/////////////////////////////////////////////////////////////////////////
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, "* Aktenart Sammelakte : " + dokuart_sammelakte );
xlog( d3, 4, "* Aktenart Hauptakte : " + dokuart_hauptakte );
xlog( d3, 4, "* Aktenart Oberregisterakte : " + dokuart_oberregisterakte );
xlog( d3, 4, "* Aktenart Registerakte : " + dokuart_registerakte );
xlog( d3, 4, "* Zieltabelle : " + zieltabelle );
xlog( d3, 4, "* Standard-Hauptaktenname : " + standard_hauptaktenname );
xlog( d3, 4, "* Aktenschluessel : " + aktenschluessel );
xlog( d3, 4, "************************************************" );
def sqlQuery = "select top (100) id,ddf1,ddf48,ddf10,ddf21,ddf22,ddf25,ddf37,ddf42,ddf60,ddf5,ddf69 from " + zieltabelle + " where fehler is null and doku_id is null";
treffer = d3.sql.executeAndGet( (String) sqlQuery );
xlog( d3, 4, " Es wurden " + treffer.size() + " Treffer gefunden." );
xlog( d3, 4, "************************************************" );
if ( treffer.size() > 0 )
{
for ( i = 0; i < treffer.size(); i++ )
{
// Prüfung, ob die Mandantnummer in der Aktennummer zu der Mandantnummer aus der Tabelle passt - andernfalls Fehler.
def mandantnr_aus_aktennr = treffer[ i ].ddf10.substring( 0, 5 );
xlog( d3, 4, "Mandantnummer aus Aktennummer = " + mandantnr_aus_aktennr );
xlog( d3, 4, "Mandantnummer aus Datenbank = " + treffer[ i ].ddf1 );
if ( mandantnr_aus_aktennr == treffer[ i ].ddf1 )
{
// Es wird eine neue Hauptakte erstellt
def newDocfield_1, newDocfield_2, newDocfield_5, newDocfield_10, newDocfield_13, newDocfield_21, newDocfield_22, newDocfield_25, newDocfield_37, newDocfield_42, newDocfield_48, newDocfield_60 = [ ], newDocfield_69 = [ ];
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Mandantennummer DDF1 : [" + treffer[ i ].ddf1 + "]" );
newDocfield_1 = treffer[ i ].ddf1;
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Aktennummer DDF10 : [" + treffer[ i ].ddf10 + "]" );
newDocfield_10 = treffer[ i ].ddf10;
if ( treffer[ i ].ddf5 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Geschaeftsjahr DDF5 : [" + treffer[ i ].ddf5 + "]" );
newDocfield_5 = treffer[ i ].ddf5;
}
else
{
def ddf5neu = treffer[ i ].ddf10.substring( treffer[ i ].ddf10.indexOf( 'FI' ) + 2, treffer[ i ].ddf10.indexOf( 'FI' ) + 6 );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Geschaeftsjahr DDF5 : [" + ddf5neu + "]" );
newDocfield_5 = ddf5neu;
}
if ( treffer[ i ].ddf21 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Aktenname DDF21 : [" + treffer[ i ].ddf21 + "]" );
newDocfield_21 = treffer[ i ].ddf21;
}
else
{
xlog( d3, 3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenname wurde nicht gefunden. Setze Standardbezeichnung '" + standard_hauptaktenname + "'." );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Aktenname DDF21 : <" + standard_hauptaktenname + ">" );
newDocfield_21 = standard_hauptaktenname;
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze physischer Aufbewahrungsort DDF22 : [" + treffer[ i ].ddf22 + "]" );
newDocfield_22 = treffer[ i ].ddf22;
if ( treffer[ i ].ddf25 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Geschaeftsfuehrer DDF25 : [" + treffer[ i ].ddf25 + "]" );
newDocfield_25 = treffer[ i ].ddf25;
}
else
{
def STATEMENT = "select dok_dat_feld_25 from firmen_spezifisch where kue_dokuart = 'AMAND' and dok_dat_feld_1 = '" + newDocfield_1 + "'";
def treffer_STATEMENT = d3.sql.executeAndGet( (String) STATEMENT );
if ( treffer_STATEMENT.size() > 0 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Geschaeftsfuehrer DDF25 aus M.-Akte : [" + treffer_STATEMENT[ 0 ].dok_dat_feld_25 + "]" );
newDocfield_25 = treffer_STATEMENT[ 0 ].dok_dat_feld_25;
}
else
{
xlog( d3, 3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Es konnte kein Wert für Geschaeftsfuehrer / DDF25 gefunden werden." );
}
}
if ( treffer[ i ].ddf37 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Auftragsverantwortlicher DDF37 : [" + treffer[ i ].ddf37 + "]" );
newDocfield_37 = treffer[ i ].ddf37;
}
else
{
def STATEMENT = "select dok_dat_feld_37 from firmen_spezifisch where kue_dokuart = 'AMAND' and dok_dat_feld_1 = '" + newDocfield_1 + "'";
def treffer_STATEMENT = d3.sql.executeAndGet( (String) STATEMENT );
if ( treffer_STATEMENT.size() > 0 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Auftragsverantwortlicher DDF37 aus M.-Akte: [" + treffer_STATEMENT[ 0 ].dok_dat_feld_37 + "]" );
newDocfield_37 = treffer_STATEMENT[ 0 ].dok_dat_feld_37;
}
else
{
xlog( d3, 3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Es konnte kein Wert für Auftragsverantwortlicher / DDF37 gefunden werden." );
}
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Briefkopf DDF42 : [" + treffer[ i ].ddf42 + "]" );
newDocfield_42 = treffer[ i ].ddf42;
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Unique-ID Migration DDF48 : [" + treffer[ i ].ddf48 + "]" );
newDocfield_48 = treffer[ i ].ddf48;
// Postempfänger
if ( treffer[ i ].ddf60 )
{
def splitted_str_array = treffer[ i ].ddf60.split( ';' );
for ( int j = 0; j < splitted_str_array.length; j++ )
{
def filler = " ";
if ( j >= 10 )
{
filler = "";
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Setze Postempfaenger DDF60 / " + filler + j + " : [" + splitted_str_array[ j ] + "]" );
newDocfield_60[ j ] = splitted_str_array[ j ];
}
}
// Berechtigter:
if ( treffer[ i ].ddf69 )
{
def splitted_str_array = treffer[ i ].ddf69.split( ';' );
for ( int j = 0; j < splitted_str_array.length; j++ )
{
def filler = " ";
if ( j >= 10 )
{
filler = "";
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Setze Berechtigter DDF69 / " + filler + j + " : [" + splitted_str_array[ j ] + "]" );
newDocfield_69[ j ] = splitted_str_array[ j ];
}
}
// Prüfung, ob zu dieser Hauptakte eine passende Sammelakte existiert
// Falls ja: Übernahme der Mandantenstammdaten der entsprechenden Akte
// Falls nein: Fehler in DB eintragen und Abbruch der Verarbeitung dieses Treffers
sqlQuery = "select doku_id, dok_dat_feld_1, dok_dat_feld_2, dok_dat_feld_13 from firmen_spezifisch where kue_dokuart = '" + dokuart_sammelakte + "' and dok_dat_feld_1 = '" + treffer[ i ].ddf1 + "'";
ergebnis = d3.sql.executeAndGet( (String) sqlQuery );
if ( ergebnis.size() > 0 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Mandantenname DDF2 : [" + ergebnis[ 0 ].dok_dat_feld_2 + "]" );
newDocfield_2 = ergebnis[ 0 ].dok_dat_feld_2;
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Mandantengruppennummer DDF13 : [" + ergebnis[ 0 ].dok_dat_feld_13 + "]" );
newDocfield_13 = ergebnis[ 0 ].dok_dat_feld_13;
// Akte mit Stammdaten und Infos aus der Tabelle "zieltabelle" erstellen
// Registerstruktur unterhalb ebenfalls erstellen
Document newDoc = d3.archive.newDocument();
newDoc.type = dokuart_hauptakte;
newDoc.status = Document.DocStatus.DOC_STAT_PROCESSING;
newDoc.editor = "dvelop";
newDoc.field[ 1 ] = newDocfield_1;
newDoc.field[ 2 ] = newDocfield_2;
newDoc.field[ 5 ] = newDocfield_5;
newDoc.field[ 10 ] = newDocfield_10;
newDoc.field[ 13 ] = newDocfield_13;
newDoc.field[ 21 ] = newDocfield_21;
newDoc.field[ 22 ] = newDocfield_22;
newDoc.field[ 25 ] = newDocfield_25;
newDoc.field[ 37 ] = newDocfield_37;
newDoc.field[ 42 ] = newDocfield_42;
newDoc.field[ 48 ] = newDocfield_48;
for ( int i = 0; i < newDocfield_60.size(); i++ )
{
newDoc.field[ 60 ][ i + 1 ] = newDocfield_60[ i ];
}
for ( int i = 0; i < newDocfield_69.size(); i++ )
{
newDoc.field[ 69 ][ i + 1 ] = newDocfield_69[ i ];
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": =============================" );
//Pruefung ob die anzulegende Akte ggf. schon im System angelegt wurde
sqlQuery = "select doku_id from firmen_spezifisch where kue_dokuart = '" + dokuart_hauptakte + "' and dok_dat_feld_1 = '" + newDocfield_1 + "' AND dok_dat_feld_10 = '" + newDocfield_10 + "'";
ergebnis = d3.sql.executeAndGet( (String) sqlQuery );
if ( ergebnis.size() > 0 ) {
fehler( d3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage [" + newDoc.field[ 10 ] + "] nicht durchgefuehrt da die Akte bereits existiert doku_id: " + ergebnis[ 0 ].doku_id, (int) treffer[ i ].id );
continue;
}
def aktenanlage_erfolgreich = true;
if ( debug == 0 )
{
try
{
newDoc = d3.archive.importDocument( newDoc );
}
catch ( D3Exception e )
{
fehler( d3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Akte [" + newDoc.field[ 10 ] + "] konnte nicht erzeugt werden: " + e.message, (int) treffer[ i ].id );
aktenanlage_erfolgreich = false;
}
if ( aktenanlage_erfolgreich )
{
// sichern der erzeugten Doku-ID
if ( debug == 0 )
{
sqlQuery = "update " + zieltabelle + " set doku_id = '" + newDoc.id + "' where id = " + treffer[ i ].id;
d3.sql.execute( sqlQuery );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage [" + newDoc.field[ 10 ] + "] erfolgreich, doku_id: [" + newDoc.id + "]" );
}
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Keine Aktenanlage fuer [" + newDoc.field[ 10 ] + "] (Debug-Modus eingeschaltet)." );
}
if ( aktenanlage_erfolgreich )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": =============================" );
//////////////////////////////////////////
// Ebene unterhalb der Hauptakte anlegen
// Dokumentart: Hauptakten-Oberregisterakte, darin alle in den Stammdaten angelegten Oberregister
sqlQuery = "select distinct dok_dat_feld_2 from firmen_spezifisch where kue_dokuart = 'AVMNT' and dok_dat_feld_1 = '" + aktenschluessel + "'";
def resultRows = d3.sql.executeAndGet( (String) sqlQuery );
if ( resultRows.size() > 0 )
{
resultRows.each
{
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": erstelle Oberregister-Akte: [" + it.dok_dat_feld_2 + "]" );
Document newDocOReg = d3.archive.newDocument();
newDocOReg.type = dokuart_oberregisterakte;
newDocOReg.status = Document.DocStatus.DOC_STAT_PROCESSING;
newDocOReg.editor = "dvelop";
newDocOReg.field[ 1 ] = newDocfield_1;
newDocOReg.field[ 2 ] = newDocfield_2;
newDocOReg.field[ 3 ] = it.dok_dat_feld_2; // Oberregister
newDocOReg.field[ 5 ] = newDocfield_5;
newDocOReg.field[ 10 ] = newDocfield_10;
newDocOReg.field[ 13 ] = newDocfield_13;
newDocOReg.field[ 21 ] = newDocfield_21;
newDocOReg.field[ 25 ] = newDocfield_25;
newDocOReg.field[ 42 ] = newDocfield_42;
for ( int i = 0; i < newDocfield_69.size(); i++ )
{
newDocOReg.field[ 69 ][ i + 1 ] = newDocfield_69[ i ];
}
if ( debug == 0 )
{
try
{
newDocOReg = d3.archive.importDocument( newDocOReg );
}
catch ( D3Exception e )
{
xlog( d3, 2, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Akte [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "] konnte nicht erzeugt werden: " + e.message );
aktenanlage_erfolgreich = false;
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Keine Aktenanlage fuer [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "] (Debug-Modus eingeschaltet)." );
}
if ( ( aktenanlage_erfolgreich ) && ( debug == 0 ) )
{
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage erfolgreich, doku_id: [" + newDoc.id + "][" + newDocOReg.id + "]" );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage erfolgreich, doku_id: [" + newDoc.id + "][" + newDocOReg.id + "] Register: [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "]" );
}
}
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Weitere Akten werden wegen Fehler nicht angelegt." );
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": =============================" );
if ( aktenanlage_erfolgreich )
{
//////////////////////////////////////////
// Ebene unterhalb der Hauptakten-Oberregisterakte anlegen
// Dokumentart: Hauptakten-Registerakte, darin alle in den Stammdaten angelegten Register
sqlQuery = "select distinct dok_dat_feld_2, dok_dat_feld_3 from firmen_spezifisch where kue_dokuart = 'AVMNT' and dok_dat_feld_1 = '" + aktenschluessel + "' and dok_dat_feld_3 != ''";
def resultRows = d3.sql.executeAndGet( (String) sqlQuery );
if ( resultRows.size() > 0 )
{
resultRows.each
{
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": erstelle Register-Akte: [" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "]" );
Document newDocReg = d3.archive.newDocument();
newDocReg.type = dokuart_registerakte;
newDocReg.status = Document.DocStatus.DOC_STAT_PROCESSING;
newDocReg.editor = "dvelop";
newDocReg.field[ 1 ] = newDocfield_1;
newDocReg.field[ 2 ] = newDocfield_2;
newDocReg.field[ 3 ] = it.dok_dat_feld_2; // Oberregister
newDocReg.field[ 4 ] = it.dok_dat_feld_3; // Register
newDocReg.field[ 5 ] = newDocfield_5;
newDocReg.field[ 10 ] = newDocfield_10;
newDocReg.field[ 13 ] = newDocfield_13;
newDocReg.field[ 21 ] = newDocfield_21;
newDocReg.field[ 25 ] = newDocfield_25;
newDocReg.field[ 42 ] = newDocfield_42;
for ( int i = 0; i < newDocfield_69.size(); i++ )
{
newDocReg.field[ 69 ][ i + 1 ] = newDocfield_69[ i ];
}
if ( debug == 0 )
{
try
{
newDocReg = d3.archive.importDocument( newDocReg );
}
catch ( D3Exception e )
{
xlog( d3, 2, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Akte [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "] konnte nicht erzeugt werden: " + e.message );
aktenanlage_erfolgreich = false;
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Keine Aktenanlage fuer [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "] (Debug-Modus eingeschaltet)." );
}
if ( ( aktenanlage_erfolgreich ) && ( debug == 0 ) )
{
sqlQuery = "select doku_id from firmen_spezifisch where kue_dokuart = '" + dokuart_oberregisterakte + "' and dok_dat_feld_10 = '" + newDoc.field[ 10 ] + "' and dok_dat_feld_3 = '" + it.dok_dat_feld_2 + "'";
//xlog( d3, 3, sqlQuery );
e = d3.sql.executeAndGet( sqlQuery );
def oregdokuid;
if ( e.size() > 0 )
{
oregdokuid = e[0].doku_id;
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage erfolgreich, doku_id: [" + newDoc.id + "][" + oregdokuid + "][" + newDocReg.id + "] Register: [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "]" );
}
}
}
}
}
else
{
fehler( d3, "Es wurde keine passende Sammelakte gefunden. [" + treffer[ i ].ddf10 + "]", (int) treffer[ i ].id );
}
xlog( d3, 4, "************************************************" );
}
else
{
// Fehler
fehler( d3, "Mandantennummer in Tabelle und in Aktennummer unterscheiden sich.", (int) treffer[ i ].id );
}
}
}
def fehler( D3Interface d3, String meldung, int id )
{
def meldung_db;
if ( meldung.length() > 250 )
{
meldung_db = meldung.substring( 0, 249 );
}
else
{
meldung_db = meldung;
}
if ( debug == 0 )
{
sql = "update " + zieltabelle + " set fehler = '" + meldung_db + "' where id = " + id;
d3.sql.execute( sql );
}
xlog( d3, 2, meldung );
}
def xlog( D3Interface d3, int loglevel, String logtext )
{
def logdatei = "d:\\d3\\apps\\" + zieltabelle + ".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;
}

View File

@@ -0,0 +1,601 @@
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");
def prg = "migration_akte.groovy";
def version = "0.1";
def 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;
// In welcher Tabelle soll nach den zu erstellenden Akten gesucht werden?
@Field zieltabelle = "mig_jahresabschlussakte";
// Konfiguration der Aktenartkürzel
@Field dokuart_sammelakte = "AJASA";
@Field dokuart_hauptakte = "AJAAA";
@Field dokuart_oberregisterakte = "AJAOB";
@Field dokuart_registerakte = "AJAAB";
// der hier konfigurierte Wert wird verwendet, wenn kein sonstiger Hauptaktenname gefunden wird.
@Field standard_hauptaktenname = "Jahresabschlussakte";
// DDF 1 / ADM_Aktentyp aus der Aktenart ADM_Verwaltung Mandantenakte (AVMNT) - mit diesem Schlüssel werden die benötigten (Ober-)Register aus den Stammdaten in der Aktenart AVMNT ermittelt.
@Field aktenschluessel = "Jahresabschlussakte";
/////////////////////////////////////////////////////////////////////////
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, "* Aktenart Sammelakte : " + dokuart_sammelakte );
xlog( d3, 4, "* Aktenart Hauptakte : " + dokuart_hauptakte );
xlog( d3, 4, "* Aktenart Oberregisterakte : " + dokuart_oberregisterakte );
xlog( d3, 4, "* Aktenart Registerakte : " + dokuart_registerakte );
xlog( d3, 4, "* Zieltabelle : " + zieltabelle );
xlog( d3, 4, "* Standard-Hauptaktenname : " + standard_hauptaktenname );
xlog( d3, 4, "* Aktenschluessel : " + aktenschluessel );
xlog( d3, 4, "************************************************" );
def sqlQuery = "select top (100) id,ddf1,ddf48,ddf10,ddf21,ddf22,ddf25,ddf37,ddf42,ddf60,ddf69 from " + zieltabelle + " where fehler is null and doku_id is null and id < 7000 ";
treffer = d3.sql.executeAndGet( (String) sqlQuery );
xlog( d3, 4, " Es wurden " + treffer.size() + " Treffer gefunden." );
xlog( d3, 4, "************************************************" );
if ( treffer.size() > 0 )
{
for ( i = 0; i < treffer.size(); i++ )
{
// Prüfung, ob die Mandantnummer in der Aktennummer zu der Mandantnummer aus der Tabelle passt - andernfalls Fehler.
def mandantnr_aus_aktennr = treffer[ i ].ddf10.substring( 0, 5 );
//JFEL toString eingebaut
//if ( mandantnr_aus_aktennr == treffer[ i ].ddf1 )
if ( mandantnr_aus_aktennr == treffer[ i ].ddf1.toString() )
{
// Es wird eine neue Hauptakte erstellt
def newDocfield_1, newDocfield_2, newDocfield_5, newDocfield_10, newDocfield_13, newDocfield_21, newDocfield_22, newDocfield_25, newDocfield_37, newDocfield_42, newDocfield_48, newDocfield_60 = [ ], newDocfield_69 = [ ];
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Mandantennummer DDF1 : [" + treffer[ i ].ddf1 + "]" );
//JFEL toString eingebaut
//newDocfield_1 = treffer[ i ].ddf1;
newDocfield_1 = treffer[ i ].ddf1.toString();
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Aktennummer DDF10 : [" + treffer[ i ].ddf10 + "]" );
newDocfield_10 = treffer[ i ].ddf10;
//Auskommentiert, da aktuell das ddf5, also das Geschaeftsjahr, nicht in der Tabelle mitgeliefert wird
// if ( treffer[ i ]?.ddf5 )
// {
// xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Geschaeftsjahr DDF5 : [" + treffer[ i ].ddf5 + "]" );
// newDocfield_5 = treffer[ i ].ddf5;
// }
// else
// {
def ddf5neu = treffer[ i ].ddf10.substring( treffer[ i ].ddf10.indexOf( 'JA' ) + 2, treffer[ i ].ddf10.indexOf( 'JA' ) + 6 );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Geschaeftsjahr DDF5 : [" + ddf5neu + "]" );
newDocfield_5 = ddf5neu;
// }
if ( treffer[ i ].ddf21 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Aktenname DDF21 : [" + treffer[ i ].ddf21 + "]" );
newDocfield_21 = treffer[ i ].ddf21;
}
else
{
xlog( d3, 3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenname wurde nicht gefunden. Setze Standardbezeichnung '" + standard_hauptaktenname + "'." );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Aktenname DDF21 : <" + standard_hauptaktenname + ">" );
newDocfield_21 = standard_hauptaktenname;
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze physischer Aufbewahrungsort DDF22 : [" + treffer[ i ].ddf22 + "]" );
newDocfield_22 = treffer[ i ].ddf22;
if ( treffer[ i ].ddf25 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Geschaeftsfuehrer DDF25 : [" + treffer[ i ].ddf25 + "]" );
newDocfield_25 = treffer[ i ].ddf25;
}
else
{
def STATEMENT = "select dok_dat_feld_25 from firmen_spezifisch where kue_dokuart = 'AMAND' and dok_dat_feld_1 = '" + newDocfield_1 + "'";
def treffer_STATEMENT = d3.sql.executeAndGet( (String) STATEMENT );
if ( treffer_STATEMENT.size() > 0 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Geschaeftsfuehrer DDF25 aus M.-Akte : [" + treffer_STATEMENT[ 0 ].dok_dat_feld_25 + "]" );
newDocfield_25 = treffer_STATEMENT[ 0 ].dok_dat_feld_25;
}
else
{
xlog( d3, 3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Es konnte kein Wert für Geschaeftsfuehrer / DDF25 gefunden werden." );
}
}
if ( treffer[ i ].ddf37 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Auftragsverantwortlicher DDF37 : [" + treffer[ i ].ddf37 + "]" );
newDocfield_37 = treffer[ i ].ddf37;
}
else
{
def STATEMENT = "select dok_dat_feld_37 from firmen_spezifisch where kue_dokuart = 'AMAND' and dok_dat_feld_1 = '" + newDocfield_1 + "'";
def treffer_STATEMENT = d3.sql.executeAndGet( (String) STATEMENT );
if ( treffer_STATEMENT.size() > 0 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Auftragsverantwortlicher DDF37 aus M.-Akte: [" + treffer_STATEMENT[ 0 ].dok_dat_feld_37 + "]" );
newDocfield_37 = treffer_STATEMENT[ 0 ].dok_dat_feld_37;
}
else
{
xlog( d3, 3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Es konnte kein Wert für Auftragsverantwortlicher / DDF37 gefunden werden." );
}
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Briefkopf DDF42 : [" + treffer[ i ].ddf42 + "]" );
newDocfield_42 = treffer[ i ].ddf42;
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Unique-ID Migration DDF48 : [" + treffer[ i ].ddf48 + "]" );
newDocfield_48 = treffer[ i ].ddf48;
// Postempfänger
if ( treffer[ i ].ddf60 )
{
def splitted_str_array = treffer[ i ].ddf60.split( ';' );
for ( int j = 0; j < splitted_str_array.length; j++ )
{
def filler = " ";
if ( j >= 10 )
{
filler = "";
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Setze Postempfaenger DDF60 / " + filler + j + " : [" + splitted_str_array[ j ] + "]" );
newDocfield_60[ j ] = splitted_str_array[ j ];
}
}
// Berechtigter:
if ( treffer[ i ].ddf69 )
{
def splitted_str_array = treffer[ i ].ddf69.split( ';' );
for ( int j = 0; j < splitted_str_array.length; j++ )
{
def filler = " ";
if ( j >= 10 )
{
filler = "";
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Setze Berechtigter DDF69 / " + filler + j + " : [" + splitted_str_array[ j ] + "]" );
newDocfield_69[ j ] = splitted_str_array[ j ];
}
}
// Prüfung, ob zu dieser Hauptakte eine passende Sammelakte existiert
// Falls ja: Übernahme der Mandantenstammdaten der entsprechenden Akte
// Falls nein: Fehler in DB eintragen und Abbruch der Verarbeitung dieses Treffers
sqlQuery = "select doku_id, dok_dat_feld_1, dok_dat_feld_2, dok_dat_feld_13 from firmen_spezifisch where kue_dokuart = '" + dokuart_sammelakte + "' and dok_dat_feld_1 = '" + treffer[ i ].ddf1 + "'";
ergebnis = d3.sql.executeAndGet( (String) sqlQuery );
if ( ergebnis.size() > 0 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Mandantenname DDF2 : [" + ergebnis[ 0 ].dok_dat_feld_2 + "]" );
newDocfield_2 = ergebnis[ 0 ].dok_dat_feld_2;
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Mandantengruppennummer DDF13 : [" + ergebnis[ 0 ].dok_dat_feld_13 + "]" );
newDocfield_13 = ergebnis[ 0 ].dok_dat_feld_13;
// Akte mit Stammdaten und Infos aus der Tabelle "zieltabelle" erstellen
// Registerstruktur unterhalb ebenfalls erstellen
Document newDoc = d3.archive.newDocument();
newDoc.type = dokuart_hauptakte;
newDoc.status = Document.DocStatus.DOC_STAT_PROCESSING;
newDoc.editor = "dvelop";
newDoc.field[ 1 ] = newDocfield_1;
newDoc.field[ 2 ] = newDocfield_2;
newDoc.field[ 5 ] = newDocfield_5;
newDoc.field[ 10 ] = newDocfield_10;
newDoc.field[ 13 ] = newDocfield_13;
newDoc.field[ 21 ] = newDocfield_21;
newDoc.field[ 22 ] = newDocfield_22;
newDoc.field[ 25 ] = newDocfield_25;
newDoc.field[ 37 ] = newDocfield_37;
newDoc.field[ 42 ] = newDocfield_42;
newDoc.field[ 48 ] = newDocfield_48;
for ( int i = 0; i < newDocfield_60.size(); i++ )
{
newDoc.field[ 60 ][ i + 1 ] = newDocfield_60[ i ];
}
for ( int i = 0; i < newDocfield_69.size(); i++ )
{
newDoc.field[ 69 ][ i + 1 ] = newDocfield_69[ i ];
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": =============================" );
//Pruefung ob die anzulegende Akte ggf. schon im System angelegt wurde
sqlQuery = "select doku_id from firmen_spezifisch where kue_dokuart = '" + dokuart_hauptakte + "' and dok_dat_feld_1 = '" + newDocfield_1 + "' AND dok_dat_feld_10 = '" + newDocfield_10 + "'";
ergebnis = d3.sql.executeAndGet( (String) sqlQuery );
if ( ergebnis.size() > 0 ) {
fehler( d3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage [" + newDoc.field[ 10 ] + "] nicht durchgefuehrt da die Akte bereits existiert doku_id: " + ergebnis[ 0 ].doku_id, (int) treffer[ i ].id );
continue;
}
def aktenanlage_erfolgreich = true;
if ( debug == 0 )
{
try
{
newDoc = d3.archive.importDocument( newDoc );
}
catch ( D3Exception e )
{
fehler( d3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Akte [" + newDoc.field[ 10 ] + "] konnte nicht erzeugt werden: " + e.message, (int) treffer[ i ].id );
aktenanlage_erfolgreich = false;
}
if ( aktenanlage_erfolgreich )
{
// sichern der erzeugten Doku-ID
if ( debug == 0 )
{
sqlQuery = "update " + zieltabelle + " set doku_id = '" + newDoc.id + "' where id = " + treffer[ i ].id;
d3.sql.execute( sqlQuery );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage [" + newDoc.field[ 10 ] + "] erfolgreich, doku_id: [" + newDoc.id + "]" );
}
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Keine Aktenanlage fuer [" + newDoc.field[ 10 ] + "] (Debug-Modus eingeschaltet)." );
}
if ( aktenanlage_erfolgreich )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": =============================" );
//////////////////////////////////////////
// Ebene unterhalb der Hauptakte anlegen
// Dokumentart: Hauptakten-Oberregisterakte, darin alle in den Stammdaten angelegten Oberregister
sqlQuery = "select distinct dok_dat_feld_2 from firmen_spezifisch where kue_dokuart = 'AVMNT' and dok_dat_feld_1 = '" + aktenschluessel + "'";
def resultRows = d3.sql.executeAndGet( (String) sqlQuery );
if ( resultRows.size() > 0 )
{
resultRows.each
{
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": erstelle Oberregister-Akte: [" + it.dok_dat_feld_2 + "]" );
Document newDocOReg = d3.archive.newDocument();
newDocOReg.type = dokuart_oberregisterakte;
newDocOReg.status = Document.DocStatus.DOC_STAT_PROCESSING;
newDocOReg.editor = "dvelop";
newDocOReg.field[ 1 ] = newDocfield_1;
newDocOReg.field[ 2 ] = newDocfield_2;
newDocOReg.field[ 3 ] = it.dok_dat_feld_2; // Oberregister
newDocOReg.field[ 5 ] = newDocfield_5;
newDocOReg.field[ 10 ] = newDocfield_10;
newDocOReg.field[ 13 ] = newDocfield_13;
newDocOReg.field[ 21 ] = newDocfield_21;
newDocOReg.field[ 25 ] = newDocfield_25;
newDocOReg.field[ 42 ] = newDocfield_42;
for ( int i = 0; i < newDocfield_69.size(); i++ )
{
newDocOReg.field[ 69 ][ i + 1 ] = newDocfield_69[ i ];
}
if ( debug == 0 )
{
try
{
newDocOReg = d3.archive.importDocument( newDocOReg );
}
catch ( D3Exception e )
{
xlog( d3, 2, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Akte [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "] konnte nicht erzeugt werden: " + e.message );
aktenanlage_erfolgreich = false;
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Keine Aktenanlage fuer [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "] (Debug-Modus eingeschaltet)." );
}
if ( ( aktenanlage_erfolgreich ) && ( debug == 0 ) )
{
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage erfolgreich, doku_id: [" + newDoc.id + "][" + newDocOReg.id + "]" );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage erfolgreich, doku_id: [" + newDoc.id + "][" + newDocOReg.id + "] Register: [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "]" );
}
}
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Weitere Akten werden wegen Fehler nicht angelegt." );
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": =============================" );
if ( aktenanlage_erfolgreich )
{
//////////////////////////////////////////
// Ebene unterhalb der Hauptakten-Oberregisterakte anlegen
// Dokumentart: Hauptakten-Registerakte, darin alle in den Stammdaten angelegten Register
sqlQuery = "select distinct dok_dat_feld_2, dok_dat_feld_3 from firmen_spezifisch where kue_dokuart = 'AVMNT' and dok_dat_feld_1 = '" + aktenschluessel + "' and dok_dat_feld_3 != ''";
def resultRows = d3.sql.executeAndGet( (String) sqlQuery );
if ( resultRows.size() > 0 )
{
resultRows.each
{
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": erstelle Register-Akte: [" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "]" );
Document newDocReg = d3.archive.newDocument();
newDocReg.type = dokuart_registerakte;
newDocReg.status = Document.DocStatus.DOC_STAT_PROCESSING;
newDocReg.editor = "dvelop";
newDocReg.field[ 1 ] = newDocfield_1;
newDocReg.field[ 2 ] = newDocfield_2;
newDocReg.field[ 3 ] = it.dok_dat_feld_2; // Oberregister
newDocReg.field[ 4 ] = it.dok_dat_feld_3; // Register
newDocReg.field[ 5 ] = newDocfield_5;
newDocReg.field[ 10 ] = newDocfield_10;
newDocReg.field[ 13 ] = newDocfield_13;
newDocReg.field[ 21 ] = newDocfield_21;
newDocReg.field[ 25 ] = newDocfield_25;
newDocReg.field[ 42 ] = newDocfield_42;
for ( int i = 0; i < newDocfield_69.size(); i++ )
{
newDocReg.field[ 69 ][ i + 1 ] = newDocfield_69[ i ];
}
if ( debug == 0 )
{
try
{
newDocReg = d3.archive.importDocument( newDocReg );
}
catch ( D3Exception e )
{
xlog( d3, 2, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Akte [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "] konnte nicht erzeugt werden: " + e.message );
aktenanlage_erfolgreich = false;
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Keine Aktenanlage fuer [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "] (Debug-Modus eingeschaltet)." );
}
if ( ( aktenanlage_erfolgreich ) && ( debug == 0 ) )
{
sqlQuery = "select doku_id from firmen_spezifisch where kue_dokuart = '" + dokuart_oberregisterakte + "' and dok_dat_feld_10 = '" + newDoc.field[ 10 ] + "' and dok_dat_feld_3 = '" + it.dok_dat_feld_2 + "'";
//xlog( d3, 3, sqlQuery );
e = d3.sql.executeAndGet( sqlQuery );
def oregdokuid;
if ( e.size() > 0 )
{
oregdokuid = e[0].doku_id;
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage erfolgreich, doku_id: [" + newDoc.id + "][" + oregdokuid + "][" + newDocReg.id + "] Register: [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "]" );
}
}
}
}
}
else
{
fehler( d3, "Es wurde keine passende Sammelakte gefunden. [" + treffer[ i ].ddf10 + "]", (int) treffer[ i ].id );
}
xlog( d3, 4, "************************************************" );
}
else
{
// Fehler
fehler( d3, "Mandantennummer in Tabelle und in Aktennummer unterscheiden sich.", (int) treffer[ i ].id );
}
}
}
def fehler( D3Interface d3, String meldung, int id )
{
def meldung_db;
if ( meldung.length() > 250 )
{
meldung_db = meldung.substring( 0, 249 );
}
else
{
meldung_db = meldung;
}
if ( debug == 0 )
{
sql = "update " + zieltabelle + " set fehler = '" + meldung_db + "' where id = " + id;
d3.sql.execute( sql );
}
xlog( d3, 2, meldung );
}
def xlog( D3Interface d3, int loglevel, String logtext )
{
def logdatei = "d:\\d3\\apps\\" + zieltabelle + "_1.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;
}

View File

@@ -0,0 +1,601 @@
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");
def prg = "migration_akte.groovy";
def version = "0.1";
def 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;
// In welcher Tabelle soll nach den zu erstellenden Akten gesucht werden?
@Field zieltabelle = "mig_jahresabschlussakte";
// Konfiguration der Aktenartkürzel
@Field dokuart_sammelakte = "AJASA";
@Field dokuart_hauptakte = "AJAAA";
@Field dokuart_oberregisterakte = "AJAOB";
@Field dokuart_registerakte = "AJAAB";
// der hier konfigurierte Wert wird verwendet, wenn kein sonstiger Hauptaktenname gefunden wird.
@Field standard_hauptaktenname = "Jahresabschlussakte";
// DDF 1 / ADM_Aktentyp aus der Aktenart ADM_Verwaltung Mandantenakte (AVMNT) - mit diesem Schlüssel werden die benötigten (Ober-)Register aus den Stammdaten in der Aktenart AVMNT ermittelt.
@Field aktenschluessel = "Jahresabschlussakte";
/////////////////////////////////////////////////////////////////////////
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, "* Aktenart Sammelakte : " + dokuart_sammelakte );
xlog( d3, 4, "* Aktenart Hauptakte : " + dokuart_hauptakte );
xlog( d3, 4, "* Aktenart Oberregisterakte : " + dokuart_oberregisterakte );
xlog( d3, 4, "* Aktenart Registerakte : " + dokuart_registerakte );
xlog( d3, 4, "* Zieltabelle : " + zieltabelle );
xlog( d3, 4, "* Standard-Hauptaktenname : " + standard_hauptaktenname );
xlog( d3, 4, "* Aktenschluessel : " + aktenschluessel );
xlog( d3, 4, "************************************************" );
def sqlQuery = "select top (100) id,ddf1,ddf48,ddf10,ddf21,ddf22,ddf25,ddf37,ddf42,ddf60,ddf69 from " + zieltabelle + " where fehler is null and doku_id is null and id >= 7000 ";
treffer = d3.sql.executeAndGet( (String) sqlQuery );
xlog( d3, 4, " Es wurden " + treffer.size() + " Treffer gefunden." );
xlog( d3, 4, "************************************************" );
if ( treffer.size() > 0 )
{
for ( i = 0; i < treffer.size(); i++ )
{
// Prüfung, ob die Mandantnummer in der Aktennummer zu der Mandantnummer aus der Tabelle passt - andernfalls Fehler.
def mandantnr_aus_aktennr = treffer[ i ].ddf10.substring( 0, 5 );
//JFEL toString eingebaut
//if ( mandantnr_aus_aktennr == treffer[ i ].ddf1 )
if ( mandantnr_aus_aktennr == treffer[ i ].ddf1.toString() )
{
// Es wird eine neue Hauptakte erstellt
def newDocfield_1, newDocfield_2, newDocfield_5, newDocfield_10, newDocfield_13, newDocfield_21, newDocfield_22, newDocfield_25, newDocfield_37, newDocfield_42, newDocfield_48, newDocfield_60 = [ ], newDocfield_69 = [ ];
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Mandantennummer DDF1 : [" + treffer[ i ].ddf1 + "]" );
//JFEL toString eingebaut
//newDocfield_1 = treffer[ i ].ddf1;
newDocfield_1 = treffer[ i ].ddf1.toString();
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Aktennummer DDF10 : [" + treffer[ i ].ddf10 + "]" );
newDocfield_10 = treffer[ i ].ddf10;
//Auskommentiert, da aktuell das ddf5, also das Geschaeftsjahr, nicht in der Tabelle mitgeliefert wird
// if ( treffer[ i ]?.ddf5 )
// {
// xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Geschaeftsjahr DDF5 : [" + treffer[ i ].ddf5 + "]" );
// newDocfield_5 = treffer[ i ].ddf5;
// }
// else
// {
def ddf5neu = treffer[ i ].ddf10.substring( treffer[ i ].ddf10.indexOf( 'JA' ) + 2, treffer[ i ].ddf10.indexOf( 'JA' ) + 6 );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Geschaeftsjahr DDF5 : [" + ddf5neu + "]" );
newDocfield_5 = ddf5neu;
// }
if ( treffer[ i ].ddf21 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Aktenname DDF21 : [" + treffer[ i ].ddf21 + "]" );
newDocfield_21 = treffer[ i ].ddf21;
}
else
{
xlog( d3, 3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenname wurde nicht gefunden. Setze Standardbezeichnung '" + standard_hauptaktenname + "'." );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Aktenname DDF21 : <" + standard_hauptaktenname + ">" );
newDocfield_21 = standard_hauptaktenname;
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze physischer Aufbewahrungsort DDF22 : [" + treffer[ i ].ddf22 + "]" );
newDocfield_22 = treffer[ i ].ddf22;
if ( treffer[ i ].ddf25 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Geschaeftsfuehrer DDF25 : [" + treffer[ i ].ddf25 + "]" );
newDocfield_25 = treffer[ i ].ddf25;
}
else
{
def STATEMENT = "select dok_dat_feld_25 from firmen_spezifisch where kue_dokuart = 'AMAND' and dok_dat_feld_1 = '" + newDocfield_1 + "'";
def treffer_STATEMENT = d3.sql.executeAndGet( (String) STATEMENT );
if ( treffer_STATEMENT.size() > 0 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Geschaeftsfuehrer DDF25 aus M.-Akte : [" + treffer_STATEMENT[ 0 ].dok_dat_feld_25 + "]" );
newDocfield_25 = treffer_STATEMENT[ 0 ].dok_dat_feld_25;
}
else
{
xlog( d3, 3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Es konnte kein Wert für Geschaeftsfuehrer / DDF25 gefunden werden." );
}
}
if ( treffer[ i ].ddf37 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Auftragsverantwortlicher DDF37 : [" + treffer[ i ].ddf37 + "]" );
newDocfield_37 = treffer[ i ].ddf37;
}
else
{
def STATEMENT = "select dok_dat_feld_37 from firmen_spezifisch where kue_dokuart = 'AMAND' and dok_dat_feld_1 = '" + newDocfield_1 + "'";
def treffer_STATEMENT = d3.sql.executeAndGet( (String) STATEMENT );
if ( treffer_STATEMENT.size() > 0 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Auftragsverantwortlicher DDF37 aus M.-Akte: [" + treffer_STATEMENT[ 0 ].dok_dat_feld_37 + "]" );
newDocfield_37 = treffer_STATEMENT[ 0 ].dok_dat_feld_37;
}
else
{
xlog( d3, 3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Es konnte kein Wert für Auftragsverantwortlicher / DDF37 gefunden werden." );
}
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Briefkopf DDF42 : [" + treffer[ i ].ddf42 + "]" );
newDocfield_42 = treffer[ i ].ddf42;
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Unique-ID Migration DDF48 : [" + treffer[ i ].ddf48 + "]" );
newDocfield_48 = treffer[ i ].ddf48;
// Postempfänger
if ( treffer[ i ].ddf60 )
{
def splitted_str_array = treffer[ i ].ddf60.split( ';' );
for ( int j = 0; j < splitted_str_array.length; j++ )
{
def filler = " ";
if ( j >= 10 )
{
filler = "";
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Setze Postempfaenger DDF60 / " + filler + j + " : [" + splitted_str_array[ j ] + "]" );
newDocfield_60[ j ] = splitted_str_array[ j ];
}
}
// Berechtigter:
if ( treffer[ i ].ddf69 )
{
def splitted_str_array = treffer[ i ].ddf69.split( ';' );
for ( int j = 0; j < splitted_str_array.length; j++ )
{
def filler = " ";
if ( j >= 10 )
{
filler = "";
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Setze Berechtigter DDF69 / " + filler + j + " : [" + splitted_str_array[ j ] + "]" );
newDocfield_69[ j ] = splitted_str_array[ j ];
}
}
// Prüfung, ob zu dieser Hauptakte eine passende Sammelakte existiert
// Falls ja: Übernahme der Mandantenstammdaten der entsprechenden Akte
// Falls nein: Fehler in DB eintragen und Abbruch der Verarbeitung dieses Treffers
sqlQuery = "select doku_id, dok_dat_feld_1, dok_dat_feld_2, dok_dat_feld_13 from firmen_spezifisch where kue_dokuart = '" + dokuart_sammelakte + "' and dok_dat_feld_1 = '" + treffer[ i ].ddf1 + "'";
ergebnis = d3.sql.executeAndGet( (String) sqlQuery );
if ( ergebnis.size() > 0 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Mandantenname DDF2 : [" + ergebnis[ 0 ].dok_dat_feld_2 + "]" );
newDocfield_2 = ergebnis[ 0 ].dok_dat_feld_2;
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Mandantengruppennummer DDF13 : [" + ergebnis[ 0 ].dok_dat_feld_13 + "]" );
newDocfield_13 = ergebnis[ 0 ].dok_dat_feld_13;
// Akte mit Stammdaten und Infos aus der Tabelle "zieltabelle" erstellen
// Registerstruktur unterhalb ebenfalls erstellen
Document newDoc = d3.archive.newDocument();
newDoc.type = dokuart_hauptakte;
newDoc.status = Document.DocStatus.DOC_STAT_PROCESSING;
newDoc.editor = "dvelop";
newDoc.field[ 1 ] = newDocfield_1;
newDoc.field[ 2 ] = newDocfield_2;
newDoc.field[ 5 ] = newDocfield_5;
newDoc.field[ 10 ] = newDocfield_10;
newDoc.field[ 13 ] = newDocfield_13;
newDoc.field[ 21 ] = newDocfield_21;
newDoc.field[ 22 ] = newDocfield_22;
newDoc.field[ 25 ] = newDocfield_25;
newDoc.field[ 37 ] = newDocfield_37;
newDoc.field[ 42 ] = newDocfield_42;
newDoc.field[ 48 ] = newDocfield_48;
for ( int i = 0; i < newDocfield_60.size(); i++ )
{
newDoc.field[ 60 ][ i + 1 ] = newDocfield_60[ i ];
}
for ( int i = 0; i < newDocfield_69.size(); i++ )
{
newDoc.field[ 69 ][ i + 1 ] = newDocfield_69[ i ];
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": =============================" );
//Pruefung ob die anzulegende Akte ggf. schon im System angelegt wurde
sqlQuery = "select doku_id from firmen_spezifisch where kue_dokuart = '" + dokuart_hauptakte + "' and dok_dat_feld_1 = '" + newDocfield_1 + "' AND dok_dat_feld_10 = '" + newDocfield_10 + "'";
ergebnis = d3.sql.executeAndGet( (String) sqlQuery );
if ( ergebnis.size() > 0 ) {
fehler( d3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage [" + newDoc.field[ 10 ] + "] nicht durchgefuehrt da die Akte bereits existiert doku_id: " + ergebnis[ 0 ].doku_id, (int) treffer[ i ].id );
continue;
}
def aktenanlage_erfolgreich = true;
if ( debug == 0 )
{
try
{
newDoc = d3.archive.importDocument( newDoc );
}
catch ( D3Exception e )
{
fehler( d3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Akte [" + newDoc.field[ 10 ] + "] konnte nicht erzeugt werden: " + e.message, (int) treffer[ i ].id );
aktenanlage_erfolgreich = false;
}
if ( aktenanlage_erfolgreich )
{
// sichern der erzeugten Doku-ID
if ( debug == 0 )
{
sqlQuery = "update " + zieltabelle + " set doku_id = '" + newDoc.id + "' where id = " + treffer[ i ].id;
d3.sql.execute( sqlQuery );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage [" + newDoc.field[ 10 ] + "] erfolgreich, doku_id: [" + newDoc.id + "]" );
}
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Keine Aktenanlage fuer [" + newDoc.field[ 10 ] + "] (Debug-Modus eingeschaltet)." );
}
if ( aktenanlage_erfolgreich )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": =============================" );
//////////////////////////////////////////
// Ebene unterhalb der Hauptakte anlegen
// Dokumentart: Hauptakten-Oberregisterakte, darin alle in den Stammdaten angelegten Oberregister
sqlQuery = "select distinct dok_dat_feld_2 from firmen_spezifisch where kue_dokuart = 'AVMNT' and dok_dat_feld_1 = '" + aktenschluessel + "'";
def resultRows = d3.sql.executeAndGet( (String) sqlQuery );
if ( resultRows.size() > 0 )
{
resultRows.each
{
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": erstelle Oberregister-Akte: [" + it.dok_dat_feld_2 + "]" );
Document newDocOReg = d3.archive.newDocument();
newDocOReg.type = dokuart_oberregisterakte;
newDocOReg.status = Document.DocStatus.DOC_STAT_PROCESSING;
newDocOReg.editor = "dvelop";
newDocOReg.field[ 1 ] = newDocfield_1;
newDocOReg.field[ 2 ] = newDocfield_2;
newDocOReg.field[ 3 ] = it.dok_dat_feld_2; // Oberregister
newDocOReg.field[ 5 ] = newDocfield_5;
newDocOReg.field[ 10 ] = newDocfield_10;
newDocOReg.field[ 13 ] = newDocfield_13;
newDocOReg.field[ 21 ] = newDocfield_21;
newDocOReg.field[ 25 ] = newDocfield_25;
newDocOReg.field[ 42 ] = newDocfield_42;
for ( int i = 0; i < newDocfield_69.size(); i++ )
{
newDocOReg.field[ 69 ][ i + 1 ] = newDocfield_69[ i ];
}
if ( debug == 0 )
{
try
{
newDocOReg = d3.archive.importDocument( newDocOReg );
}
catch ( D3Exception e )
{
xlog( d3, 2, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Akte [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "] konnte nicht erzeugt werden: " + e.message );
aktenanlage_erfolgreich = false;
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Keine Aktenanlage fuer [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "] (Debug-Modus eingeschaltet)." );
}
if ( ( aktenanlage_erfolgreich ) && ( debug == 0 ) )
{
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage erfolgreich, doku_id: [" + newDoc.id + "][" + newDocOReg.id + "]" );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage erfolgreich, doku_id: [" + newDoc.id + "][" + newDocOReg.id + "] Register: [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "]" );
}
}
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Weitere Akten werden wegen Fehler nicht angelegt." );
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": =============================" );
if ( aktenanlage_erfolgreich )
{
//////////////////////////////////////////
// Ebene unterhalb der Hauptakten-Oberregisterakte anlegen
// Dokumentart: Hauptakten-Registerakte, darin alle in den Stammdaten angelegten Register
sqlQuery = "select distinct dok_dat_feld_2, dok_dat_feld_3 from firmen_spezifisch where kue_dokuart = 'AVMNT' and dok_dat_feld_1 = '" + aktenschluessel + "' and dok_dat_feld_3 != ''";
def resultRows = d3.sql.executeAndGet( (String) sqlQuery );
if ( resultRows.size() > 0 )
{
resultRows.each
{
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": erstelle Register-Akte: [" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "]" );
Document newDocReg = d3.archive.newDocument();
newDocReg.type = dokuart_registerakte;
newDocReg.status = Document.DocStatus.DOC_STAT_PROCESSING;
newDocReg.editor = "dvelop";
newDocReg.field[ 1 ] = newDocfield_1;
newDocReg.field[ 2 ] = newDocfield_2;
newDocReg.field[ 3 ] = it.dok_dat_feld_2; // Oberregister
newDocReg.field[ 4 ] = it.dok_dat_feld_3; // Register
newDocReg.field[ 5 ] = newDocfield_5;
newDocReg.field[ 10 ] = newDocfield_10;
newDocReg.field[ 13 ] = newDocfield_13;
newDocReg.field[ 21 ] = newDocfield_21;
newDocReg.field[ 25 ] = newDocfield_25;
newDocReg.field[ 42 ] = newDocfield_42;
for ( int i = 0; i < newDocfield_69.size(); i++ )
{
newDocReg.field[ 69 ][ i + 1 ] = newDocfield_69[ i ];
}
if ( debug == 0 )
{
try
{
newDocReg = d3.archive.importDocument( newDocReg );
}
catch ( D3Exception e )
{
xlog( d3, 2, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Akte [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "] konnte nicht erzeugt werden: " + e.message );
aktenanlage_erfolgreich = false;
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Keine Aktenanlage fuer [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "] (Debug-Modus eingeschaltet)." );
}
if ( ( aktenanlage_erfolgreich ) && ( debug == 0 ) )
{
sqlQuery = "select doku_id from firmen_spezifisch where kue_dokuart = '" + dokuart_oberregisterakte + "' and dok_dat_feld_10 = '" + newDoc.field[ 10 ] + "' and dok_dat_feld_3 = '" + it.dok_dat_feld_2 + "'";
//xlog( d3, 3, sqlQuery );
e = d3.sql.executeAndGet( sqlQuery );
def oregdokuid;
if ( e.size() > 0 )
{
oregdokuid = e[0].doku_id;
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage erfolgreich, doku_id: [" + newDoc.id + "][" + oregdokuid + "][" + newDocReg.id + "] Register: [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "]" );
}
}
}
}
}
else
{
fehler( d3, "Es wurde keine passende Sammelakte gefunden. [" + treffer[ i ].ddf10 + "]", (int) treffer[ i ].id );
}
xlog( d3, 4, "************************************************" );
}
else
{
// Fehler
fehler( d3, "Mandantennummer in Tabelle und in Aktennummer unterscheiden sich.", (int) treffer[ i ].id );
}
}
}
def fehler( D3Interface d3, String meldung, int id )
{
def meldung_db;
if ( meldung.length() > 250 )
{
meldung_db = meldung.substring( 0, 249 );
}
else
{
meldung_db = meldung;
}
if ( debug == 0 )
{
sql = "update " + zieltabelle + " set fehler = '" + meldung_db + "' where id = " + id;
d3.sql.execute( sql );
}
xlog( d3, 2, meldung );
}
def xlog( D3Interface d3, int loglevel, String logtext )
{
def logdatei = "d:\\d3\\apps\\" + zieltabelle + "_2.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;
}

View File

@@ -0,0 +1,527 @@
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");
def prg = "migration_akte.groovy";
def version = "0.1";
def 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;
// In welcher Tabelle soll nach den zu erstellenden Akten gesucht werden?
@Field zieltabelle = "mig_kreditorenakte";
// Konfiguration der Aktenartkürzel
@Field dokuart_sammelakte = "";
@Field dokuart_hauptakte = "AKRED";
@Field dokuart_oberregisterakte = "AKROR";
@Field dokuart_registerakte = "AKRER";
// der hier konfigurierte Wert wird verwendet, wenn kein sonstiger Hauptaktenname gefunden wird.
@Field standard_hauptaktenname = "Kreditorakte";
// DDF 1 / ADM_Aktentyp aus der Aktenart ADM_Verwaltung Mandantenakte (AVMNT) - mit diesem Schlüssel werden die benötigten (Ober-)Register aus den Stammdaten in der Aktenart AVMNT ermittelt.
@Field aktenschluessel = "Kreditorenakte";
/////////////////////////////////////////////////////////////////////////
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, "* Aktenart Sammelakte : " + dokuart_sammelakte );
xlog( d3, 4, "* Aktenart Hauptakte : " + dokuart_hauptakte );
xlog( d3, 4, "* Aktenart Oberregisterakte : " + dokuart_oberregisterakte );
xlog( d3, 4, "* Aktenart Registerakte : " + dokuart_registerakte );
xlog( d3, 4, "* Zieltabelle : " + zieltabelle );
xlog( d3, 4, "* Standard-Hauptaktenname : " + standard_hauptaktenname );
xlog( d3, 4, "* Aktenschluessel : " + aktenschluessel );
xlog( d3, 4, "************************************************" );
def sqlQuery = "select top (100) id,ddf48,ddf10,ddf20,ddf19,ddf22,ddf62,ddf69 from " + zieltabelle + " where fehler is null and doku_id is null";
treffer = d3.sql.executeAndGet( (String) sqlQuery );
xlog( d3, 4, " Es wurden " + treffer.size() + " Treffer gefunden." );
xlog( d3, 4, "************************************************" );
if ( treffer.size() > 0 )
{
for ( i = 0; i < treffer.size(); i++ )
{
// Prüfung, ob die Mandantnummer in der Aktennummer zu der Mandantnummer aus der Tabelle passt - andernfalls Fehler.
def mandantnr_aus_aktennr = treffer[ i ].ddf10.substring( 0, 5 );
if ( mandantnr_aus_aktennr == treffer[ i ].ddf19 )
{
// Es wird eine neue Hauptakte erstellt
def newDocfield_19, newDocfield_10, newDocfield_20, newDocfield_22, newDocfield_48, newDocfield_62 = [ ], newDocfield_69 = [ ];
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Aktennummer DDF10 : [" + treffer[ i ].ddf10 + "]" );
newDocfield_10 = treffer[ i ].ddf10;
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Kreditornummer DDF19 : [" + treffer[ i ].ddf19 + "]" );
newDocfield_19 = treffer[ i ].ddf19;
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Kreditorname DDF20 : [" + treffer[ i ].ddf20 + "]" );
newDocfield_20 = treffer[ i ].ddf20;
def dddf22 = "Digital";
if ( ( ! treffer[ i ].ddf22 ) || ( treffer[ i ].ddf22 == 'null' ) )
{
xlog( d3, 3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": physischer Aufbewahrungsort DDF22 wurde nicht angegeben, default: [" + dddf22 + "]" );
}
else
{
dddf22 = treffer[ i ].ddf22;
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze physischer Aufbewahrungsort DDF22 : [" + dddf22 + "]" );
newDocfield_22 = dddf22;
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Unique-ID Migration DDF48 : [" + treffer[ i ].ddf48 + "]" );
newDocfield_48 = treffer[ i ].ddf48;
// Freigeber
if ( treffer[ i ].ddf62 )
{
def splitted_str_array = treffer[ i ].ddf62.split( ';' );
for ( int j = 0; j < splitted_str_array.length; j++ )
{
def filler = " ";
if ( j >= 10 )
{
filler = "";
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Setze Postempfaenger DDF62 / " + filler + j + " : [" + splitted_str_array[ j ] + "]" );
newDocfield_62[ j ] = splitted_str_array[ j ];
}
}
// Berechtigter:
if ( treffer[ i ].ddf69 )
{
def splitted_str_array = treffer[ i ].ddf69.split( ';' );
for ( int j = 0; j < splitted_str_array.length; j++ )
{
def filler = " ";
if ( j >= 10 )
{
filler = "";
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Setze Berechtigter DDF69 / " + filler + j + " : [" + splitted_str_array[ j ] + "]" );
newDocfield_69[ j ] = splitted_str_array[ j ];
}
}
// Prüfung, ob zu dieser Hauptakte eine passende Sammelakte existiert
// Falls ja: Übernahme der Mandantenstammdaten der entsprechenden Akte
// Falls nein: Fehler in DB eintragen und Abbruch der Verarbeitung dieses Treffers
//sqlQuery = "select doku_id, dok_dat_feld_1, dok_dat_feld_2, dok_dat_feld_13 from firmen_spezifisch where kue_dokuart = '" + dokuart_sammelakte + "' and dok_dat_feld_1 = '" + treffer[ i ].ddf1 + "'";
//ergebnis = d3.sql.executeAndGet( (String) sqlQuery );
if ( true )
{
// Akte mit Stammdaten und Infos aus der Tabelle "zieltabelle" erstellen
// Registerstruktur unterhalb ebenfalls erstellen
Document newDoc = d3.archive.newDocument();
newDoc.type = dokuart_hauptakte;
newDoc.status = Document.DocStatus.DOC_STAT_RELEASE;
//newDoc.editor = "dvelop";
newDoc.field[ 10 ] = newDocfield_10;
newDoc.field[ 19 ] = newDocfield_19;
newDoc.field[ 20 ] = newDocfield_20;
newDoc.field[ 22 ] = newDocfield_22;
newDoc.field[ 48 ] = newDocfield_48;
for ( int i = 0; i < newDocfield_62.size(); i++ )
{
newDoc.field[ 62 ][ i + 1 ] = newDocfield_62[ i ];
}
for ( int i = 0; i < newDocfield_69.size(); i++ )
{
newDoc.field[ 69 ][ i + 1 ] = newDocfield_69[ i ];
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": =============================" );
//Pruefung ob die anzulegende Akte ggf. schon im System angelegt wurde
sqlQuery = "select doku_id from firmen_spezifisch where kue_dokuart = '" + dokuart_hauptakte + "' and dok_dat_feld_19 = '" + newDocfield_19 + "' AND dok_dat_feld_10 = '" + newDocfield_10 + "'";
ergebnis = d3.sql.executeAndGet( (String) sqlQuery );
if ( ergebnis.size() > 0 ) {
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage [" + newDoc.field[ 10 ] + "] nicht durchgefuehrt da die Akte bereits existiert, doku_id: [" + ergebnis[ 0 ].doku_id + "]" );
fehler( d3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage [" + newDoc.field[ 10 ] + "] nicht durchgefuehrt da die Akte bereits existiert. doku_id: [" + ergebnis[ 0 ].doku_id + "]", (int) treffer[ i ].id );
xlog( d3, 4, "************************************************" );
continue;
}
def aktenanlage_erfolgreich = true;
if ( debug == 0 )
{
try
{
newDoc = d3.archive.importDocument( newDoc );
}
catch ( D3Exception e )
{
fehler( d3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Akte [" + newDoc.field[ 10 ] + "] konnte nicht erzeugt werden: " + e.message, (int) treffer[ i ].id );
aktenanlage_erfolgreich = false;
}
if ( aktenanlage_erfolgreich )
{
// sichern der erzeugten Doku-ID
if ( debug == 0 )
{
sqlQuery = "update " + zieltabelle + " set doku_id = '" + newDoc.id + "' where id = " + treffer[ i ].id;
d3.sql.execute( sqlQuery );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage [" + newDoc.field[ 10 ] + "] erfolgreich, doku_id: [" + newDoc.id + "]" );
}
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Keine Aktenanlage fuer [" + newDoc.field[ 10 ] + "] (Debug-Modus eingeschaltet)." );
}
if ( aktenanlage_erfolgreich )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": =============================" );
//////////////////////////////////////////
// Ebene unterhalb der Hauptakte anlegen
// Dokumentart: Hauptakten-Oberregisterakte, darin alle in den Stammdaten angelegten Oberregister
sqlQuery = "select distinct dok_dat_feld_2 from firmen_spezifisch where kue_dokuart = 'AVMNT' and dok_dat_feld_1 = '" + aktenschluessel + "'";
def resultRows = d3.sql.executeAndGet( (String) sqlQuery );
if ( resultRows.size() > 0 )
{
resultRows.each
{
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": erstelle Oberregister-Akte: [" + it.dok_dat_feld_2 + "]" );
Document newDocOReg = d3.archive.newDocument();
newDocOReg.type = dokuart_oberregisterakte;
newDocOReg.status = Document.DocStatus.DOC_STAT_RELEASE;
//newDocOReg.editor = "dvelop";
newDocOReg.field[ 10 ] = newDocfield_10;
newDocOReg.field[ 19 ] = newDocfield_19;
newDocOReg.field[ 3 ] = it.dok_dat_feld_2; // Oberregister
newDocOReg.field[ 20 ] = newDocfield_20;
newDocOReg.field[ 22 ] = newDocfield_22;
for ( int i = 0; i < newDocfield_69.size(); i++ )
{
newDocOReg.field[ 69 ][ i + 1 ] = newDocfield_69[ i ];
}
if ( debug == 0 )
{
try
{
newDocOReg = d3.archive.importDocument( newDocOReg );
}
catch ( D3Exception e )
{
xlog( d3, 2, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Akte [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "] konnte nicht erzeugt werden: " + e.message );
aktenanlage_erfolgreich = false;
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Keine Aktenanlage fuer [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "] (Debug-Modus eingeschaltet)." );
}
if ( ( aktenanlage_erfolgreich ) && ( debug == 0 ) )
{
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage erfolgreich, doku_id: [" + newDoc.id + "][" + newDocOReg.id + "]" );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage erfolgreich, doku_id: [" + newDoc.id + "][" + newDocOReg.id + "] Register: [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "]" );
}
}
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Weitere Akten werden wegen Fehler nicht angelegt." );
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": =============================" );
if ( aktenanlage_erfolgreich )
{
//////////////////////////////////////////
// Ebene unterhalb der Hauptakten-Oberregisterakte anlegen
// Dokumentart: Hauptakten-Registerakte, darin alle in den Stammdaten angelegten Register
sqlQuery = "select distinct dok_dat_feld_2, dok_dat_feld_3 from firmen_spezifisch where kue_dokuart = 'AVMNT' and dok_dat_feld_1 = '" + aktenschluessel + "' and dok_dat_feld_3 != ''";
def resultRows = d3.sql.executeAndGet( (String) sqlQuery );
if ( resultRows.size() > 0 )
{
resultRows.each
{
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": erstelle Register-Akte: [" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "]" );
Document newDocReg = d3.archive.newDocument();
newDocReg.type = dokuart_registerakte;
newDocReg.status = Document.DocStatus.DOC_STAT_RELEASE;
//newDocReg.editor = "dvelop";
newDocReg.field[ 10 ] = newDocfield_10;
newDocReg.field[ 19 ] = newDocfield_19;
newDocReg.field[ 3 ] = it.dok_dat_feld_2; // Oberregister
newDocReg.field[ 20 ] = newDocfield_20;
newDocReg.field[ 22 ] = newDocfield_22;
newDocReg.field[ 4 ] = it.dok_dat_feld_4; // Register
if ( debug == 0 )
{
try
{
newDocReg = d3.archive.importDocument( newDocReg );
}
catch ( D3Exception e )
{
xlog( d3, 2, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Akte [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "] konnte nicht erzeugt werden: " + e.message );
aktenanlage_erfolgreich = false;
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Keine Aktenanlage fuer [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "] (Debug-Modus eingeschaltet)." );
}
if ( ( aktenanlage_erfolgreich ) && ( debug == 0 ) )
{
sqlQuery = "select doku_id from firmen_spezifisch where kue_dokuart = '" + dokuart_oberregisterakte + "' and dok_dat_feld_10 = '" + newDoc.field[ 10 ] + "' and dok_dat_feld_3 = '" + it.dok_dat_feld_2 + "'";
//xlog( d3, 3, sqlQuery );
e = d3.sql.executeAndGet( sqlQuery );
def oregdokuid;
if ( e.size() > 0 )
{
oregdokuid = e[0].doku_id;
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage erfolgreich, doku_id: [" + newDoc.id + "][" + oregdokuid + "][" + newDocReg.id + "] Register: [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "]" );
}
}
}
}
}
else
{
fehler( d3, "Es wurde keine passende Sammelakte gefunden. [" + treffer[ i ].ddf10 + "]", (int) treffer[ i ].id );
}
xlog( d3, 4, "************************************************" );
}
else
{
// Fehler
fehler( d3, "Kreditornummer in Tabelle und in Aktennummer unterscheiden sich.", (int) treffer[ i ].id );
}
}
}
def fehler( D3Interface d3, String meldung, int id )
{
def meldung_db;
if ( meldung.length() > 250 )
{
meldung_db = meldung.substring( 0, 249 );
}
else
{
meldung_db = meldung;
}
if ( debug == 0 )
{
sql = "update " + zieltabelle + " set fehler = '" + meldung_db + "' where id = " + id;
d3.sql.execute( sql );
}
xlog( d3, 2, meldung );
}
def xlog( D3Interface d3, int loglevel, String logtext )
{
def logdatei = "d:\\d3\\apps\\" + zieltabelle + ".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;
}

View File

@@ -0,0 +1,527 @@
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");
def prg = "migration_akte.groovy";
def version = "0.1";
def 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;
// In welcher Tabelle soll nach den zu erstellenden Akten gesucht werden?
@Field zieltabelle = "mig_kreditorenakte_2";
// Konfiguration der Aktenartkürzel
@Field dokuart_sammelakte = "";
@Field dokuart_hauptakte = "AKRED";
@Field dokuart_oberregisterakte = "AKROR";
@Field dokuart_registerakte = "AKRER";
// der hier konfigurierte Wert wird verwendet, wenn kein sonstiger Hauptaktenname gefunden wird.
@Field standard_hauptaktenname = "Kreditorakte";
// DDF 1 / ADM_Aktentyp aus der Aktenart ADM_Verwaltung Mandantenakte (AVMNT) - mit diesem Schlüssel werden die benötigten (Ober-)Register aus den Stammdaten in der Aktenart AVMNT ermittelt.
@Field aktenschluessel = "Kreditorenakte";
/////////////////////////////////////////////////////////////////////////
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, "* Aktenart Sammelakte : " + dokuart_sammelakte );
xlog( d3, 4, "* Aktenart Hauptakte : " + dokuart_hauptakte );
xlog( d3, 4, "* Aktenart Oberregisterakte : " + dokuart_oberregisterakte );
xlog( d3, 4, "* Aktenart Registerakte : " + dokuart_registerakte );
xlog( d3, 4, "* Zieltabelle : " + zieltabelle );
xlog( d3, 4, "* Standard-Hauptaktenname : " + standard_hauptaktenname );
xlog( d3, 4, "* Aktenschluessel : " + aktenschluessel );
xlog( d3, 4, "************************************************" );
def sqlQuery = "select top (100) id,ddf48,ddf10,ddf20,ddf19,ddf22,ddf62,ddf69 from " + zieltabelle + " where fehler is null and doku_id is null";
treffer = d3.sql.executeAndGet( (String) sqlQuery );
xlog( d3, 4, " Es wurden " + treffer.size() + " Treffer gefunden." );
xlog( d3, 4, "************************************************" );
if ( treffer.size() > 0 )
{
for ( i = 0; i < treffer.size(); i++ )
{
// Prüfung, ob die Mandantnummer in der Aktennummer zu der Mandantnummer aus der Tabelle passt - andernfalls Fehler.
def mandantnr_aus_aktennr = treffer[ i ].ddf10.substring( 0, 5 );
if ( mandantnr_aus_aktennr == treffer[ i ].ddf19 )
{
// Es wird eine neue Hauptakte erstellt
def newDocfield_19, newDocfield_10, newDocfield_20, newDocfield_22, newDocfield_48, newDocfield_62 = [ ], newDocfield_69 = [ ];
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Aktennummer DDF10 : [" + treffer[ i ].ddf10 + "]" );
newDocfield_10 = treffer[ i ].ddf10;
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Kreditornummer DDF19 : [" + treffer[ i ].ddf19 + "]" );
newDocfield_19 = treffer[ i ].ddf19;
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Kreditorname DDF20 : [" + treffer[ i ].ddf20 + "]" );
newDocfield_20 = treffer[ i ].ddf20;
def dddf22 = "Digital";
if ( ( ! treffer[ i ].ddf22 ) || ( treffer[ i ].ddf22 == 'null' ) )
{
xlog( d3, 3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": physischer Aufbewahrungsort DDF22 wurde nicht angegeben, default: [" + dddf22 + "]" );
}
else
{
dddf22 = treffer[ i ].ddf22;
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze physischer Aufbewahrungsort DDF22 : [" + dddf22 + "]" );
newDocfield_22 = dddf22;
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Unique-ID Migration DDF48 : [" + treffer[ i ].ddf48 + "]" );
newDocfield_48 = treffer[ i ].ddf48;
// Freigeber
if ( treffer[ i ].ddf62 )
{
def splitted_str_array = treffer[ i ].ddf62.split( ';' );
for ( int j = 0; j < splitted_str_array.length; j++ )
{
def filler = " ";
if ( j >= 10 )
{
filler = "";
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Setze Postempfaenger DDF62 / " + filler + j + " : [" + splitted_str_array[ j ] + "]" );
newDocfield_62[ j ] = splitted_str_array[ j ];
}
}
// Berechtigter:
if ( treffer[ i ].ddf69 )
{
def splitted_str_array = treffer[ i ].ddf69.split( ';' );
for ( int j = 0; j < splitted_str_array.length; j++ )
{
def filler = " ";
if ( j >= 10 )
{
filler = "";
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Setze Berechtigter DDF69 / " + filler + j + " : [" + splitted_str_array[ j ] + "]" );
newDocfield_69[ j ] = splitted_str_array[ j ];
}
}
// Prüfung, ob zu dieser Hauptakte eine passende Sammelakte existiert
// Falls ja: Übernahme der Mandantenstammdaten der entsprechenden Akte
// Falls nein: Fehler in DB eintragen und Abbruch der Verarbeitung dieses Treffers
//sqlQuery = "select doku_id, dok_dat_feld_1, dok_dat_feld_2, dok_dat_feld_13 from firmen_spezifisch where kue_dokuart = '" + dokuart_sammelakte + "' and dok_dat_feld_1 = '" + treffer[ i ].ddf1 + "'";
//ergebnis = d3.sql.executeAndGet( (String) sqlQuery );
if ( true )
{
// Akte mit Stammdaten und Infos aus der Tabelle "zieltabelle" erstellen
// Registerstruktur unterhalb ebenfalls erstellen
Document newDoc = d3.archive.newDocument();
newDoc.type = dokuart_hauptakte;
newDoc.status = Document.DocStatus.DOC_STAT_RELEASE;
//newDoc.editor = "dvelop";
newDoc.field[ 10 ] = newDocfield_10;
newDoc.field[ 19 ] = newDocfield_19;
newDoc.field[ 20 ] = newDocfield_20;
newDoc.field[ 22 ] = newDocfield_22;
newDoc.field[ 48 ] = newDocfield_48;
for ( int i = 0; i < newDocfield_62.size(); i++ )
{
newDoc.field[ 62 ][ i + 1 ] = newDocfield_62[ i ];
}
for ( int i = 0; i < newDocfield_69.size(); i++ )
{
newDoc.field[ 69 ][ i + 1 ] = newDocfield_69[ i ];
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": =============================" );
//Pruefung ob die anzulegende Akte ggf. schon im System angelegt wurde
sqlQuery = "select doku_id from firmen_spezifisch where kue_dokuart = '" + dokuart_hauptakte + "' and dok_dat_feld_19 = '" + newDocfield_19 + "' AND dok_dat_feld_10 = '" + newDocfield_10 + "'";
ergebnis = d3.sql.executeAndGet( (String) sqlQuery );
if ( ergebnis.size() > 0 ) {
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage [" + newDoc.field[ 10 ] + "] nicht durchgefuehrt da die Akte bereits existiert, doku_id: [" + ergebnis[ 0 ].doku_id + "]" );
fehler( d3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage [" + newDoc.field[ 10 ] + "] nicht durchgefuehrt da die Akte bereits existiert. doku_id: [" + ergebnis[ 0 ].doku_id + "]", (int) treffer[ i ].id );
xlog( d3, 4, "************************************************" );
continue;
}
def aktenanlage_erfolgreich = true;
if ( debug == 0 )
{
try
{
newDoc = d3.archive.importDocument( newDoc );
}
catch ( D3Exception e )
{
fehler( d3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Akte [" + newDoc.field[ 10 ] + "] konnte nicht erzeugt werden: " + e.message, (int) treffer[ i ].id );
aktenanlage_erfolgreich = false;
}
if ( aktenanlage_erfolgreich )
{
// sichern der erzeugten Doku-ID
if ( debug == 0 )
{
sqlQuery = "update " + zieltabelle + " set doku_id = '" + newDoc.id + "' where id = " + treffer[ i ].id;
d3.sql.execute( sqlQuery );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage [" + newDoc.field[ 10 ] + "] erfolgreich, doku_id: [" + newDoc.id + "]" );
}
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Keine Aktenanlage fuer [" + newDoc.field[ 10 ] + "] (Debug-Modus eingeschaltet)." );
}
if ( aktenanlage_erfolgreich )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": =============================" );
//////////////////////////////////////////
// Ebene unterhalb der Hauptakte anlegen
// Dokumentart: Hauptakten-Oberregisterakte, darin alle in den Stammdaten angelegten Oberregister
sqlQuery = "select distinct dok_dat_feld_2 from firmen_spezifisch where kue_dokuart = 'AVMNT' and dok_dat_feld_1 = '" + aktenschluessel + "'";
def resultRows = d3.sql.executeAndGet( (String) sqlQuery );
if ( resultRows.size() > 0 )
{
resultRows.each
{
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": erstelle Oberregister-Akte: [" + it.dok_dat_feld_2 + "]" );
Document newDocOReg = d3.archive.newDocument();
newDocOReg.type = dokuart_oberregisterakte;
newDocOReg.status = Document.DocStatus.DOC_STAT_RELEASE;
//newDocOReg.editor = "dvelop";
newDocOReg.field[ 10 ] = newDocfield_10;
newDocOReg.field[ 19 ] = newDocfield_19;
newDocOReg.field[ 3 ] = it.dok_dat_feld_2; // Oberregister
newDocOReg.field[ 20 ] = newDocfield_20;
newDocOReg.field[ 22 ] = newDocfield_22;
for ( int i = 0; i < newDocfield_69.size(); i++ )
{
newDocOReg.field[ 69 ][ i + 1 ] = newDocfield_69[ i ];
}
if ( debug == 0 )
{
try
{
newDocOReg = d3.archive.importDocument( newDocOReg );
}
catch ( D3Exception e )
{
xlog( d3, 2, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Akte [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "] konnte nicht erzeugt werden: " + e.message );
aktenanlage_erfolgreich = false;
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Keine Aktenanlage fuer [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "] (Debug-Modus eingeschaltet)." );
}
if ( ( aktenanlage_erfolgreich ) && ( debug == 0 ) )
{
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage erfolgreich, doku_id: [" + newDoc.id + "][" + newDocOReg.id + "]" );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage erfolgreich, doku_id: [" + newDoc.id + "][" + newDocOReg.id + "] Register: [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "]" );
}
}
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Weitere Akten werden wegen Fehler nicht angelegt." );
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": =============================" );
if ( aktenanlage_erfolgreich )
{
//////////////////////////////////////////
// Ebene unterhalb der Hauptakten-Oberregisterakte anlegen
// Dokumentart: Hauptakten-Registerakte, darin alle in den Stammdaten angelegten Register
sqlQuery = "select distinct dok_dat_feld_2, dok_dat_feld_3 from firmen_spezifisch where kue_dokuart = 'AVMNT' and dok_dat_feld_1 = '" + aktenschluessel + "' and dok_dat_feld_3 != ''";
def resultRows = d3.sql.executeAndGet( (String) sqlQuery );
if ( resultRows.size() > 0 )
{
resultRows.each
{
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": erstelle Register-Akte: [" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "]" );
Document newDocReg = d3.archive.newDocument();
newDocReg.type = dokuart_registerakte;
newDocReg.status = Document.DocStatus.DOC_STAT_RELEASE;
//newDocReg.editor = "dvelop";
newDocReg.field[ 10 ] = newDocfield_10;
newDocReg.field[ 19 ] = newDocfield_19;
newDocReg.field[ 3 ] = it.dok_dat_feld_2; // Oberregister
newDocReg.field[ 20 ] = newDocfield_20;
newDocReg.field[ 22 ] = newDocfield_22;
newDocReg.field[ 4 ] = it.dok_dat_feld_4; // Register
if ( debug == 0 )
{
try
{
newDocReg = d3.archive.importDocument( newDocReg );
}
catch ( D3Exception e )
{
xlog( d3, 2, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Akte [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "] konnte nicht erzeugt werden: " + e.message );
aktenanlage_erfolgreich = false;
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Keine Aktenanlage fuer [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "] (Debug-Modus eingeschaltet)." );
}
if ( ( aktenanlage_erfolgreich ) && ( debug == 0 ) )
{
sqlQuery = "select doku_id from firmen_spezifisch where kue_dokuart = '" + dokuart_oberregisterakte + "' and dok_dat_feld_10 = '" + newDoc.field[ 10 ] + "' and dok_dat_feld_3 = '" + it.dok_dat_feld_2 + "'";
//xlog( d3, 3, sqlQuery );
e = d3.sql.executeAndGet( sqlQuery );
def oregdokuid;
if ( e.size() > 0 )
{
oregdokuid = e[0].doku_id;
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage erfolgreich, doku_id: [" + newDoc.id + "][" + oregdokuid + "][" + newDocReg.id + "] Register: [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "]" );
}
}
}
}
}
else
{
fehler( d3, "Es wurde keine passende Sammelakte gefunden. [" + treffer[ i ].ddf10 + "]", (int) treffer[ i ].id );
}
xlog( d3, 4, "************************************************" );
}
else
{
// Fehler
fehler( d3, "Kreditornummer in Tabelle und in Aktennummer unterscheiden sich.", (int) treffer[ i ].id );
}
}
}
def fehler( D3Interface d3, String meldung, int id )
{
def meldung_db;
if ( meldung.length() > 250 )
{
meldung_db = meldung.substring( 0, 249 );
}
else
{
meldung_db = meldung;
}
if ( debug == 0 )
{
sql = "update " + zieltabelle + " set fehler = '" + meldung_db + "' where id = " + id;
d3.sql.execute( sql );
}
xlog( d3, 2, meldung );
}
def xlog( D3Interface d3, int loglevel, String logtext )
{
def logdatei = "d:\\d3\\apps\\" + zieltabelle + ".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;
}

View File

@@ -0,0 +1,601 @@
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");
def prg = "migration_akte_lohnbuchhaltungsakte.groovy";
def version = "0.1";
def 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;
// In welcher Tabelle soll nach den zu erstellenden Akten gesucht werden?
@Field zieltabelle = "mig_lohnbuchhaltungsakte";
// Konfiguration der Aktenartkürzel
@Field dokuart_sammelakte = "ALOSA";
@Field dokuart_hauptakte = "ALOJA";
@Field dokuart_oberregisterakte = "ALBOR";
@Field dokuart_registerakte = "ALBRE";
// der hier konfigurierte Wert wird verwendet, wenn kein sonstiger Hauptaktenname gefunden wird.
@Field standard_hauptaktenname = "Lohnbuchhaltungs-Jahresakte";
// DDF 1 / ADM_Aktentyp aus der Aktenart ADM_Verwaltung Mandantenakte (AVMNT) - mit diesem Schlüssel werden die benötigten (Ober-)Register aus den Stammdaten in der Aktenart AVMNT ermittelt.
@Field aktenschluessel = "Lohnbuchhaltungjahresakte";
/////////////////////////////////////////////////////////////////////////
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, "* Aktenart Sammelakte : " + dokuart_sammelakte );
xlog( d3, 4, "* Aktenart Hauptakte : " + dokuart_hauptakte );
xlog( d3, 4, "* Aktenart Oberregisterakte : " + dokuart_oberregisterakte );
xlog( d3, 4, "* Aktenart Registerakte : " + dokuart_registerakte );
xlog( d3, 4, "* Zieltabelle : " + zieltabelle );
xlog( d3, 4, "* Standard-Hauptaktenname : " + standard_hauptaktenname );
xlog( d3, 4, "* Aktenschluessel : " + aktenschluessel );
xlog( d3, 4, "************************************************" );
def sqlQuery = "select top (100) id,ddf1,ddf48,ddf10,ddf21,ddf22,ddf25,ddf37,ddf42,ddf60,ddf5,ddf69 from " + zieltabelle + " where fehler is null and doku_id is null";
treffer = d3.sql.executeAndGet( (String) sqlQuery );
xlog( d3, 4, " Es wurden " + treffer.size() + " Treffer gefunden." );
xlog( d3, 4, "************************************************" );
if ( treffer.size() > 0 )
{
for ( i = 0; i < treffer.size(); i++ )
{
// Prüfung, ob die Mandantnummer in der Aktennummer zu der Mandantnummer aus der Tabelle passt - andernfalls Fehler.
def mandantnr_aus_aktennr = treffer[ i ].ddf10.substring( 0, 5 );
//JFEL toString eingefügt
// if ( mandantnr_aus_aktennr == treffer[ i ].ddf1 )
if ( mandantnr_aus_aktennr == treffer[ i ].ddf1.toString() )
{
// Es wird eine neue Hauptakte erstellt
def newDocfield_1, newDocfield_2, newDocfield_10, newDocfield_13, newDocfield_21, newDocfield_22, newDocfield_25, newDocfield_37, newDocfield_42, newDocfield_5, newDocfield_60 = [ ], newDocfield_69 = [ ];
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Mandantennummer DDF1 : [" + treffer[ i ].ddf1 + "]" );
//JFEL toString eingefügt
//newDocfield_1 = treffer[ i ].ddf1;
newDocfield_1 = treffer[ i ].ddf1.toString();
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Aktennummer DDF10 : [" + treffer[ i ].ddf10 + "]" );
newDocfield_10 = treffer[ i ].ddf10;
def dddf5;
if ( ( ! treffer[ i ].ddf5 ) || ( treffer[ i ].ddf5 = 'null' ) )
{
xlog( d3, 3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Geschaeftsjahr in Tabelle nicht gefuellt, Lese Geschaeftsjahr aus Aktennummer." );
dddf5 = newDocfield_10.substring( 7, 11 );
}
else
{
dddf5 = treffer[ i ].ddf5;
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Geschaeftsjahr DDF5 : [" + dddf5 + "]" );
newDocfield_5 = dddf5;
if ( treffer[ i ].ddf21 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Aktenname DDF21 : [" + treffer[ i ].ddf21 + "]" );
newDocfield_21 = treffer[ i ].ddf21;
}
else
{
xlog( d3, 3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenname wurde nicht gefunden. Setze Standardbezeichnung '" + standard_hauptaktenname + "'." );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Aktenname DDF21 : <" + standard_hauptaktenname + ">" );
newDocfield_21 = standard_hauptaktenname;
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze physischer Aufbewahrungsort DDF22 : [" + treffer[ i ].ddf22 + "]" );
newDocfield_22 = treffer[ i ].ddf22;
if ( treffer[ i ].ddf25 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Geschaeftsfuehrer DDF25 : [" + treffer[ i ].ddf25 + "]" );
newDocfield_25 = treffer[ i ].ddf25;
}
else
{
def STATEMENT = "select dok_dat_feld_25 from firmen_spezifisch where kue_dokuart = 'AMAND' and dok_dat_feld_1 = '" + newDocfield_1 + "'";
def treffer_STATEMENT = d3.sql.executeAndGet( (String) STATEMENT );
if ( treffer_STATEMENT.size() > 0 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Geschaeftsfuehrer DDF25 aus M.-Akte : [" + treffer_STATEMENT[ 0 ].dok_dat_feld_25 + "]" );
newDocfield_25 = treffer_STATEMENT[ 0 ].dok_dat_feld_25;
}
else
{
xlog( d3, 3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Es konnte kein Wert für Geschaeftsfuehrer / DDF25 gefunden werden." );
}
}
if ( treffer[ i ].ddf37 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Auftragsverantwortlicher DDF37 : [" + treffer[ i ].ddf37 + "]" );
newDocfield_37 = treffer[ i ].ddf37;
}
else
{
def STATEMENT = "select dok_dat_feld_37 from firmen_spezifisch where kue_dokuart = 'AMAND' and dok_dat_feld_1 = '" + newDocfield_1 + "'";
def treffer_STATEMENT = d3.sql.executeAndGet( (String) STATEMENT );
if ( treffer_STATEMENT.size() > 0 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Auftragsverantwortlicher DDF37 aus M.-Akte: [" + treffer_STATEMENT[ 0 ].dok_dat_feld_37 + "]" );
newDocfield_37 = treffer_STATEMENT[ 0 ].dok_dat_feld_37;
}
else
{
xlog( d3, 3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Es konnte kein Wert für Auftragsverantwortlicher / DDF37 gefunden werden." );
}
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Briefkopf DDF42 : [" + treffer[ i ].ddf42 + "]" );
newDocfield_42 = treffer[ i ].ddf42;
// Postempfänger
if ( treffer[ i ].ddf60 )
{
def splitted_str_array = treffer[ i ].ddf60.split( ';' );
for ( int j = 0; j < splitted_str_array.length; j++ )
{
def filler = " ";
if ( j >= 10 )
{
filler = "";
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Setze Postempfaenger DDF60 / " + filler + j + " : [" + splitted_str_array[ j ] + "]" );
newDocfield_60[ j ] = splitted_str_array[ j ];
}
}
// Berechtigter:
if ( treffer[ i ].ddf69 )
{
def splitted_str_array = treffer[ i ].ddf69.split( ';' );
for ( int j = 0; j < splitted_str_array.length; j++ )
{
def filler = " ";
if ( j >= 10 )
{
filler = "";
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Setze Berechtigter DDF69 / " + filler + j + " : [" + splitted_str_array[ j ] + "]" );
newDocfield_69[ j ] = splitted_str_array[ j ];
}
}
// Prüfung, ob zu dieser Hauptakte eine passende Sammelakte existiert
// Falls ja: Übernahme der Mandantenstammdaten der entsprechenden Akte
// Falls nein: Fehler in DB eintragen und Abbruch der Verarbeitung dieses Treffers
sqlQuery = "select doku_id, dok_dat_feld_1, dok_dat_feld_2, dok_dat_feld_13 from firmen_spezifisch where kue_dokuart = '" + dokuart_sammelakte + "' and dok_dat_feld_1 = '" + treffer[ i ].ddf1 + "'";
ergebnis = d3.sql.executeAndGet( (String) sqlQuery );
if ( ergebnis.size() > 0 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Mandantenname DDF2 : [" + ergebnis[ 0 ].dok_dat_feld_2 + "]" );
newDocfield_2 = ergebnis[ 0 ].dok_dat_feld_2;
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Mandantengruppennummer DDF13 : [" + ergebnis[ 0 ].dok_dat_feld_13 + "]" );
newDocfield_13 = ergebnis[ 0 ].dok_dat_feld_13;
// Akte mit Stammdaten und Infos aus der Tabelle "zieltabelle" erstellen
// Registerstruktur unterhalb ebenfalls erstellen
Document newDoc = d3.archive.newDocument();
newDoc.type = dokuart_hauptakte;
newDoc.status = Document.DocStatus.DOC_STAT_PROCESSING;
newDoc.editor = "dvelop";
newDoc.field[ 1 ] = newDocfield_1;
newDoc.field[ 2 ] = newDocfield_2;
newDoc.field[ 5 ] = newDocfield_5;
newDoc.field[ 10 ] = newDocfield_10;
newDoc.field[ 13 ] = newDocfield_13;
newDoc.field[ 21 ] = newDocfield_21;
newDoc.field[ 22 ] = newDocfield_22;
newDoc.field[ 25 ] = newDocfield_25;
newDoc.field[ 37 ] = newDocfield_37;
newDoc.field[ 42 ] = newDocfield_42;
for ( int i = 0; i < newDocfield_60.size(); i++ )
{
newDoc.field[ 60 ][ i + 1 ] = newDocfield_60[ i ];
}
for ( int i = 0; i < newDocfield_69.size(); i++ )
{
newDoc.field[ 69 ][ i + 1 ] = newDocfield_69[ i ];
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": =============================" );
//Pruefung ob die anzulegende Akte ggf. schon im System angelegt wurde
sqlQuery = "select doku_id from firmen_spezifisch where kue_dokuart = '" + dokuart_hauptakte + "' and dok_dat_feld_1 = '" + newDocfield_1 + "' AND dok_dat_feld_10 = '" + newDocfield_10 + "'";
ergebnis = d3.sql.executeAndGet( (String) sqlQuery );
if ( ergebnis.size() > 0 ) {
fehler( d3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage [" + newDoc.field[ 10 ] + "] nicht durchgefuehrt da die Akte bereits existiert, doku_id: " + ergebnis[ 0 ].doku_id, (int) treffer[ i ].id );
continue;
}
def aktenanlage_erfolgreich = true;
if ( debug == 0 )
{
try
{
newDoc = d3.archive.importDocument( newDoc );
}
catch ( D3Exception e )
{
fehler( d3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Akte [" + newDoc.field[ 10 ] + "] konnte nicht erzeugt werden: " + e.message, (int) treffer[ i ].id );
aktenanlage_erfolgreich = false;
}
if ( aktenanlage_erfolgreich )
{
// sichern der erzeugten Doku-ID
if ( debug == 0 )
{
sqlQuery = "update " + zieltabelle + " set doku_id = '" + newDoc.id + "' where id = " + treffer[ i ].id;
d3.sql.execute( sqlQuery );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage [" + newDoc.field[ 10 ] + "] erfolgreich, doku_id: [" + newDoc.id + "]" );
}
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Keine Aktenanlage fuer [" + newDoc.field[ 10 ] + "] (Debug-Modus eingeschaltet)." );
}
if ( aktenanlage_erfolgreich )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": =============================" );
//////////////////////////////////////////
// Ebene unterhalb der Hauptakte anlegen
// Dokumentart: Hauptakten-Oberregisterakte, darin alle in den Stammdaten angelegten Oberregister
sqlQuery = "select distinct dok_dat_feld_2 from firmen_spezifisch where kue_dokuart = 'AVMNT' and dok_dat_feld_1 = '" + aktenschluessel + "'";
def resultRows = d3.sql.executeAndGet( (String) sqlQuery );
if ( resultRows.size() > 0 )
{
resultRows.each
{
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": erstelle Oberregister-Akte: [" + it.dok_dat_feld_2 + "]" );
Document newDocOReg = d3.archive.newDocument();
newDocOReg.type = dokuart_oberregisterakte;
newDocOReg.status = Document.DocStatus.DOC_STAT_PROCESSING;
newDocOReg.editor = "dvelop";
newDocOReg.field[ 1 ] = newDocfield_1;
newDocOReg.field[ 2 ] = newDocfield_2;
newDocOReg.field[ 3 ] = it.dok_dat_feld_2; // Oberregister
newDocOReg.field[ 5 ] = newDocfield_5;
newDocOReg.field[ 10 ] = newDocfield_10;
newDocOReg.field[ 13 ] = newDocfield_13;
newDocOReg.field[ 21 ] = newDocfield_21;
newDocOReg.field[ 25 ] = newDocfield_25;
newDocOReg.field[ 42 ] = newDocfield_42;
for ( int i = 0; i < newDocfield_69.size(); i++ )
{
newDocOReg.field[ 69 ][ i + 1 ] = newDocfield_69[ i ];
}
if ( debug == 0 )
{
try
{
newDocOReg = d3.archive.importDocument( newDocOReg );
}
catch ( D3Exception e )
{
xlog( d3, 2, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Akte [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "] konnte nicht erzeugt werden: " + e.message );
aktenanlage_erfolgreich = false;
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Keine Aktenanlage fuer [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "] (Debug-Modus eingeschaltet)." );
}
if ( ( aktenanlage_erfolgreich ) && ( debug == 0 ) )
{
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage erfolgreich, doku_id: [" + newDoc.id + "][" + newDocOReg.id + "]" );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage erfolgreich, doku_id: [" + newDoc.id + "][" + newDocOReg.id + "] Register: [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "]" );
}
}
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Weitere Akten werden wegen Fehler nicht angelegt." );
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": =============================" );
if ( aktenanlage_erfolgreich )
{
//////////////////////////////////////////
// Ebene unterhalb der Hauptakten-Oberregisterakte anlegen
// Dokumentart: Hauptakten-Registerakte, darin alle in den Stammdaten angelegten Register
sqlQuery = "select distinct dok_dat_feld_2, dok_dat_feld_3 from firmen_spezifisch where kue_dokuart = 'AVMNT' and dok_dat_feld_1 = '" + aktenschluessel + "' and dok_dat_feld_3 != ''";
def resultRows = d3.sql.executeAndGet( (String) sqlQuery );
if ( resultRows.size() > 0 )
{
resultRows.each
{
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": erstelle Register-Akte: [" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "]" );
Document newDocReg = d3.archive.newDocument();
newDocReg.type = dokuart_registerakte;
newDocReg.status = Document.DocStatus.DOC_STAT_PROCESSING;
newDocReg.editor = "dvelop";
newDocReg.field[ 1 ] = newDocfield_1;
newDocReg.field[ 2 ] = newDocfield_2;
newDocReg.field[ 3 ] = it.dok_dat_feld_2; // Oberregister
newDocReg.field[ 4 ] = it.dok_dat_feld_3; // Register
newDocReg.field[ 5 ] = newDocfield_5;
newDocReg.field[ 10 ] = newDocfield_10;
newDocReg.field[ 13 ] = newDocfield_13;
newDocReg.field[ 21 ] = newDocfield_21;
newDocReg.field[ 25 ] = newDocfield_25;
newDocReg.field[ 42 ] = newDocfield_42;
for ( int i = 0; i < newDocfield_69.size(); i++ )
{
newDocReg.field[ 69 ][ i + 1 ] = newDocfield_69[ i ];
}
if ( debug == 0 )
{
try
{
newDocReg = d3.archive.importDocument( newDocReg );
}
catch ( D3Exception e )
{
xlog( d3, 2, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Akte [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "] konnte nicht erzeugt werden: " + e.message );
aktenanlage_erfolgreich = false;
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Keine Aktenanlage fuer [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "] (Debug-Modus eingeschaltet)." );
}
if ( ( aktenanlage_erfolgreich ) && ( debug == 0 ) )
{
sqlQuery = "select doku_id from firmen_spezifisch where kue_dokuart = '" + dokuart_oberregisterakte + "' and dok_dat_feld_10 = '" + newDoc.field[ 10 ] + "' and dok_dat_feld_3 = '" + it.dok_dat_feld_2 + "'";
//xlog( d3, 3, sqlQuery );
e = d3.sql.executeAndGet( sqlQuery );
def oregdokuid;
if ( e.size() > 0 )
{
oregdokuid = e[0].doku_id;
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage erfolgreich, doku_id: [" + newDoc.id + "][" + oregdokuid + "][" + newDocReg.id + "] Register: [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "]" );
}
}
}
}
}
else
{
fehler( d3, "Es wurde keine passende Sammelakte gefunden. [" + treffer[ i ].ddf10 + "]", (int) treffer[ i ].id );
}
xlog( d3, 4, "************************************************" );
}
else
{
// Fehler
fehler( d3, "Mandantennummer in Tabelle und in Aktennummer unterscheiden sich.", (int) treffer[ i ].id );
}
}
}
def fehler( D3Interface d3, String meldung, int id )
{
def meldung_db;
if ( meldung.length() > 250 )
{
meldung_db = meldung.substring( 0, 249 );
}
else
{
meldung_db = meldung;
}
if ( debug == 0 )
{
sql = "update " + zieltabelle + " set fehler = '" + meldung_db + "' where id = " + id;
d3.sql.execute( sql );
}
xlog( d3, 2, meldung );
}
def xlog( D3Interface d3, int loglevel, String logtext )
{
def logdatei = "d:\\d3\\apps\\" + zieltabelle + ".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;
}

View File

@@ -0,0 +1,580 @@
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");
def prg = "migration_akte.groovy";
def version = "0.1";
def kunde = "Dr. Kleeberg & Partner GmbH";
/////////////////////////////////////////////////////////////////////////
// debug = 0 => es finden Änderungen am Datenbestand statt
// debug = 1 => es finden keine Änderungen am Datenbestand statt
@Field debug = 1;
// In welcher Tabelle soll nach den zu erstellenden Akten gesucht werden?
@Field zieltabelle = "mig_lohnbuchhaltungsstammakte";
// Konfiguration der Aktenartkürzel
@Field dokuart_sammelakte = "ALOSA";
@Field dokuart_hauptakte = "ALBSA";
@Field dokuart_oberregisterakte = "ALBSO";
@Field dokuart_registerakte = "ALORE";
// der hier konfigurierte Wert wird verwendet, wenn kein sonstiger Hauptaktenname gefunden wird.
@Field standard_hauptaktenname = "Lohnbuchhaltungs-Stammdatenakte";
// DDF 1 / ADM_Aktentyp aus der Aktenart ADM_Verwaltung Mandantenakte (AVMNT) - mit diesem Schlüssel werden die benötigten (Ober-)Register aus den Stammdaten in der Aktenart AVMNT ermittelt.
@Field aktenschluessel = "Lohnbuchhaltungsstammdatenakte";
/////////////////////////////////////////////////////////////////////////
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, "* Aktenart Sammelakte : " + dokuart_sammelakte );
xlog( d3, 4, "* Aktenart Hauptakte : " + dokuart_hauptakte );
xlog( d3, 4, "* Aktenart Oberregisterakte : " + dokuart_oberregisterakte );
xlog( d3, 4, "* Aktenart Registerakte : " + dokuart_registerakte );
xlog( d3, 4, "* Zieltabelle : " + zieltabelle );
xlog( d3, 4, "* Standard-Hauptaktenname : " + standard_hauptaktenname );
xlog( d3, 4, "* Aktenschluessel : " + aktenschluessel );
xlog( d3, 4, "************************************************" );
def sqlQuery = "select id,ddf1,ddf48,ddf10,ddf21,ddf22,ddf25,ddf37,ddf42,ddf60,ddf5,ddf69 from " + zieltabelle + " where fehler is null and doku_id is null";
treffer = d3.sql.executeAndGet( (String) sqlQuery );
xlog( d3, 4, " Es wurden " + treffer.size() + " Treffer gefunden." );
xlog( d3, 4, "************************************************" );
if ( treffer.size() > 0 )
{
for ( i = 0; i < treffer.size(); i++ )
{
// Prüfung, ob die Mandantnummer in der Aktennummer zu der Mandantnummer aus der Tabelle passt - andernfalls Fehler.
def mandantnr_aus_aktennr = treffer[ i ].ddf10.substring( 0, 5 );
if ( mandantnr_aus_aktennr == treffer[ i ].ddf1 )
{
// Es wird eine neue Hauptakte erstellt
def newDocfield_1, newDocfield_2, newDocfield_10, newDocfield_13, newDocfield_21, newDocfield_22, newDocfield_25, newDocfield_37, newDocfield_42, newDocfield_5, newDocfield_60 = [ ], newDocfield_69 = [ ];
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Mandantennummer DDF1 : [" + treffer[ i ].ddf1 + "]" );
newDocfield_1 = treffer[ i ].ddf1;
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Aktennummer DDF10 : [" + treffer[ i ].ddf10 + "]" );
newDocfield_10 = treffer[ i ].ddf10;
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Geschaeftsjahr DDF5 : [" + treffer[ i ].ddf5 + "]" );
newDocfield_5 = treffer[ i ].ddf5;
if ( treffer[ i ].ddf21 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Aktenname DDF21 : [" + treffer[ i ].ddf21 + "]" );
newDocfield_21 = treffer[ i ].ddf21;
}
else
{
xlog( d3, 3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenname wurde nicht gefunden. Setze Standardbezeichnung '" + standard_hauptaktenname + "'." );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Aktenname DDF21 : <" + standard_hauptaktenname + ">" );
newDocfield_21 = standard_hauptaktenname;
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze physischer Aufbewahrungsort DDF22 : [" + treffer[ i ].ddf22 + "]" );
newDocfield_22 = treffer[ i ].ddf22;
if ( treffer[ i ].ddf25 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Geschaeftsfuehrer DDF25 : [" + treffer[ i ].ddf25 + "]" );
newDocfield_25 = treffer[ i ].ddf25;
}
else
{
def STATEMENT = "select dok_dat_feld_25 from firmen_spezifisch where kue_dokuart = 'AMAND' and dok_dat_feld_1 = '" + newDocfield_1 + "'";
def treffer_STATEMENT = d3.sql.executeAndGet( (String) STATEMENT );
if ( treffer_STATEMENT.size() > 0 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Geschaeftsfuehrer DDF25 aus M.-Akte : [" + treffer_STATEMENT[ 0 ].dok_dat_feld_25 + "]" );
newDocfield_25 = treffer_STATEMENT[ 0 ].dok_dat_feld_25;
}
else
{
xlog( d3, 3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Es konnte kein Wert für Geschaeftsfuehrer / DDF25 gefunden werden." );
}
}
if ( treffer[ i ].ddf37 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Auftragsverantwortlicher DDF37 : [" + treffer[ i ].ddf37 + "]" );
newDocfield_37 = treffer[ i ].ddf37;
}
else
{
def STATEMENT = "select dok_dat_feld_37 from firmen_spezifisch where kue_dokuart = 'AMAND' and dok_dat_feld_1 = '" + newDocfield_1 + "'";
def treffer_STATEMENT = d3.sql.executeAndGet( (String) STATEMENT );
if ( treffer_STATEMENT.size() > 0 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Auftragsverantwortlicher DDF37 aus M.-Akte: [" + treffer_STATEMENT[ 0 ].dok_dat_feld_37 + "]" );
newDocfield_37 = treffer_STATEMENT[ 0 ].dok_dat_feld_37;
}
else
{
xlog( d3, 3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Es konnte kein Wert für Auftragsverantwortlicher / DDF37 gefunden werden." );
}
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Briefkopf DDF42 : [" + treffer[ i ].ddf42 + "]" );
newDocfield_42 = treffer[ i ].ddf42;
// Postempfänger
if ( treffer[ i ].ddf60 )
{
def splitted_str_array = treffer[ i ].ddf60.split( ';' );
for ( int j = 0; j < splitted_str_array.length; j++ )
{
def filler = " ";
if ( j >= 10 )
{
filler = "";
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Setze Postempfaenger DDF60 / " + filler + j + " : [" + splitted_str_array[ j ] + "]" );
newDocfield_60[ j ] = splitted_str_array[ j ];
}
}
// Berechtigter:
if ( treffer[ i ].ddf69 )
{
def splitted_str_array = treffer[ i ].ddf69.split( ';' );
for ( int j = 0; j < splitted_str_array.length; j++ )
{
def filler = " ";
if ( j >= 10 )
{
filler = "";
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Setze Berechtigter DDF69 / " + filler + j + " : [" + splitted_str_array[ j ] + "]" );
newDocfield_69[ j ] = splitted_str_array[ j ];
}
}
// Prüfung, ob zu dieser Hauptakte eine passende Sammelakte existiert
// Falls ja: Übernahme der Mandantenstammdaten der entsprechenden Akte
// Falls nein: Fehler in DB eintragen und Abbruch der Verarbeitung dieses Treffers
sqlQuery = "select doku_id, dok_dat_feld_1, dok_dat_feld_2, dok_dat_feld_13 from firmen_spezifisch where kue_dokuart = '" + dokuart_sammelakte + "' and dok_dat_feld_1 = '" + treffer[ i ].ddf1 + "'";
ergebnis = d3.sql.executeAndGet( (String) sqlQuery );
if ( ergebnis.size() > 0 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Mandantenname DDF2 : [" + ergebnis[ 0 ].dok_dat_feld_2 + "]" );
newDocfield_2 = ergebnis[ 0 ].dok_dat_feld_2;
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Mandantengruppennummer DDF13 : [" + ergebnis[ 0 ].dok_dat_feld_13 + "]" );
newDocfield_13 = ergebnis[ 0 ].dok_dat_feld_13;
// Akte mit Stammdaten und Infos aus der Tabelle "zieltabelle" erstellen
// Registerstruktur unterhalb ebenfalls erstellen
Document newDoc = d3.archive.newDocument();
newDoc.type = dokuart_hauptakte;
newDoc.status = Document.DocStatus.DOC_STAT_PROCESSING;
newDoc.editor = "dvelop";
newDoc.field[ 1 ] = newDocfield_1;
newDoc.field[ 2 ] = newDocfield_2;
newDoc.field[ 5 ] = newDocfield_5;
newDoc.field[ 10 ] = newDocfield_10;
newDoc.field[ 13 ] = newDocfield_13;
newDoc.field[ 21 ] = newDocfield_21;
newDoc.field[ 22 ] = newDocfield_22;
newDoc.field[ 25 ] = newDocfield_25;
newDoc.field[ 37 ] = newDocfield_37;
newDoc.field[ 42 ] = newDocfield_42;
for ( int i = 0; i < newDocfield_60.size(); i++ )
{
newDoc.field[ 60 ][ i + 1 ] = newDocfield_60[ i ];
}
for ( int i = 0; i < newDocfield_69.size(); i++ )
{
newDoc.field[ 69 ][ i + 1 ] = newDocfield_69[ i ];
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": =============================" );
//Pruefung ob die anzulegende Akte ggf. schon im System angelegt wurde
sqlQuery = "select doku_id from firmen_spezifisch where kue_dokuart = '" + dokuart_hauptakte + "' and dok_dat_feld_1 = '" + newDocfield_1 + "' AND dok_dat_feld_10 = '" + newDocfield_10 + "'";
ergebnis = d3.sql.executeAndGet( (String) sqlQuery );
if ( ergebnis.size() > 0 ) {
fehler( d3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage [" + newDoc.field[ 10 ] + "] nicht durchgefuehrt da die Akte bereits existiert, doku_id: " + ergebnis[ 0 ].doku_id, (int) treffer[ i ].id );
continue;
}
def aktenanlage_erfolgreich = true;
if ( debug == 0 )
{
try
{
newDoc = d3.archive.importDocument( newDoc );
}
catch ( D3Exception e )
{
fehler( d3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Akte [" + newDoc.field[ 10 ] + "] konnte nicht erzeugt werden: " + e.message, (int) treffer[ i ].id );
aktenanlage_erfolgreich = false;
}
if ( aktenanlage_erfolgreich )
{
// sichern der erzeugten Doku-ID
if ( debug == 0 )
{
sqlQuery = "update " + zieltabelle + " set doku_id = '" + newDoc.id + "' where id = " + treffer[ i ].id;
d3.sql.execute( sqlQuery );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage [" + newDoc.field[ 10 ] + "] erfolgreich, doku_id: [" + newDoc.id + "]" );
}
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Keine Aktenanlage fuer [" + newDoc.field[ 10 ] + "] (Debug-Modus eingeschaltet)." );
}
if ( aktenanlage_erfolgreich )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": =============================" );
//////////////////////////////////////////
// Ebene unterhalb der Hauptakte anlegen
// Dokumentart: Hauptakten-Oberregisterakte, darin alle in den Stammdaten angelegten Oberregister
sqlQuery = "select distinct dok_dat_feld_2 from firmen_spezifisch where kue_dokuart = 'AVMNT' and dok_dat_feld_1 = '" + aktenschluessel + "'";
def resultRows = d3.sql.executeAndGet( (String) sqlQuery );
if ( resultRows.size() > 0 )
{
resultRows.each
{
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": erstelle Oberregister-Akte: [" + it.dok_dat_feld_2 + "]" );
Document newDocOReg = d3.archive.newDocument();
newDocOReg.type = dokuart_oberregisterakte;
newDocOReg.status = Document.DocStatus.DOC_STAT_PROCESSING;
newDocOReg.editor = "dvelop";
newDocOReg.field[ 1 ] = newDocfield_1;
newDocOReg.field[ 2 ] = newDocfield_2;
newDocOReg.field[ 3 ] = it.dok_dat_feld_2; // Oberregister
newDocOReg.field[ 10 ] = newDocfield_10;
newDocOReg.field[ 13 ] = newDocfield_13;
newDocOReg.field[ 21 ] = newDocfield_21;
newDocOReg.field[ 25 ] = newDocfield_25;
newDocOReg.field[ 42 ] = newDocfield_42;
for ( int i = 0; i < newDocfield_69.size(); i++ )
{
newDocOReg.field[ 69 ][ i + 1 ] = newDocfield_69[ i ];
}
if ( debug == 0 )
{
try
{
newDocOReg = d3.archive.importDocument( newDocOReg );
}
catch ( D3Exception e )
{
xlog( d3, 2, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Akte [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "] konnte nicht erzeugt werden: " + e.message );
aktenanlage_erfolgreich = false;
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Keine Aktenanlage fuer [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "] (Debug-Modus eingeschaltet)." );
}
if ( ( aktenanlage_erfolgreich ) && ( debug == 0 ) )
{
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage erfolgreich, doku_id: [" + newDoc.id + "][" + newDocOReg.id + "]" );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage erfolgreich, doku_id: [" + newDoc.id + "][" + newDocOReg.id + "] Register: [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "]" );
}
}
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Weitere Akten werden wegen Fehler nicht angelegt." );
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": =============================" );
if ( aktenanlage_erfolgreich )
{
//////////////////////////////////////////
// Ebene unterhalb der Hauptakten-Oberregisterakte anlegen
// Dokumentart: Hauptakten-Registerakte, darin alle in den Stammdaten angelegten Register
sqlQuery = "select distinct dok_dat_feld_2, dok_dat_feld_3 from firmen_spezifisch where kue_dokuart = 'AVMNT' and dok_dat_feld_1 = '" + aktenschluessel + "' and dok_dat_feld_3 != ''";
def resultRows = d3.sql.executeAndGet( (String) sqlQuery );
if ( resultRows.size() > 0 )
{
resultRows.each
{
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": erstelle Register-Akte: [" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "]" );
Document newDocReg = d3.archive.newDocument();
newDocReg.type = dokuart_registerakte;
newDocReg.status = Document.DocStatus.DOC_STAT_PROCESSING;
newDocReg.editor = "dvelop";
newDocReg.field[ 1 ] = newDocfield_1;
newDocReg.field[ 2 ] = newDocfield_2;
newDocReg.field[ 3 ] = it.dok_dat_feld_2; // Oberregister
newDocReg.field[ 4 ] = it.dok_dat_feld_3; // Register
newDocReg.field[ 10 ] = newDocfield_10;
newDocReg.field[ 13 ] = newDocfield_13;
newDocReg.field[ 21 ] = newDocfield_21;
newDocReg.field[ 25 ] = newDocfield_25;
newDocReg.field[ 42 ] = newDocfield_42;
for ( int i = 0; i < newDocfield_69.size(); i++ )
{
newDocReg.field[ 69 ][ i + 1 ] = newDocfield_69[ i ];
}
if ( debug == 0 )
{
try
{
newDocReg = d3.archive.importDocument( newDocReg );
}
catch ( D3Exception e )
{
xlog( d3, 2, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Akte [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "] konnte nicht erzeugt werden: " + e.message );
aktenanlage_erfolgreich = false;
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Keine Aktenanlage fuer [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "] (Debug-Modus eingeschaltet)." );
}
if ( ( aktenanlage_erfolgreich ) && ( debug == 0 ) )
{
sqlQuery = "select doku_id from firmen_spezifisch where kue_dokuart = '" + dokuart_oberregisterakte + "' and dok_dat_feld_10 = '" + newDoc.field[ 10 ] + "' and dok_dat_feld_3 = '" + it.dok_dat_feld_2 + "'";
//xlog( d3, 3, sqlQuery );
e = d3.sql.executeAndGet( sqlQuery );
def oregdokuid;
if ( e.size() > 0 )
{
oregdokuid = e[0].doku_id;
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage erfolgreich, doku_id: [" + newDoc.id + "][" + oregdokuid + "][" + newDocReg.id + "] Register: [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "]" );
}
}
}
}
}
else
{
fehler( d3, "Es wurde keine passende Sammelakte gefunden. [" + treffer[ i ].ddf10 + "]", (int) treffer[ i ].id );
}
xlog( d3, 4, "************************************************" );
}
else
{
// Fehler
fehler( d3, "Mandantennummer in Tabelle und in Aktennummer unterscheiden sich.", (int) treffer[ i ].id );
}
}
}
def fehler( D3Interface d3, String meldung, int id )
{
def meldung_db;
if ( meldung.length() > 250 )
{
meldung_db = meldung.substring( 0, 249 );
}
else
{
meldung_db = meldung;
}
if ( debug == 0 )
{
sql = "update " + zieltabelle + " set fehler = '" + meldung_db + "' where id = " + id;
d3.sql.execute( sql );
}
xlog( d3, 2, meldung );
}
def xlog( D3Interface d3, int loglevel, String logtext )
{
def logdatei = "d:\\d3\\apps\\" + zieltabelle + ".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;
}

View File

@@ -0,0 +1,605 @@
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");
def prg = "migration_akte_steuerakte.groovy";
def version = "0.1";
def 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;
// In welcher Tabelle soll nach den zu erstellenden Akten gesucht werden?
@Field zieltabelle = "mig_steuerakte";
// Konfiguration der Aktenartkürzel
@Field dokuart_sammelakte = "ASTSA";
@Field dokuart_hauptakte = "ASTEU";
@Field dokuart_oberregisterakte = "ASTOR";
@Field dokuart_registerakte = "ASTRA";
// der hier konfigurierte Wert wird verwendet, wenn kein sonstiger Hauptaktenname gefunden wird.
@Field standard_hauptaktenname = "Steuerakte";
// DDF 1 / ADM_Aktentyp aus der Aktenart ADM_Verwaltung Mandantenakte (AVMNT) - mit diesem Schlüssel werden die benötigten (Ober-)Register aus den Stammdaten in der Aktenart AVMNT ermittelt.
@Field aktenschluessel = "Steuerakte";
/////////////////////////////////////////////////////////////////////////
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, "* Aktenart Sammelakte : " + dokuart_sammelakte );
xlog( d3, 4, "* Aktenart Hauptakte : " + dokuart_hauptakte );
xlog( d3, 4, "* Aktenart Oberregisterakte : " + dokuart_oberregisterakte );
xlog( d3, 4, "* Aktenart Registerakte : " + dokuart_registerakte );
xlog( d3, 4, "* Zieltabelle : " + zieltabelle );
xlog( d3, 4, "* Standard-Hauptaktenname : " + standard_hauptaktenname );
xlog( d3, 4, "* Aktenschluessel : " + aktenschluessel );
xlog( d3, 4, "************************************************" );
def sqlQuery = "select top (100) id,ddf1,ddf48,ddf10,ddf21,ddf22,ddf25,ddf37,ddf42,ddf60,ddf69,ddf5 from " + zieltabelle + " where fehler is null and doku_id is null and id < 9000 ";
treffer = d3.sql.executeAndGet( (String) sqlQuery );
xlog( d3, 4, " Es wurden " + treffer.size() + " Treffer gefunden." );
xlog( d3, 4, "************************************************" );
if ( treffer.size() > 0 )
{
for ( i = 0; i < treffer.size(); i++ )
{
// Prüfung, ob die Mandantnummer in der Aktennummer zu der Mandantnummer aus der Tabelle passt - andernfalls Fehler.
def mandantnr_aus_aktennr = treffer[ i ].ddf10.substring( 0, 5 );
//JFEL toString eingebaut
//if ( mandantnr_aus_aktennr == treffer[ i ].ddf1 )
if ( mandantnr_aus_aktennr == treffer[ i ].ddf1.toString() )
{
// Es wird eine neue Hauptakte erstellt
def newDocfield_1, newDocfield_2, newDocfield_5, newDocfield_10, newDocfield_13, newDocfield_21, newDocfield_22, newDocfield_25, newDocfield_37, newDocfield_42, newDocfield_60 = [ ], newDocfield_69 = [ ];
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Mandantennummer DDF1 : [" + treffer[ i ].ddf1 + "]" );
//JFEL toString eingebaut
//newDocfield_1 = treffer[ i ].ddf1;
newDocfield_1 = treffer[ i ].ddf1.toString();
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Aktennummer DDF10 : [" + treffer[ i ].ddf10 + "]" );
newDocfield_10 = treffer[ i ].ddf10;
def dddf5;
if ( ( ! treffer[ i ].ddf5 ) || ( treffer[ i ].ddf5 = 'null' ) )
{
xlog( d3, 3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Geschaeftsjahr in Tabelle nicht gefuellt, Lese Geschaeftsjahr aus Aktennummer." );
dddf5 = newDocfield_10.substring( 7, 11 );
}
else
{
dddf5 = treffer[ i ].ddf5;
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Geschaeftsjahr DDF5 : [" + dddf5 + "]" );
newDocfield_5 = dddf5;
if ( treffer[ i ].ddf21 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Aktenname DDF21 : [" + treffer[ i ].ddf21 + "]" );
newDocfield_21 = treffer[ i ].ddf21;
}
else
{
xlog( d3, 3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenname wurde nicht gefunden. Setze Standardbezeichnung '" + standard_hauptaktenname + "'." );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Aktenname DDF21 : <" + standard_hauptaktenname + ">" );
newDocfield_21 = standard_hauptaktenname;
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze physischer Aufbewahrungsort DDF22 : [" + treffer[ i ].ddf22 + "]" );
newDocfield_22 = treffer[ i ].ddf22;
if ( treffer[ i ].ddf25 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Geschaeftsfuehrer DDF25 : [" + treffer[ i ].ddf25 + "]" );
newDocfield_25 = treffer[ i ].ddf25;
}
else
{
def STATEMENT = "select dok_dat_feld_25 from firmen_spezifisch where kue_dokuart = 'AMAND' and dok_dat_feld_1 = '" + newDocfield_1 + "'";
def treffer_STATEMENT = d3.sql.executeAndGet( (String) STATEMENT );
if ( treffer_STATEMENT.size() > 0 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Geschaeftsfuehrer DDF25 aus M.-Akte : [" + treffer_STATEMENT[ 0 ].dok_dat_feld_25 + "]" );
newDocfield_25 = treffer_STATEMENT[ 0 ].dok_dat_feld_25;
}
else
{
xlog( d3, 3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Es konnte kein Wert für Geschaeftsfuehrer / DDF25 gefunden werden." );
}
}
if ( treffer[ i ].ddf37 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Auftragsverantwortlicher DDF37 : [" + treffer[ i ].ddf37 + "]" );
newDocfield_37 = treffer[ i ].ddf37;
}
else
{
def STATEMENT = "select dok_dat_feld_37 from firmen_spezifisch where kue_dokuart = 'AMAND' and dok_dat_feld_1 = '" + newDocfield_1 + "'";
def treffer_STATEMENT = d3.sql.executeAndGet( (String) STATEMENT );
if ( treffer_STATEMENT.size() > 0 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Auftragsverantwortlicher DDF37 aus M.-Akte: [" + treffer_STATEMENT[ 0 ].dok_dat_feld_37 + "]" );
newDocfield_37 = treffer_STATEMENT[ 0 ].dok_dat_feld_37;
}
else
{
xlog( d3, 3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Es konnte kein Wert für Auftragsverantwortlicher / DDF37 gefunden werden." );
}
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Briefkopf DDF42 : [" + treffer[ i ].ddf42 + "]" );
newDocfield_42 = treffer[ i ].ddf42;
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Unique-ID Migration DDF48 : [" + treffer[ i ].ddf48 + "]" );
newDocfield_48 = treffer[ i ].ddf48;
// Postempfänger
if ( treffer[ i ].ddf60 )
{
def splitted_str_array = treffer[ i ].ddf60.split( ';' );
for ( int j = 0; j < splitted_str_array.length; j++ )
{
def filler = " ";
if ( j >= 10 )
{
filler = "";
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Setze Postempfaenger DDF60 / " + filler + j + " : [" + splitted_str_array[ j ] + "]" );
newDocfield_60[ j ] = splitted_str_array[ j ];
}
}
// Berechtigter:
if ( treffer[ i ].ddf69 )
{
def splitted_str_array = treffer[ i ].ddf69.split( ';' );
for ( int j = 0; j < splitted_str_array.length; j++ )
{
def filler = " ";
if ( j >= 10 )
{
filler = "";
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Setze Berechtigter DDF69 / " + filler + j + " : [" + splitted_str_array[ j ] + "]" );
newDocfield_69[ j ] = splitted_str_array[ j ];
}
}
// Prüfung, ob zu dieser Hauptakte eine passende Sammelakte existiert
// Falls ja: Übernahme der Mandantenstammdaten der entsprechenden Akte
// Falls nein: Fehler in DB eintragen und Abbruch der Verarbeitung dieses Treffers
sqlQuery = "select doku_id, dok_dat_feld_1, dok_dat_feld_2, dok_dat_feld_13 from firmen_spezifisch where kue_dokuart = '" + dokuart_sammelakte + "' and dok_dat_feld_1 = '" + treffer[ i ].ddf1 + "'";
ergebnis = d3.sql.executeAndGet( (String) sqlQuery );
if ( ergebnis.size() > 0 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Mandantenname DDF2 : [" + ergebnis[ 0 ].dok_dat_feld_2 + "]" );
newDocfield_2 = ergebnis[ 0 ].dok_dat_feld_2;
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Mandantengruppennummer DDF13 : [" + ergebnis[ 0 ].dok_dat_feld_13 + "]" );
newDocfield_13 = ergebnis[ 0 ].dok_dat_feld_13;
// Akte mit Stammdaten und Infos aus der Tabelle "zieltabelle" erstellen
// Registerstruktur unterhalb ebenfalls erstellen
Document newDoc = d3.archive.newDocument();
newDoc.type = dokuart_hauptakte;
newDoc.status = Document.DocStatus.DOC_STAT_PROCESSING;
newDoc.editor = "dvelop";
newDoc.field[ 1 ] = newDocfield_1;
newDoc.field[ 2 ] = newDocfield_2;
newDoc.field[ 5 ] = newDocfield_5;
newDoc.field[ 10 ] = newDocfield_10;
newDoc.field[ 13 ] = newDocfield_13;
newDoc.field[ 21 ] = newDocfield_21;
newDoc.field[ 22 ] = newDocfield_22;
newDoc.field[ 25 ] = newDocfield_25;
newDoc.field[ 37 ] = newDocfield_37;
newDoc.field[ 42 ] = newDocfield_42;
newDoc.field[ 48 ] = newDocfield_48;
for ( int i = 0; i < newDocfield_60.size(); i++ )
{
newDoc.field[ 60 ][ i + 1 ] = newDocfield_60[ i ];
}
for ( int i = 0; i < newDocfield_69.size(); i++ )
{
newDoc.field[ 69 ][ i + 1 ] = newDocfield_69[ i ];
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": =============================" );
//Pruefung ob die anzulegende Akte ggf. schon im System angelegt wurde
sqlQuery = "select doku_id from firmen_spezifisch where kue_dokuart = '" + dokuart_hauptakte + "' and dok_dat_feld_1 = '" + newDocfield_1 + "' AND dok_dat_feld_10 = '" + newDocfield_10 + "'";
ergebnis = d3.sql.executeAndGet( (String) sqlQuery );
if ( ergebnis.size() > 0 ) {
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage [" + newDoc.field[ 10 ] + "] nicht durchgefuehrt da die Akte bereits existiert, doku_id: [" + ergebnis[ 0 ].doku_id + "]" );
fehler( d3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage [" + newDoc.field[ 10 ] + "] nicht durchgefuehrt da die Akte bereits existiert, doku_id: " + ergebnis[ 0 ].doku_id, (int) treffer[ i ].id );
continue;
}
def aktenanlage_erfolgreich = true;
if ( debug == 0 )
{
try
{
newDoc = d3.archive.importDocument( newDoc );
}
catch ( D3Exception e )
{
fehler( d3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Akte [" + newDoc.field[ 10 ] + "] konnte nicht erzeugt werden: " + e.message, (int) treffer[ i ].id );
aktenanlage_erfolgreich = false;
}
if ( aktenanlage_erfolgreich )
{
// sichern der erzeugten Doku-ID
if ( debug == 0 )
{
sqlQuery = "update " + zieltabelle + " set doku_id = '" + newDoc.id + "' where id = " + treffer[ i ].id;
d3.sql.execute( sqlQuery );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage [" + newDoc.field[ 10 ] + "] erfolgreich, doku_id: [" + newDoc.id + "]" );
}
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Keine Aktenanlage fuer [" + newDoc.field[ 10 ] + "] (Debug-Modus eingeschaltet)." );
}
if ( aktenanlage_erfolgreich )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": =============================" );
//////////////////////////////////////////
// Ebene unterhalb der Hauptakte anlegen
// Dokumentart: Hauptakten-Oberregisterakte, darin alle in den Stammdaten angelegten Oberregister
sqlQuery = "select distinct dok_dat_feld_2 from firmen_spezifisch where kue_dokuart = 'AVMNT' and dok_dat_feld_1 = '" + aktenschluessel + "'";
def resultRows = d3.sql.executeAndGet( (String) sqlQuery );
if ( resultRows.size() > 0 )
{
resultRows.each
{
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": erstelle Oberregister-Akte: [" + it.dok_dat_feld_2 + "]" );
Document newDocOReg = d3.archive.newDocument();
newDocOReg.type = dokuart_oberregisterakte;
newDocOReg.status = Document.DocStatus.DOC_STAT_PROCESSING;
newDocOReg.editor = "dvelop";
newDocOReg.field[ 1 ] = newDocfield_1;
newDocOReg.field[ 2 ] = newDocfield_2;
newDocOReg.field[ 3 ] = it.dok_dat_feld_2; // Oberregister
newDocOReg.field[ 5 ] = newDocfield_5;
newDocOReg.field[ 10 ] = newDocfield_10;
newDocOReg.field[ 13 ] = newDocfield_13;
newDocOReg.field[ 21 ] = newDocfield_21;
newDocOReg.field[ 25 ] = newDocfield_25;
newDocOReg.field[ 42 ] = newDocfield_42;
for ( int i = 0; i < newDocfield_69.size(); i++ )
{
newDocOReg.field[ 69 ][ i + 1 ] = newDocfield_69[ i ];
}
if ( debug == 0 )
{
try
{
newDocOReg = d3.archive.importDocument( newDocOReg );
}
catch ( D3Exception e )
{
xlog( d3, 2, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Akte [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "] konnte nicht erzeugt werden: " + e.message );
aktenanlage_erfolgreich = false;
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Keine Aktenanlage fuer [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "] (Debug-Modus eingeschaltet)." );
}
if ( ( aktenanlage_erfolgreich ) && ( debug == 0 ) )
{
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage erfolgreich, doku_id: [" + newDoc.id + "][" + newDocOReg.id + "]" );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage erfolgreich, doku_id: [" + newDoc.id + "][" + newDocOReg.id + "] Register: [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "]" );
}
}
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Weitere Akten werden wegen Fehler nicht angelegt." );
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": =============================" );
if ( aktenanlage_erfolgreich )
{
//////////////////////////////////////////
// Ebene unterhalb der Hauptakten-Oberregisterakte anlegen
// Dokumentart: Hauptakten-Registerakte, darin alle in den Stammdaten angelegten Register
sqlQuery = "select distinct dok_dat_feld_2, dok_dat_feld_3 from firmen_spezifisch where kue_dokuart = 'AVMNT' and dok_dat_feld_1 = '" + aktenschluessel + "' and dok_dat_feld_3 != ''";
def resultRows = d3.sql.executeAndGet( (String) sqlQuery );
if ( resultRows.size() > 0 )
{
resultRows.each
{
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": erstelle Register-Akte: [" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "]" );
Document newDocReg = d3.archive.newDocument();
newDocReg.type = dokuart_registerakte;
newDocReg.status = Document.DocStatus.DOC_STAT_PROCESSING;
newDocReg.editor = "dvelop";
newDocReg.field[ 1 ] = newDocfield_1;
newDocReg.field[ 2 ] = newDocfield_2;
newDocReg.field[ 3 ] = it.dok_dat_feld_2; // Oberregister
newDocReg.field[ 4 ] = it.dok_dat_feld_3; // Register
newDocReg.field[ 5 ] = newDocfield_5;
newDocReg.field[ 10 ] = newDocfield_10;
newDocReg.field[ 13 ] = newDocfield_13;
newDocReg.field[ 21 ] = newDocfield_21;
newDocReg.field[ 25 ] = newDocfield_25;
newDocReg.field[ 42 ] = newDocfield_42;
for ( int i = 0; i < newDocfield_69.size(); i++ )
{
newDocReg.field[ 69 ][ i + 1 ] = newDocfield_69[ i ];
}
if ( debug == 0 )
{
try
{
newDocReg = d3.archive.importDocument( newDocReg );
}
catch ( D3Exception e )
{
xlog( d3, 2, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Akte [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "] konnte nicht erzeugt werden: " + e.message );
aktenanlage_erfolgreich = false;
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Keine Aktenanlage fuer [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "] (Debug-Modus eingeschaltet)." );
}
if ( ( aktenanlage_erfolgreich ) && ( debug == 0 ) )
{
sqlQuery = "select doku_id from firmen_spezifisch where kue_dokuart = '" + dokuart_oberregisterakte + "' and dok_dat_feld_10 = '" + newDoc.field[ 10 ] + "' and dok_dat_feld_3 = '" + it.dok_dat_feld_2 + "'";
//xlog( d3, 3, sqlQuery );
e = d3.sql.executeAndGet( sqlQuery );
def oregdokuid;
if ( e.size() > 0 )
{
oregdokuid = e[0].doku_id;
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage erfolgreich, doku_id: [" + newDoc.id + "][" + oregdokuid + "][" + newDocReg.id + "] Register: [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "]" );
}
}
}
}
}
else
{
fehler( d3, "Es wurde keine passende Sammelakte gefunden. [" + treffer[ i ].ddf10 + "]", (int) treffer[ i ].id );
}
xlog( d3, 4, "************************************************" );
}
else
{
// Fehler
fehler( d3, "Mandantennummer in Tabelle und in Aktennummer unterscheiden sich.", (int) treffer[ i ].id );
}
}
}
def fehler( D3Interface d3, String meldung, int id )
{
def meldung_db;
if ( meldung.length() > 250 )
{
meldung_db = meldung.substring( 0, 249 );
}
else
{
meldung_db = meldung;
}
if ( debug == 0 )
{
sql = "update " + zieltabelle + " set fehler = '" + meldung_db + "' where id = " + id;
d3.sql.execute( sql );
}
xlog( d3, 2, meldung );
}
def xlog( D3Interface d3, int loglevel, String logtext )
{
def logdatei = "d:\\d3\\apps\\" + zieltabelle + "_1.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;
}

View File

@@ -0,0 +1,605 @@
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");
def prg = "migration_akte_steuerakte.groovy";
def version = "0.1";
def 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;
// In welcher Tabelle soll nach den zu erstellenden Akten gesucht werden?
@Field zieltabelle = "mig_steuerakte";
// Konfiguration der Aktenartkürzel
@Field dokuart_sammelakte = "ASTSA";
@Field dokuart_hauptakte = "ASTEU";
@Field dokuart_oberregisterakte = "ASTOR";
@Field dokuart_registerakte = "ASTRA";
// der hier konfigurierte Wert wird verwendet, wenn kein sonstiger Hauptaktenname gefunden wird.
@Field standard_hauptaktenname = "Steuerakte";
// DDF 1 / ADM_Aktentyp aus der Aktenart ADM_Verwaltung Mandantenakte (AVMNT) - mit diesem Schlüssel werden die benötigten (Ober-)Register aus den Stammdaten in der Aktenart AVMNT ermittelt.
@Field aktenschluessel = "Steuerakte";
/////////////////////////////////////////////////////////////////////////
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, "* Aktenart Sammelakte : " + dokuart_sammelakte );
xlog( d3, 4, "* Aktenart Hauptakte : " + dokuart_hauptakte );
xlog( d3, 4, "* Aktenart Oberregisterakte : " + dokuart_oberregisterakte );
xlog( d3, 4, "* Aktenart Registerakte : " + dokuart_registerakte );
xlog( d3, 4, "* Zieltabelle : " + zieltabelle );
xlog( d3, 4, "* Standard-Hauptaktenname : " + standard_hauptaktenname );
xlog( d3, 4, "* Aktenschluessel : " + aktenschluessel );
xlog( d3, 4, "************************************************" );
def sqlQuery = "select top (100) id,ddf1,ddf48,ddf10,ddf21,ddf22,ddf25,ddf37,ddf42,ddf60,ddf69,ddf5 from " + zieltabelle + " where fehler is null and doku_id is null and id >= 9000 and id < 18000 ";
treffer = d3.sql.executeAndGet( (String) sqlQuery );
xlog( d3, 4, " Es wurden " + treffer.size() + " Treffer gefunden." );
xlog( d3, 4, "************************************************" );
if ( treffer.size() > 0 )
{
for ( i = 0; i < treffer.size(); i++ )
{
// Prüfung, ob die Mandantnummer in der Aktennummer zu der Mandantnummer aus der Tabelle passt - andernfalls Fehler.
def mandantnr_aus_aktennr = treffer[ i ].ddf10.substring( 0, 5 );
//JFEL toString eingebaut
//if ( mandantnr_aus_aktennr == treffer[ i ].ddf1 )
if ( mandantnr_aus_aktennr == treffer[ i ].ddf1.toString() )
{
// Es wird eine neue Hauptakte erstellt
def newDocfield_1, newDocfield_2, newDocfield_5, newDocfield_10, newDocfield_13, newDocfield_21, newDocfield_22, newDocfield_25, newDocfield_37, newDocfield_42, newDocfield_60 = [ ], newDocfield_69 = [ ];
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Mandantennummer DDF1 : [" + treffer[ i ].ddf1 + "]" );
//JFEL toString eingebaut
//newDocfield_1 = treffer[ i ].ddf1;
newDocfield_1 = treffer[ i ].ddf1.toString();
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Aktennummer DDF10 : [" + treffer[ i ].ddf10 + "]" );
newDocfield_10 = treffer[ i ].ddf10;
def dddf5;
if ( ( ! treffer[ i ].ddf5 ) || ( treffer[ i ].ddf5 = 'null' ) )
{
xlog( d3, 3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Geschaeftsjahr in Tabelle nicht gefuellt, Lese Geschaeftsjahr aus Aktennummer." );
dddf5 = newDocfield_10.substring( 7, 11 );
}
else
{
dddf5 = treffer[ i ].ddf5;
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Geschaeftsjahr DDF5 : [" + dddf5 + "]" );
newDocfield_5 = dddf5;
if ( treffer[ i ].ddf21 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Aktenname DDF21 : [" + treffer[ i ].ddf21 + "]" );
newDocfield_21 = treffer[ i ].ddf21;
}
else
{
xlog( d3, 3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenname wurde nicht gefunden. Setze Standardbezeichnung '" + standard_hauptaktenname + "'." );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Aktenname DDF21 : <" + standard_hauptaktenname + ">" );
newDocfield_21 = standard_hauptaktenname;
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze physischer Aufbewahrungsort DDF22 : [" + treffer[ i ].ddf22 + "]" );
newDocfield_22 = treffer[ i ].ddf22;
if ( treffer[ i ].ddf25 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Geschaeftsfuehrer DDF25 : [" + treffer[ i ].ddf25 + "]" );
newDocfield_25 = treffer[ i ].ddf25;
}
else
{
def STATEMENT = "select dok_dat_feld_25 from firmen_spezifisch where kue_dokuart = 'AMAND' and dok_dat_feld_1 = '" + newDocfield_1 + "'";
def treffer_STATEMENT = d3.sql.executeAndGet( (String) STATEMENT );
if ( treffer_STATEMENT.size() > 0 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Geschaeftsfuehrer DDF25 aus M.-Akte : [" + treffer_STATEMENT[ 0 ].dok_dat_feld_25 + "]" );
newDocfield_25 = treffer_STATEMENT[ 0 ].dok_dat_feld_25;
}
else
{
xlog( d3, 3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Es konnte kein Wert für Geschaeftsfuehrer / DDF25 gefunden werden." );
}
}
if ( treffer[ i ].ddf37 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Auftragsverantwortlicher DDF37 : [" + treffer[ i ].ddf37 + "]" );
newDocfield_37 = treffer[ i ].ddf37;
}
else
{
def STATEMENT = "select dok_dat_feld_37 from firmen_spezifisch where kue_dokuart = 'AMAND' and dok_dat_feld_1 = '" + newDocfield_1 + "'";
def treffer_STATEMENT = d3.sql.executeAndGet( (String) STATEMENT );
if ( treffer_STATEMENT.size() > 0 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Auftragsverantwortlicher DDF37 aus M.-Akte: [" + treffer_STATEMENT[ 0 ].dok_dat_feld_37 + "]" );
newDocfield_37 = treffer_STATEMENT[ 0 ].dok_dat_feld_37;
}
else
{
xlog( d3, 3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Es konnte kein Wert für Auftragsverantwortlicher / DDF37 gefunden werden." );
}
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Briefkopf DDF42 : [" + treffer[ i ].ddf42 + "]" );
newDocfield_42 = treffer[ i ].ddf42;
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Unique-ID Migration DDF48 : [" + treffer[ i ].ddf48 + "]" );
newDocfield_48 = treffer[ i ].ddf48;
// Postempfänger
if ( treffer[ i ].ddf60 )
{
def splitted_str_array = treffer[ i ].ddf60.split( ';' );
for ( int j = 0; j < splitted_str_array.length; j++ )
{
def filler = " ";
if ( j >= 10 )
{
filler = "";
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Setze Postempfaenger DDF60 / " + filler + j + " : [" + splitted_str_array[ j ] + "]" );
newDocfield_60[ j ] = splitted_str_array[ j ];
}
}
// Berechtigter:
if ( treffer[ i ].ddf69 )
{
def splitted_str_array = treffer[ i ].ddf69.split( ';' );
for ( int j = 0; j < splitted_str_array.length; j++ )
{
def filler = " ";
if ( j >= 10 )
{
filler = "";
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Setze Berechtigter DDF69 / " + filler + j + " : [" + splitted_str_array[ j ] + "]" );
newDocfield_69[ j ] = splitted_str_array[ j ];
}
}
// Prüfung, ob zu dieser Hauptakte eine passende Sammelakte existiert
// Falls ja: Übernahme der Mandantenstammdaten der entsprechenden Akte
// Falls nein: Fehler in DB eintragen und Abbruch der Verarbeitung dieses Treffers
sqlQuery = "select doku_id, dok_dat_feld_1, dok_dat_feld_2, dok_dat_feld_13 from firmen_spezifisch where kue_dokuart = '" + dokuart_sammelakte + "' and dok_dat_feld_1 = '" + treffer[ i ].ddf1 + "'";
ergebnis = d3.sql.executeAndGet( (String) sqlQuery );
if ( ergebnis.size() > 0 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Mandantenname DDF2 : [" + ergebnis[ 0 ].dok_dat_feld_2 + "]" );
newDocfield_2 = ergebnis[ 0 ].dok_dat_feld_2;
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Mandantengruppennummer DDF13 : [" + ergebnis[ 0 ].dok_dat_feld_13 + "]" );
newDocfield_13 = ergebnis[ 0 ].dok_dat_feld_13;
// Akte mit Stammdaten und Infos aus der Tabelle "zieltabelle" erstellen
// Registerstruktur unterhalb ebenfalls erstellen
Document newDoc = d3.archive.newDocument();
newDoc.type = dokuart_hauptakte;
newDoc.status = Document.DocStatus.DOC_STAT_PROCESSING;
newDoc.editor = "dvelop";
newDoc.field[ 1 ] = newDocfield_1;
newDoc.field[ 2 ] = newDocfield_2;
newDoc.field[ 5 ] = newDocfield_5;
newDoc.field[ 10 ] = newDocfield_10;
newDoc.field[ 13 ] = newDocfield_13;
newDoc.field[ 21 ] = newDocfield_21;
newDoc.field[ 22 ] = newDocfield_22;
newDoc.field[ 25 ] = newDocfield_25;
newDoc.field[ 37 ] = newDocfield_37;
newDoc.field[ 42 ] = newDocfield_42;
newDoc.field[ 48 ] = newDocfield_48;
for ( int i = 0; i < newDocfield_60.size(); i++ )
{
newDoc.field[ 60 ][ i + 1 ] = newDocfield_60[ i ];
}
for ( int i = 0; i < newDocfield_69.size(); i++ )
{
newDoc.field[ 69 ][ i + 1 ] = newDocfield_69[ i ];
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": =============================" );
//Pruefung ob die anzulegende Akte ggf. schon im System angelegt wurde
sqlQuery = "select doku_id from firmen_spezifisch where kue_dokuart = '" + dokuart_hauptakte + "' and dok_dat_feld_1 = '" + newDocfield_1 + "' AND dok_dat_feld_10 = '" + newDocfield_10 + "'";
ergebnis = d3.sql.executeAndGet( (String) sqlQuery );
if ( ergebnis.size() > 0 ) {
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage [" + newDoc.field[ 10 ] + "] nicht durchgefuehrt da die Akte bereits existiert, doku_id: [" + ergebnis[ 0 ].doku_id + "]" );
fehler( d3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage [" + newDoc.field[ 10 ] + "] nicht durchgefuehrt da die Akte bereits existiert, doku_id: " + ergebnis[ 0 ].doku_id, (int) treffer[ i ].id );
continue;
}
def aktenanlage_erfolgreich = true;
if ( debug == 0 )
{
try
{
newDoc = d3.archive.importDocument( newDoc );
}
catch ( D3Exception e )
{
fehler( d3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Akte [" + newDoc.field[ 10 ] + "] konnte nicht erzeugt werden: " + e.message, (int) treffer[ i ].id );
aktenanlage_erfolgreich = false;
}
if ( aktenanlage_erfolgreich )
{
// sichern der erzeugten Doku-ID
if ( debug == 0 )
{
sqlQuery = "update " + zieltabelle + " set doku_id = '" + newDoc.id + "' where id = " + treffer[ i ].id;
d3.sql.execute( sqlQuery );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage [" + newDoc.field[ 10 ] + "] erfolgreich, doku_id: [" + newDoc.id + "]" );
}
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Keine Aktenanlage fuer [" + newDoc.field[ 10 ] + "] (Debug-Modus eingeschaltet)." );
}
if ( aktenanlage_erfolgreich )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": =============================" );
//////////////////////////////////////////
// Ebene unterhalb der Hauptakte anlegen
// Dokumentart: Hauptakten-Oberregisterakte, darin alle in den Stammdaten angelegten Oberregister
sqlQuery = "select distinct dok_dat_feld_2 from firmen_spezifisch where kue_dokuart = 'AVMNT' and dok_dat_feld_1 = '" + aktenschluessel + "'";
def resultRows = d3.sql.executeAndGet( (String) sqlQuery );
if ( resultRows.size() > 0 )
{
resultRows.each
{
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": erstelle Oberregister-Akte: [" + it.dok_dat_feld_2 + "]" );
Document newDocOReg = d3.archive.newDocument();
newDocOReg.type = dokuart_oberregisterakte;
newDocOReg.status = Document.DocStatus.DOC_STAT_PROCESSING;
newDocOReg.editor = "dvelop";
newDocOReg.field[ 1 ] = newDocfield_1;
newDocOReg.field[ 2 ] = newDocfield_2;
newDocOReg.field[ 3 ] = it.dok_dat_feld_2; // Oberregister
newDocOReg.field[ 5 ] = newDocfield_5;
newDocOReg.field[ 10 ] = newDocfield_10;
newDocOReg.field[ 13 ] = newDocfield_13;
newDocOReg.field[ 21 ] = newDocfield_21;
newDocOReg.field[ 25 ] = newDocfield_25;
newDocOReg.field[ 42 ] = newDocfield_42;
for ( int i = 0; i < newDocfield_69.size(); i++ )
{
newDocOReg.field[ 69 ][ i + 1 ] = newDocfield_69[ i ];
}
if ( debug == 0 )
{
try
{
newDocOReg = d3.archive.importDocument( newDocOReg );
}
catch ( D3Exception e )
{
xlog( d3, 2, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Akte [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "] konnte nicht erzeugt werden: " + e.message );
aktenanlage_erfolgreich = false;
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Keine Aktenanlage fuer [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "] (Debug-Modus eingeschaltet)." );
}
if ( ( aktenanlage_erfolgreich ) && ( debug == 0 ) )
{
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage erfolgreich, doku_id: [" + newDoc.id + "][" + newDocOReg.id + "]" );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage erfolgreich, doku_id: [" + newDoc.id + "][" + newDocOReg.id + "] Register: [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "]" );
}
}
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Weitere Akten werden wegen Fehler nicht angelegt." );
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": =============================" );
if ( aktenanlage_erfolgreich )
{
//////////////////////////////////////////
// Ebene unterhalb der Hauptakten-Oberregisterakte anlegen
// Dokumentart: Hauptakten-Registerakte, darin alle in den Stammdaten angelegten Register
sqlQuery = "select distinct dok_dat_feld_2, dok_dat_feld_3 from firmen_spezifisch where kue_dokuart = 'AVMNT' and dok_dat_feld_1 = '" + aktenschluessel + "' and dok_dat_feld_3 != ''";
def resultRows = d3.sql.executeAndGet( (String) sqlQuery );
if ( resultRows.size() > 0 )
{
resultRows.each
{
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": erstelle Register-Akte: [" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "]" );
Document newDocReg = d3.archive.newDocument();
newDocReg.type = dokuart_registerakte;
newDocReg.status = Document.DocStatus.DOC_STAT_PROCESSING;
newDocReg.editor = "dvelop";
newDocReg.field[ 1 ] = newDocfield_1;
newDocReg.field[ 2 ] = newDocfield_2;
newDocReg.field[ 3 ] = it.dok_dat_feld_2; // Oberregister
newDocReg.field[ 4 ] = it.dok_dat_feld_3; // Register
newDocReg.field[ 5 ] = newDocfield_5;
newDocReg.field[ 10 ] = newDocfield_10;
newDocReg.field[ 13 ] = newDocfield_13;
newDocReg.field[ 21 ] = newDocfield_21;
newDocReg.field[ 25 ] = newDocfield_25;
newDocReg.field[ 42 ] = newDocfield_42;
for ( int i = 0; i < newDocfield_69.size(); i++ )
{
newDocReg.field[ 69 ][ i + 1 ] = newDocfield_69[ i ];
}
if ( debug == 0 )
{
try
{
newDocReg = d3.archive.importDocument( newDocReg );
}
catch ( D3Exception e )
{
xlog( d3, 2, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Akte [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "] konnte nicht erzeugt werden: " + e.message );
aktenanlage_erfolgreich = false;
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Keine Aktenanlage fuer [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "] (Debug-Modus eingeschaltet)." );
}
if ( ( aktenanlage_erfolgreich ) && ( debug == 0 ) )
{
sqlQuery = "select doku_id from firmen_spezifisch where kue_dokuart = '" + dokuart_oberregisterakte + "' and dok_dat_feld_10 = '" + newDoc.field[ 10 ] + "' and dok_dat_feld_3 = '" + it.dok_dat_feld_2 + "'";
//xlog( d3, 3, sqlQuery );
e = d3.sql.executeAndGet( sqlQuery );
def oregdokuid;
if ( e.size() > 0 )
{
oregdokuid = e[0].doku_id;
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage erfolgreich, doku_id: [" + newDoc.id + "][" + oregdokuid + "][" + newDocReg.id + "] Register: [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "]" );
}
}
}
}
}
else
{
fehler( d3, "Es wurde keine passende Sammelakte gefunden. [" + treffer[ i ].ddf10 + "]", (int) treffer[ i ].id );
}
xlog( d3, 4, "************************************************" );
}
else
{
// Fehler
fehler( d3, "Mandantennummer in Tabelle und in Aktennummer unterscheiden sich.", (int) treffer[ i ].id );
}
}
}
def fehler( D3Interface d3, String meldung, int id )
{
def meldung_db;
if ( meldung.length() > 250 )
{
meldung_db = meldung.substring( 0, 249 );
}
else
{
meldung_db = meldung;
}
if ( debug == 0 )
{
sql = "update " + zieltabelle + " set fehler = '" + meldung_db + "' where id = " + id;
d3.sql.execute( sql );
}
xlog( d3, 2, meldung );
}
def xlog( D3Interface d3, int loglevel, String logtext )
{
def logdatei = "d:\\d3\\apps\\" + zieltabelle + "_2.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;
}

View File

@@ -0,0 +1,605 @@
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");
def prg = "migration_akte_steuerakte.groovy";
def version = "0.1";
def 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;
// In welcher Tabelle soll nach den zu erstellenden Akten gesucht werden?
@Field zieltabelle = "mig_steuerakte";
// Konfiguration der Aktenartkürzel
@Field dokuart_sammelakte = "ASTSA";
@Field dokuart_hauptakte = "ASTEU";
@Field dokuart_oberregisterakte = "ASTOR";
@Field dokuart_registerakte = "ASTRA";
// der hier konfigurierte Wert wird verwendet, wenn kein sonstiger Hauptaktenname gefunden wird.
@Field standard_hauptaktenname = "Steuerakte";
// DDF 1 / ADM_Aktentyp aus der Aktenart ADM_Verwaltung Mandantenakte (AVMNT) - mit diesem Schlüssel werden die benötigten (Ober-)Register aus den Stammdaten in der Aktenart AVMNT ermittelt.
@Field aktenschluessel = "Steuerakte";
/////////////////////////////////////////////////////////////////////////
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, "* Aktenart Sammelakte : " + dokuart_sammelakte );
xlog( d3, 4, "* Aktenart Hauptakte : " + dokuart_hauptakte );
xlog( d3, 4, "* Aktenart Oberregisterakte : " + dokuart_oberregisterakte );
xlog( d3, 4, "* Aktenart Registerakte : " + dokuart_registerakte );
xlog( d3, 4, "* Zieltabelle : " + zieltabelle );
xlog( d3, 4, "* Standard-Hauptaktenname : " + standard_hauptaktenname );
xlog( d3, 4, "* Aktenschluessel : " + aktenschluessel );
xlog( d3, 4, "************************************************" );
def sqlQuery = "select top (100) id,ddf1,ddf48,ddf10,ddf21,ddf22,ddf25,ddf37,ddf42,ddf60,ddf69,ddf5 from " + zieltabelle + " where fehler is null and doku_id is null and id >= 18000 ";
treffer = d3.sql.executeAndGet( (String) sqlQuery );
xlog( d3, 4, " Es wurden " + treffer.size() + " Treffer gefunden." );
xlog( d3, 4, "************************************************" );
if ( treffer.size() > 0 )
{
for ( i = 0; i < treffer.size(); i++ )
{
// Prüfung, ob die Mandantnummer in der Aktennummer zu der Mandantnummer aus der Tabelle passt - andernfalls Fehler.
def mandantnr_aus_aktennr = treffer[ i ].ddf10.substring( 0, 5 );
//JFEL toString eingebaut
//if ( mandantnr_aus_aktennr == treffer[ i ].ddf1 )
if ( mandantnr_aus_aktennr == treffer[ i ].ddf1.toString() )
{
// Es wird eine neue Hauptakte erstellt
def newDocfield_1, newDocfield_2, newDocfield_5, newDocfield_10, newDocfield_13, newDocfield_21, newDocfield_22, newDocfield_25, newDocfield_37, newDocfield_42, newDocfield_60 = [ ], newDocfield_69 = [ ];
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Mandantennummer DDF1 : [" + treffer[ i ].ddf1 + "]" );
//JFEL toString eingebaut
//newDocfield_1 = treffer[ i ].ddf1;
newDocfield_1 = treffer[ i ].ddf1.toString();
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Aktennummer DDF10 : [" + treffer[ i ].ddf10 + "]" );
newDocfield_10 = treffer[ i ].ddf10;
def dddf5;
if ( ( ! treffer[ i ].ddf5 ) || ( treffer[ i ].ddf5 = 'null' ) )
{
xlog( d3, 3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Geschaeftsjahr in Tabelle nicht gefuellt, Lese Geschaeftsjahr aus Aktennummer." );
dddf5 = newDocfield_10.substring( 7, 11 );
}
else
{
dddf5 = treffer[ i ].ddf5;
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Geschaeftsjahr DDF5 : [" + dddf5 + "]" );
newDocfield_5 = dddf5;
if ( treffer[ i ].ddf21 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Aktenname DDF21 : [" + treffer[ i ].ddf21 + "]" );
newDocfield_21 = treffer[ i ].ddf21;
}
else
{
xlog( d3, 3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenname wurde nicht gefunden. Setze Standardbezeichnung '" + standard_hauptaktenname + "'." );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Aktenname DDF21 : <" + standard_hauptaktenname + ">" );
newDocfield_21 = standard_hauptaktenname;
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze physischer Aufbewahrungsort DDF22 : [" + treffer[ i ].ddf22 + "]" );
newDocfield_22 = treffer[ i ].ddf22;
if ( treffer[ i ].ddf25 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Geschaeftsfuehrer DDF25 : [" + treffer[ i ].ddf25 + "]" );
newDocfield_25 = treffer[ i ].ddf25;
}
else
{
def STATEMENT = "select dok_dat_feld_25 from firmen_spezifisch where kue_dokuart = 'AMAND' and dok_dat_feld_1 = '" + newDocfield_1 + "'";
def treffer_STATEMENT = d3.sql.executeAndGet( (String) STATEMENT );
if ( treffer_STATEMENT.size() > 0 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Geschaeftsfuehrer DDF25 aus M.-Akte : [" + treffer_STATEMENT[ 0 ].dok_dat_feld_25 + "]" );
newDocfield_25 = treffer_STATEMENT[ 0 ].dok_dat_feld_25;
}
else
{
xlog( d3, 3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Es konnte kein Wert für Geschaeftsfuehrer / DDF25 gefunden werden." );
}
}
if ( treffer[ i ].ddf37 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Auftragsverantwortlicher DDF37 : [" + treffer[ i ].ddf37 + "]" );
newDocfield_37 = treffer[ i ].ddf37;
}
else
{
def STATEMENT = "select dok_dat_feld_37 from firmen_spezifisch where kue_dokuart = 'AMAND' and dok_dat_feld_1 = '" + newDocfield_1 + "'";
def treffer_STATEMENT = d3.sql.executeAndGet( (String) STATEMENT );
if ( treffer_STATEMENT.size() > 0 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Auftragsverantwortlicher DDF37 aus M.-Akte: [" + treffer_STATEMENT[ 0 ].dok_dat_feld_37 + "]" );
newDocfield_37 = treffer_STATEMENT[ 0 ].dok_dat_feld_37;
}
else
{
xlog( d3, 3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Es konnte kein Wert für Auftragsverantwortlicher / DDF37 gefunden werden." );
}
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Briefkopf DDF42 : [" + treffer[ i ].ddf42 + "]" );
newDocfield_42 = treffer[ i ].ddf42;
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Unique-ID Migration DDF48 : [" + treffer[ i ].ddf48 + "]" );
newDocfield_48 = treffer[ i ].ddf48;
// Postempfänger
if ( treffer[ i ].ddf60 )
{
def splitted_str_array = treffer[ i ].ddf60.split( ';' );
for ( int j = 0; j < splitted_str_array.length; j++ )
{
def filler = " ";
if ( j >= 10 )
{
filler = "";
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Setze Postempfaenger DDF60 / " + filler + j + " : [" + splitted_str_array[ j ] + "]" );
newDocfield_60[ j ] = splitted_str_array[ j ];
}
}
// Berechtigter:
if ( treffer[ i ].ddf69 )
{
def splitted_str_array = treffer[ i ].ddf69.split( ';' );
for ( int j = 0; j < splitted_str_array.length; j++ )
{
def filler = " ";
if ( j >= 10 )
{
filler = "";
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Setze Berechtigter DDF69 / " + filler + j + " : [" + splitted_str_array[ j ] + "]" );
newDocfield_69[ j ] = splitted_str_array[ j ];
}
}
// Prüfung, ob zu dieser Hauptakte eine passende Sammelakte existiert
// Falls ja: Übernahme der Mandantenstammdaten der entsprechenden Akte
// Falls nein: Fehler in DB eintragen und Abbruch der Verarbeitung dieses Treffers
sqlQuery = "select doku_id, dok_dat_feld_1, dok_dat_feld_2, dok_dat_feld_13 from firmen_spezifisch where kue_dokuart = '" + dokuart_sammelakte + "' and dok_dat_feld_1 = '" + treffer[ i ].ddf1 + "'";
ergebnis = d3.sql.executeAndGet( (String) sqlQuery );
if ( ergebnis.size() > 0 )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Mandantenname DDF2 : [" + ergebnis[ 0 ].dok_dat_feld_2 + "]" );
newDocfield_2 = ergebnis[ 0 ].dok_dat_feld_2;
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": setze Mandantengruppennummer DDF13 : [" + ergebnis[ 0 ].dok_dat_feld_13 + "]" );
newDocfield_13 = ergebnis[ 0 ].dok_dat_feld_13;
// Akte mit Stammdaten und Infos aus der Tabelle "zieltabelle" erstellen
// Registerstruktur unterhalb ebenfalls erstellen
Document newDoc = d3.archive.newDocument();
newDoc.type = dokuart_hauptakte;
newDoc.status = Document.DocStatus.DOC_STAT_PROCESSING;
newDoc.editor = "dvelop";
newDoc.field[ 1 ] = newDocfield_1;
newDoc.field[ 2 ] = newDocfield_2;
newDoc.field[ 5 ] = newDocfield_5;
newDoc.field[ 10 ] = newDocfield_10;
newDoc.field[ 13 ] = newDocfield_13;
newDoc.field[ 21 ] = newDocfield_21;
newDoc.field[ 22 ] = newDocfield_22;
newDoc.field[ 25 ] = newDocfield_25;
newDoc.field[ 37 ] = newDocfield_37;
newDoc.field[ 42 ] = newDocfield_42;
newDoc.field[ 48 ] = newDocfield_48;
for ( int i = 0; i < newDocfield_60.size(); i++ )
{
newDoc.field[ 60 ][ i + 1 ] = newDocfield_60[ i ];
}
for ( int i = 0; i < newDocfield_69.size(); i++ )
{
newDoc.field[ 69 ][ i + 1 ] = newDocfield_69[ i ];
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": =============================" );
//Pruefung ob die anzulegende Akte ggf. schon im System angelegt wurde
sqlQuery = "select doku_id from firmen_spezifisch where kue_dokuart = '" + dokuart_hauptakte + "' and dok_dat_feld_1 = '" + newDocfield_1 + "' AND dok_dat_feld_10 = '" + newDocfield_10 + "'";
ergebnis = d3.sql.executeAndGet( (String) sqlQuery );
if ( ergebnis.size() > 0 ) {
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage [" + newDoc.field[ 10 ] + "] nicht durchgefuehrt da die Akte bereits existiert, doku_id: [" + ergebnis[ 0 ].doku_id + "]" );
fehler( d3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage [" + newDoc.field[ 10 ] + "] nicht durchgefuehrt da die Akte bereits existiert, doku_id: " + ergebnis[ 0 ].doku_id, (int) treffer[ i ].id );
continue;
}
def aktenanlage_erfolgreich = true;
if ( debug == 0 )
{
try
{
newDoc = d3.archive.importDocument( newDoc );
}
catch ( D3Exception e )
{
fehler( d3, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Akte [" + newDoc.field[ 10 ] + "] konnte nicht erzeugt werden: " + e.message, (int) treffer[ i ].id );
aktenanlage_erfolgreich = false;
}
if ( aktenanlage_erfolgreich )
{
// sichern der erzeugten Doku-ID
if ( debug == 0 )
{
sqlQuery = "update " + zieltabelle + " set doku_id = '" + newDoc.id + "' where id = " + treffer[ i ].id;
d3.sql.execute( sqlQuery );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage [" + newDoc.field[ 10 ] + "] erfolgreich, doku_id: [" + newDoc.id + "]" );
}
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Keine Aktenanlage fuer [" + newDoc.field[ 10 ] + "] (Debug-Modus eingeschaltet)." );
}
if ( aktenanlage_erfolgreich )
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": =============================" );
//////////////////////////////////////////
// Ebene unterhalb der Hauptakte anlegen
// Dokumentart: Hauptakten-Oberregisterakte, darin alle in den Stammdaten angelegten Oberregister
sqlQuery = "select distinct dok_dat_feld_2 from firmen_spezifisch where kue_dokuart = 'AVMNT' and dok_dat_feld_1 = '" + aktenschluessel + "'";
def resultRows = d3.sql.executeAndGet( (String) sqlQuery );
if ( resultRows.size() > 0 )
{
resultRows.each
{
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": erstelle Oberregister-Akte: [" + it.dok_dat_feld_2 + "]" );
Document newDocOReg = d3.archive.newDocument();
newDocOReg.type = dokuart_oberregisterakte;
newDocOReg.status = Document.DocStatus.DOC_STAT_PROCESSING;
newDocOReg.editor = "dvelop";
newDocOReg.field[ 1 ] = newDocfield_1;
newDocOReg.field[ 2 ] = newDocfield_2;
newDocOReg.field[ 3 ] = it.dok_dat_feld_2; // Oberregister
newDocOReg.field[ 5 ] = newDocfield_5;
newDocOReg.field[ 10 ] = newDocfield_10;
newDocOReg.field[ 13 ] = newDocfield_13;
newDocOReg.field[ 21 ] = newDocfield_21;
newDocOReg.field[ 25 ] = newDocfield_25;
newDocOReg.field[ 42 ] = newDocfield_42;
for ( int i = 0; i < newDocfield_69.size(); i++ )
{
newDocOReg.field[ 69 ][ i + 1 ] = newDocfield_69[ i ];
}
if ( debug == 0 )
{
try
{
newDocOReg = d3.archive.importDocument( newDocOReg );
}
catch ( D3Exception e )
{
xlog( d3, 2, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Akte [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "] konnte nicht erzeugt werden: " + e.message );
aktenanlage_erfolgreich = false;
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Keine Aktenanlage fuer [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "] (Debug-Modus eingeschaltet)." );
}
if ( ( aktenanlage_erfolgreich ) && ( debug == 0 ) )
{
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage erfolgreich, doku_id: [" + newDoc.id + "][" + newDocOReg.id + "]" );
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage erfolgreich, doku_id: [" + newDoc.id + "][" + newDocOReg.id + "] Register: [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "]" );
}
}
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Weitere Akten werden wegen Fehler nicht angelegt." );
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": =============================" );
if ( aktenanlage_erfolgreich )
{
//////////////////////////////////////////
// Ebene unterhalb der Hauptakten-Oberregisterakte anlegen
// Dokumentart: Hauptakten-Registerakte, darin alle in den Stammdaten angelegten Register
sqlQuery = "select distinct dok_dat_feld_2, dok_dat_feld_3 from firmen_spezifisch where kue_dokuart = 'AVMNT' and dok_dat_feld_1 = '" + aktenschluessel + "' and dok_dat_feld_3 != ''";
def resultRows = d3.sql.executeAndGet( (String) sqlQuery );
if ( resultRows.size() > 0 )
{
resultRows.each
{
//xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": erstelle Register-Akte: [" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "]" );
Document newDocReg = d3.archive.newDocument();
newDocReg.type = dokuart_registerakte;
newDocReg.status = Document.DocStatus.DOC_STAT_PROCESSING;
newDocReg.editor = "dvelop";
newDocReg.field[ 1 ] = newDocfield_1;
newDocReg.field[ 2 ] = newDocfield_2;
newDocReg.field[ 3 ] = it.dok_dat_feld_2; // Oberregister
newDocReg.field[ 4 ] = it.dok_dat_feld_3; // Register
newDocReg.field[ 5 ] = newDocfield_5;
newDocReg.field[ 10 ] = newDocfield_10;
newDocReg.field[ 13 ] = newDocfield_13;
newDocReg.field[ 21 ] = newDocfield_21;
newDocReg.field[ 25 ] = newDocfield_25;
newDocReg.field[ 42 ] = newDocfield_42;
for ( int i = 0; i < newDocfield_69.size(); i++ )
{
newDocReg.field[ 69 ][ i + 1 ] = newDocfield_69[ i ];
}
if ( debug == 0 )
{
try
{
newDocReg = d3.archive.importDocument( newDocReg );
}
catch ( D3Exception e )
{
xlog( d3, 2, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Akte [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "] konnte nicht erzeugt werden: " + e.message );
aktenanlage_erfolgreich = false;
}
}
else
{
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Keine Aktenanlage fuer [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "] (Debug-Modus eingeschaltet)." );
}
if ( ( aktenanlage_erfolgreich ) && ( debug == 0 ) )
{
sqlQuery = "select doku_id from firmen_spezifisch where kue_dokuart = '" + dokuart_oberregisterakte + "' and dok_dat_feld_10 = '" + newDoc.field[ 10 ] + "' and dok_dat_feld_3 = '" + it.dok_dat_feld_2 + "'";
//xlog( d3, 3, sqlQuery );
e = d3.sql.executeAndGet( sqlQuery );
def oregdokuid;
if ( e.size() > 0 )
{
oregdokuid = e[0].doku_id;
}
xlog( d3, 4, treffer[ i ].ddf10 + " / " + treffer[ i ].id + ": Aktenanlage erfolgreich, doku_id: [" + newDoc.id + "][" + oregdokuid + "][" + newDocReg.id + "] Register: [" + newDoc.field[ 10 ] + "][" + it.dok_dat_feld_2 + "][" + it.dok_dat_feld_3 + "]" );
}
}
}
}
}
else
{
fehler( d3, "Es wurde keine passende Sammelakte gefunden. [" + treffer[ i ].ddf10 + "]", (int) treffer[ i ].id );
}
xlog( d3, 4, "************************************************" );
}
else
{
// Fehler
fehler( d3, "Mandantennummer in Tabelle und in Aktennummer unterscheiden sich.", (int) treffer[ i ].id );
}
}
}
def fehler( D3Interface d3, String meldung, int id )
{
def meldung_db;
if ( meldung.length() > 250 )
{
meldung_db = meldung.substring( 0, 249 );
}
else
{
meldung_db = meldung;
}
if ( debug == 0 )
{
sql = "update " + zieltabelle + " set fehler = '" + meldung_db + "' where id = " + id;
d3.sql.execute( sql );
}
xlog( d3, 2, meldung );
}
def xlog( D3Interface d3, int loglevel, String logtext )
{
def logdatei = "d:\\d3\\apps\\" + zieltabelle + "_3.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;
}

View File

@@ -0,0 +1,245 @@
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_nachverknuepfen.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;
@Field zieltabelle = "mig_multi_link_work";
@Field doku_id_ende = "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, "* zieltabelle : " + zieltabelle );
xlog( d3, 4, "* doku_id_ende : " + doku_id_ende );
xlog( d3, 4, "* DEBUG : " + debugtext );
xlog( d3, 4, "************************************************" );
def sqlQuery = "SELECT TOP (200) id, doku_id_father, doku_id_child, fehler FROM " + zieltabelle + " where doku_id_father like '%" + doku_id_ende + "' and fehler is null order by id";
xlog( d3, 5, sqlQuery );
resultRows = d3.sql.executeAndGet( (String) sqlQuery );
def meldung, ergebnis, xdebug;
xlog( d3, 4, " Es wurden " + resultRows.size() + " Treffer gefunden." );
xlog( d3, 4, "************************************************" );
if ( resultRows.size() > 0 )
{
def i = 0;
resultRows.each
{
i++;
if ( debug == 0 )
{
ergebnis = d3.call.link_documents( it.doku_id_father, it.doku_id_child, "Master", false, false );
}
else
{
ergebnis = 0
}
if ( ergebnis == 0 )
{
xdebug = "";
if ( debug != 0 )
{
xdebug = " (DEBUG)";
}
meldung = "OK" + xdebug;
}
else
{
meldung = "Fehler: RC [" + ergebnis + "]";
}
xlog( d3, 4, "Nr. " + i + " / ID " + it.id + ": (C) [" + it.doku_id_child + "] => (F) [" + it.doku_id_father + "] => " + meldung );
if ( debug == 0 )
{
fehler( d3, meldung, (int) it.id );
}
}
}
def xlog( D3Interface d3, int loglevel, String logtext )
{
def logdatei = "d:\\d3\\apps\\" + prg + "_" + doku_id_ende + ".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;
}
def fehler( D3Interface d3, String meldung, int id )
{
def meldung_db;
if ( meldung.length() > 250 )
{
meldung_db = meldung.substring( 0, 249 );
}
else
{
meldung_db = meldung;
}
if ( debug == 0 )
{
sql = "update " + zieltabelle + " set fehler = '" + meldung_db + "' where id = " + id;
d3.sql.execute( sql );
}
//xlog( d3, 2, meldung );
}

View File

@@ -0,0 +1,245 @@
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_nachverknuepfen.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;
@Field zieltabelle = "mig_multi_link_work";
@Field doku_id_ende = "1";
/////////////////////////////////////////////////////////////////////////
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, "* zieltabelle : " + zieltabelle );
xlog( d3, 4, "* doku_id_ende : " + doku_id_ende );
xlog( d3, 4, "* DEBUG : " + debugtext );
xlog( d3, 4, "************************************************" );
def sqlQuery = "SELECT TOP (200) id, doku_id_father, doku_id_child, fehler FROM " + zieltabelle + " where doku_id_father like '%" + doku_id_ende + "' and fehler is null order by id";
xlog( d3, 5, sqlQuery );
resultRows = d3.sql.executeAndGet( (String) sqlQuery );
def meldung, ergebnis, xdebug;
xlog( d3, 4, " Es wurden " + resultRows.size() + " Treffer gefunden." );
xlog( d3, 4, "************************************************" );
if ( resultRows.size() > 0 )
{
def i = 0;
resultRows.each
{
i++;
if ( debug == 0 )
{
ergebnis = d3.call.link_documents( it.doku_id_father, it.doku_id_child, "Master", false, false );
}
else
{
ergebnis = 0
}
if ( ergebnis == 0 )
{
xdebug = "";
if ( debug != 0 )
{
xdebug = " (DEBUG)";
}
meldung = "OK" + xdebug;
}
else
{
meldung = "Fehler: RC [" + ergebnis + "]";
}
xlog( d3, 4, "Nr. " + i + " / ID " + it.id + ": (C) [" + it.doku_id_child + "] => (F) [" + it.doku_id_father + "] => " + meldung );
if ( debug == 0 )
{
fehler( d3, meldung, (int) it.id );
}
}
}
def xlog( D3Interface d3, int loglevel, String logtext )
{
def logdatei = "d:\\d3\\apps\\" + prg + "_" + doku_id_ende + ".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;
}
def fehler( D3Interface d3, String meldung, int id )
{
def meldung_db;
if ( meldung.length() > 250 )
{
meldung_db = meldung.substring( 0, 249 );
}
else
{
meldung_db = meldung;
}
if ( debug == 0 )
{
sql = "update " + zieltabelle + " set fehler = '" + meldung_db + "' where id = " + id;
d3.sql.execute( sql );
}
//xlog( d3, 2, meldung );
}

View File

@@ -0,0 +1,245 @@
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_nachverknuepfen.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;
@Field zieltabelle = "mig_multi_link_work";
@Field doku_id_ende = "2";
/////////////////////////////////////////////////////////////////////////
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, "* zieltabelle : " + zieltabelle );
xlog( d3, 4, "* doku_id_ende : " + doku_id_ende );
xlog( d3, 4, "* DEBUG : " + debugtext );
xlog( d3, 4, "************************************************" );
def sqlQuery = "SELECT TOP (200) id, doku_id_father, doku_id_child, fehler FROM " + zieltabelle + " where doku_id_father like '%" + doku_id_ende + "' and fehler is null order by id";
xlog( d3, 5, sqlQuery );
resultRows = d3.sql.executeAndGet( (String) sqlQuery );
def meldung, ergebnis, xdebug;
xlog( d3, 4, " Es wurden " + resultRows.size() + " Treffer gefunden." );
xlog( d3, 4, "************************************************" );
if ( resultRows.size() > 0 )
{
def i = 0;
resultRows.each
{
i++;
if ( debug == 0 )
{
ergebnis = d3.call.link_documents( it.doku_id_father, it.doku_id_child, "Master", false, false );
}
else
{
ergebnis = 0
}
if ( ergebnis == 0 )
{
xdebug = "";
if ( debug != 0 )
{
xdebug = " (DEBUG)";
}
meldung = "OK" + xdebug;
}
else
{
meldung = "Fehler: RC [" + ergebnis + "]";
}
xlog( d3, 4, "Nr. " + i + " / ID " + it.id + ": (C) [" + it.doku_id_child + "] => (F) [" + it.doku_id_father + "] => " + meldung );
if ( debug == 0 )
{
fehler( d3, meldung, (int) it.id );
}
}
}
def xlog( D3Interface d3, int loglevel, String logtext )
{
def logdatei = "d:\\d3\\apps\\" + prg + "_" + doku_id_ende + ".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;
}
def fehler( D3Interface d3, String meldung, int id )
{
def meldung_db;
if ( meldung.length() > 250 )
{
meldung_db = meldung.substring( 0, 249 );
}
else
{
meldung_db = meldung;
}
if ( debug == 0 )
{
sql = "update " + zieltabelle + " set fehler = '" + meldung_db + "' where id = " + id;
d3.sql.execute( sql );
}
//xlog( d3, 2, meldung );
}

View File

@@ -0,0 +1,245 @@
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_nachverknuepfen.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;
@Field zieltabelle = "mig_multi_link_work";
@Field doku_id_ende = "3";
/////////////////////////////////////////////////////////////////////////
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, "* zieltabelle : " + zieltabelle );
xlog( d3, 4, "* doku_id_ende : " + doku_id_ende );
xlog( d3, 4, "* DEBUG : " + debugtext );
xlog( d3, 4, "************************************************" );
def sqlQuery = "SELECT TOP (200) id, doku_id_father, doku_id_child, fehler FROM " + zieltabelle + " where doku_id_father like '%" + doku_id_ende + "' and fehler is null order by id";
xlog( d3, 5, sqlQuery );
resultRows = d3.sql.executeAndGet( (String) sqlQuery );
def meldung, ergebnis, xdebug;
xlog( d3, 4, " Es wurden " + resultRows.size() + " Treffer gefunden." );
xlog( d3, 4, "************************************************" );
if ( resultRows.size() > 0 )
{
def i = 0;
resultRows.each
{
i++;
if ( debug == 0 )
{
ergebnis = d3.call.link_documents( it.doku_id_father, it.doku_id_child, "Master", false, false );
}
else
{
ergebnis = 0
}
if ( ergebnis == 0 )
{
xdebug = "";
if ( debug != 0 )
{
xdebug = " (DEBUG)";
}
meldung = "OK" + xdebug;
}
else
{
meldung = "Fehler: RC [" + ergebnis + "]";
}
xlog( d3, 4, "Nr. " + i + " / ID " + it.id + ": (C) [" + it.doku_id_child + "] => (F) [" + it.doku_id_father + "] => " + meldung );
if ( debug == 0 )
{
fehler( d3, meldung, (int) it.id );
}
}
}
def xlog( D3Interface d3, int loglevel, String logtext )
{
def logdatei = "d:\\d3\\apps\\" + prg + "_" + doku_id_ende + ".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;
}
def fehler( D3Interface d3, String meldung, int id )
{
def meldung_db;
if ( meldung.length() > 250 )
{
meldung_db = meldung.substring( 0, 249 );
}
else
{
meldung_db = meldung;
}
if ( debug == 0 )
{
sql = "update " + zieltabelle + " set fehler = '" + meldung_db + "' where id = " + id;
d3.sql.execute( sql );
}
//xlog( d3, 2, meldung );
}

View File

@@ -0,0 +1,244 @@
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_nachverknuepfen.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;
@Field zieltabelle = "mig_multi_link_work";
@Field doku_id_ende = "4";
/////////////////////////////////////////////////////////////////////////
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, "* zieltabelle : " + zieltabelle );
xlog( d3, 4, "* doku_id_ende : " + doku_id_ende );
xlog( d3, 4, "* DEBUG : " + debugtext );
xlog( d3, 4, "************************************************" );
def sqlQuery = "SELECT TOP (200) id, doku_id_father, doku_id_child, fehler FROM " + zieltabelle + " where doku_id_father like '%" + doku_id_ende + "' and fehler is null order by id";
xlog( d3, 5, sqlQuery );
resultRows = d3.sql.executeAndGet( (String) sqlQuery );
def meldung, ergebnis, xdebug;
xlog( d3, 4, " Es wurden " + resultRows.size() + " Treffer gefunden." );
xlog( d3, 4, "************************************************" );
if ( resultRows.size() > 0 )
{
def i = 0;
resultRows.each
{
i++;
if ( debug == 0 )
{
ergebnis = d3.call.link_documents( it.doku_id_father, it.doku_id_child, "Master", false, false );
}
else
{
ergebnis = 0
}
if ( ergebnis == 0 )
{
xdebug = "";
if ( debug != 0 )
{
xdebug = " (DEBUG)";
}
meldung = "OK" + xdebug;
}
else
{
meldung = "Fehler: RC [" + ergebnis + "]";
}
xlog( d3, 4, "Nr. " + i + " / ID " + it.id + ": (C) [" + it.doku_id_child + "] => (F) [" + it.doku_id_father + "] => " + meldung );
if ( debug == 0 )
{
fehler( d3, meldung, (int) it.id );
}
}
}
def xlog( D3Interface d3, int loglevel, String logtext )
{
def logdatei = "d:\\d3\\apps\\" + prg + "_" + doku_id_ende + ".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;
}
def fehler( D3Interface d3, String meldung, int id )
{
def meldung_db;
if ( meldung.length() > 250 )
{
meldung_db = meldung.substring( 0, 249 );
}
else
{
meldung_db = meldung;
}
if ( debug == 0 )
{
sql = "update " + zieltabelle + " set fehler = '" + meldung_db + "' where id = " + id;
d3.sql.execute( sql );
}
//xlog( d3, 2, meldung );
}

View File

@@ -0,0 +1,243 @@
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_nachverknuepfen.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;
@Field zieltabelle = "mig_multi_link_work";
@Field doku_id_ende = "5";
/////////////////////////////////////////////////////////////////////////
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, "* zieltabelle : " + zieltabelle );
xlog( d3, 4, "* doku_id_ende : " + doku_id_ende );
xlog( d3, 4, "* DEBUG : " + debugtext );
xlog( d3, 4, "************************************************" );
def sqlQuery = "SELECT TOP (200) id, doku_id_father, doku_id_child, fehler FROM " + zieltabelle + " where doku_id_father like '%" + doku_id_ende + "' and fehler is null order by id";
xlog( d3, 5, sqlQuery );
resultRows = d3.sql.executeAndGet( (String) sqlQuery );
def meldung, ergebnis, xdebug;
xlog( d3, 4, " Es wurden " + resultRows.size() + " Treffer gefunden." );
xlog( d3, 4, "************************************************" );
if ( resultRows.size() > 0 )
{
def i = 0;
resultRows.each
{
i++;
if ( debug == 0 )
{
ergebnis = d3.call.link_documents( it.doku_id_father, it.doku_id_child, "Master", false, false );
}
else
{
ergebnis = 0
}
if ( ergebnis == 0 )
{
xdebug = "";
if ( debug != 0 )
{
xdebug = " (DEBUG)";
}
meldung = "OK" + xdebug;
}
else
{
meldung = "Fehler: RC [" + ergebnis + "]";
}
xlog( d3, 4, "Nr. " + i + " / ID " + it.id + ": (C) [" + it.doku_id_child + "] => (F) [" + it.doku_id_father + "] => " + meldung );
if ( debug == 0 )
{
fehler( d3, meldung, (int) it.id );
}
}
}
def xlog( D3Interface d3, int loglevel, String logtext )
{
def logdatei = "d:\\d3\\apps\\" + prg + "_" + doku_id_ende + ".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;
}
def fehler( D3Interface d3, String meldung, int id )
{
def meldung_db;
if ( meldung.length() > 250 )
{
meldung_db = meldung.substring( 0, 249 );
}
else
{
meldung_db = meldung;
}
if ( debug == 0 )
{
sql = "update " + zieltabelle + " set fehler = '" + meldung_db + "' where id = " + id;
d3.sql.execute( sql );
}
//xlog( d3, 2, meldung );
}

View File

@@ -0,0 +1,245 @@
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_nachverknuepfen.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;
@Field zieltabelle = "mig_multi_link_work";
@Field doku_id_ende = "6";
/////////////////////////////////////////////////////////////////////////
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, "* zieltabelle : " + zieltabelle );
xlog( d3, 4, "* doku_id_ende : " + doku_id_ende );
xlog( d3, 4, "* DEBUG : " + debugtext );
xlog( d3, 4, "************************************************" );
def sqlQuery = "SELECT TOP (200) id, doku_id_father, doku_id_child, fehler FROM " + zieltabelle + " where doku_id_father like '%" + doku_id_ende + "' and fehler is null order by id";
xlog( d3, 5, sqlQuery );
resultRows = d3.sql.executeAndGet( (String) sqlQuery );
def meldung, ergebnis, xdebug;
xlog( d3, 4, " Es wurden " + resultRows.size() + " Treffer gefunden." );
xlog( d3, 4, "************************************************" );
if ( resultRows.size() > 0 )
{
def i = 0;
resultRows.each
{
i++;
if ( debug == 0 )
{
ergebnis = d3.call.link_documents( it.doku_id_father, it.doku_id_child, "Master", false, false );
}
else
{
ergebnis = 0
}
if ( ergebnis == 0 )
{
xdebug = "";
if ( debug != 0 )
{
xdebug = " (DEBUG)";
}
meldung = "OK" + xdebug;
}
else
{
meldung = "Fehler: RC [" + ergebnis + "]";
}
xlog( d3, 4, "Nr. " + i + " / ID " + it.id + ": (C) [" + it.doku_id_child + "] => (F) [" + it.doku_id_father + "] => " + meldung );
if ( debug == 0 )
{
fehler( d3, meldung, (int) it.id );
}
}
}
def xlog( D3Interface d3, int loglevel, String logtext )
{
def logdatei = "d:\\d3\\apps\\" + prg + "_" + doku_id_ende + ".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;
}
def fehler( D3Interface d3, String meldung, int id )
{
def meldung_db;
if ( meldung.length() > 250 )
{
meldung_db = meldung.substring( 0, 249 );
}
else
{
meldung_db = meldung;
}
if ( debug == 0 )
{
sql = "update " + zieltabelle + " set fehler = '" + meldung_db + "' where id = " + id;
d3.sql.execute( sql );
}
//xlog( d3, 2, meldung );
}

View File

@@ -0,0 +1,245 @@
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_nachverknuepfen.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;
@Field zieltabelle = "mig_multi_link_work";
@Field doku_id_ende = "7";
/////////////////////////////////////////////////////////////////////////
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, "* zieltabelle : " + zieltabelle );
xlog( d3, 4, "* doku_id_ende : " + doku_id_ende );
xlog( d3, 4, "* DEBUG : " + debugtext );
xlog( d3, 4, "************************************************" );
def sqlQuery = "SELECT TOP (200) id, doku_id_father, doku_id_child, fehler FROM " + zieltabelle + " where doku_id_father like '%" + doku_id_ende + "' and fehler is null order by id";
xlog( d3, 5, sqlQuery );
resultRows = d3.sql.executeAndGet( (String) sqlQuery );
def meldung, ergebnis, xdebug;
xlog( d3, 4, " Es wurden " + resultRows.size() + " Treffer gefunden." );
xlog( d3, 4, "************************************************" );
if ( resultRows.size() > 0 )
{
def i = 0;
resultRows.each
{
i++;
if ( debug == 0 )
{
ergebnis = d3.call.link_documents( it.doku_id_father, it.doku_id_child, "Master", false, false );
}
else
{
ergebnis = 0
}
if ( ergebnis == 0 )
{
xdebug = "";
if ( debug != 0 )
{
xdebug = " (DEBUG)";
}
meldung = "OK" + xdebug;
}
else
{
meldung = "Fehler: RC [" + ergebnis + "]";
}
xlog( d3, 4, "Nr. " + i + " / ID " + it.id + ": (C) [" + it.doku_id_child + "] => (F) [" + it.doku_id_father + "] => " + meldung );
if ( debug == 0 )
{
fehler( d3, meldung, (int) it.id );
}
}
}
def xlog( D3Interface d3, int loglevel, String logtext )
{
def logdatei = "d:\\d3\\apps\\" + prg + "_" + doku_id_ende + ".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;
}
def fehler( D3Interface d3, String meldung, int id )
{
def meldung_db;
if ( meldung.length() > 250 )
{
meldung_db = meldung.substring( 0, 249 );
}
else
{
meldung_db = meldung;
}
if ( debug == 0 )
{
sql = "update " + zieltabelle + " set fehler = '" + meldung_db + "' where id = " + id;
d3.sql.execute( sql );
}
//xlog( d3, 2, meldung );
}

View File

@@ -0,0 +1,245 @@
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_nachverknuepfen.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;
@Field zieltabelle = "mig_multi_link_work";
@Field doku_id_ende = "8";
/////////////////////////////////////////////////////////////////////////
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, "* zieltabelle : " + zieltabelle );
xlog( d3, 4, "* doku_id_ende : " + doku_id_ende );
xlog( d3, 4, "* DEBUG : " + debugtext );
xlog( d3, 4, "************************************************" );
def sqlQuery = "SELECT TOP (200) id, doku_id_father, doku_id_child, fehler FROM " + zieltabelle + " where doku_id_father like '%" + doku_id_ende + "' and fehler is null order by id";
xlog( d3, 5, sqlQuery );
resultRows = d3.sql.executeAndGet( (String) sqlQuery );
def meldung, ergebnis, xdebug;
xlog( d3, 4, " Es wurden " + resultRows.size() + " Treffer gefunden." );
xlog( d3, 4, "************************************************" );
if ( resultRows.size() > 0 )
{
def i = 0;
resultRows.each
{
i++;
if ( debug == 0 )
{
ergebnis = d3.call.link_documents( it.doku_id_father, it.doku_id_child, "Master", false, false );
}
else
{
ergebnis = 0
}
if ( ergebnis == 0 )
{
xdebug = "";
if ( debug != 0 )
{
xdebug = " (DEBUG)";
}
meldung = "OK" + xdebug;
}
else
{
meldung = "Fehler: RC [" + ergebnis + "]";
}
xlog( d3, 4, "Nr. " + i + " / ID " + it.id + ": (C) [" + it.doku_id_child + "] => (F) [" + it.doku_id_father + "] => " + meldung );
if ( debug == 0 )
{
fehler( d3, meldung, (int) it.id );
}
}
}
def xlog( D3Interface d3, int loglevel, String logtext )
{
def logdatei = "d:\\d3\\apps\\" + prg + "_" + doku_id_ende + ".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;
}
def fehler( D3Interface d3, String meldung, int id )
{
def meldung_db;
if ( meldung.length() > 250 )
{
meldung_db = meldung.substring( 0, 249 );
}
else
{
meldung_db = meldung;
}
if ( debug == 0 )
{
sql = "update " + zieltabelle + " set fehler = '" + meldung_db + "' where id = " + id;
d3.sql.execute( sql );
}
//xlog( d3, 2, meldung );
}

View File

@@ -0,0 +1,245 @@
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_nachverknuepfen.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;
@Field zieltabelle = "mig_multi_link_work";
@Field doku_id_ende = "9";
/////////////////////////////////////////////////////////////////////////
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, "* zieltabelle : " + zieltabelle );
xlog( d3, 4, "* doku_id_ende : " + doku_id_ende );
xlog( d3, 4, "* DEBUG : " + debugtext );
xlog( d3, 4, "************************************************" );
def sqlQuery = "SELECT TOP (200) id, doku_id_father, doku_id_child, fehler FROM " + zieltabelle + " where doku_id_father like '%" + doku_id_ende + "' and fehler is null order by id";
xlog( d3, 5, sqlQuery );
resultRows = d3.sql.executeAndGet( (String) sqlQuery );
def meldung, ergebnis, xdebug;
xlog( d3, 4, " Es wurden " + resultRows.size() + " Treffer gefunden." );
xlog( d3, 4, "************************************************" );
if ( resultRows.size() > 0 )
{
def i = 0;
resultRows.each
{
i++;
if ( debug == 0 )
{
ergebnis = d3.call.link_documents( it.doku_id_father, it.doku_id_child, "Master", false, false );
}
else
{
ergebnis = 0
}
if ( ergebnis == 0 )
{
xdebug = "";
if ( debug != 0 )
{
xdebug = " (DEBUG)";
}
meldung = "OK" + xdebug;
}
else
{
meldung = "Fehler: RC [" + ergebnis + "]";
}
xlog( d3, 4, "Nr. " + i + " / ID " + it.id + ": (C) [" + it.doku_id_child + "] => (F) [" + it.doku_id_father + "] => " + meldung );
if ( debug == 0 )
{
fehler( d3, meldung, (int) it.id );
}
}
}
def xlog( D3Interface d3, int loglevel, String logtext )
{
def logdatei = "d:\\d3\\apps\\" + prg + "_" + doku_id_ende + ".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;
}
def fehler( D3Interface d3, String meldung, int id )
{
def meldung_db;
if ( meldung.length() > 250 )
{
meldung_db = meldung.substring( 0, 249 );
}
else
{
meldung_db = meldung;
}
if ( debug == 0 )
{
sql = "update " + zieltabelle + " set fehler = '" + meldung_db + "' where id = " + id;
d3.sql.execute( sql );
}
//xlog( d3, 2, meldung );
}

View File

@@ -0,0 +1,223 @@
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_nachverknuepfen_BP.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;
@Field zieltabelle = "mig_multi_link_work";
@Field doku_id_ende = "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, "* zieltabelle : " + zieltabelle );
xlog( d3, 4, "* doku_id_ende : " + doku_id_ende );
xlog( d3, 4, "* DEBUG : " + debugtext );
xlog( d3, 4, "************************************************" );
def sqlQuery = "select top (150) doku_id from firmen_spezifisch where kue_dokuart = 'DBETR' and doku_id not in ( select doku_id_unter from dokumenten_verknuepf )";
xlog( d3, 5, sqlQuery );
resultRows = d3.sql.executeAndGet( (String) sqlQuery );
def meldung, ergebnis, xdebug;
xlog( d3, 4, " Es wurden " + resultRows.size() + " Treffer gefunden." );
xlog( d3, 4, "************************************************" );
if ( resultRows.size() > 0 )
{
def i = 0;
resultRows.each
{
i++;
if ( debug == 0 )
{
ergebnis = d3.call.link_documents( "", it.doku_id, "Master", false, true );
}
else
{
ergebnis = 0
}
if ( ergebnis == 0 )
{
xdebug = "";
if ( debug != 0 )
{
xdebug = " (DEBUG)";
}
meldung = "OK" + xdebug;
}
else
{
meldung = "Fehler: RC [" + ergebnis + "]";
}
xlog( d3, 4, "Nr. " + i + ": (C) [" + it.doku_id + "] => " + meldung );
if ( debug == 0 )
{
xlog( d3, 4, meldung );
}
}
}
def xlog( D3Interface d3, int loglevel, String logtext )
{
def logdatei = "d:\\d3\\apps\\" + prg + "_" + doku_id_ende + ".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;
}

View File

@@ -0,0 +1,217 @@
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_mandant_notizen.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 i, ergebniszeilen, ergebnistext;
def sqlQuery = "select top (100) id,ddf1,notiz from mig_mandant_notizen where fehler is null and status is null ";
resultRows = d3.sql.executeAndGet( (String) sqlQuery );
if ( resultRows.size() > 0 )
{
xlog( d3, 4, " Es wurden " + resultRows.size() + " Treffer gefunden." );
xlog( d3, 4, "************************************************" );
for ( i = 0; i < resultRows.size(); i++ )
{
ergebniszeilen = d3.sql.executeAndGet( "select doku_id from firmen_spezifisch where kue_dokuart = 'AMAND' and dok_dat_feld_1 = '" + resultRows[ i ].ddf1 + "' " );
if ( ergebniszeilen.size() > 0 )
{
ergebnistext = "ID " + resultRows[ i ].id + " / Mandantnummer [" + resultRows[ i ].ddf1 + "] Mandantenakte Doku-ID: [" + ergebniszeilen[ 0 ].doku_id + "] ";
if ( debug == 0 )
{
//def ergebnis = d3.call.note_add_string( resultRows[ i ].notiz, ergebniszeilen[ 0 ].doku_id, "Master" ); // hat eine Begrenzung auf die Länge der Notiz (1997 Zeichen sind noch erlaubt).
def nodeFile = new File( "d:\\d3\\apps\\notiz.txt" );
nodeFile.append( resultRows[ i ].notiz );
def ergebnis = d3.call.note_add_file( "d:\\d3\\apps\\notiz.txt", ergebniszeilen[ 0 ].doku_id, "Master" );
nodeFile.delete();
if ( ergebnis == 0 )
{
ergebnistext = ergebnistext + "Die Notiz (ID " + resultRows[ i ].id + ", Laenge: " + resultRows[ i ].notiz.length() + " Zeichen) wurde erfolgreich angelegt."
d3.sql.execute( "update mig_mandant_notizen set status = '0' where id = " + resultRows[ i ].id );
}
else
{
ergebnistext = ergebnistext + "Die Notiz (ID " + resultRows[ i ].id + ", Laenge: " + resultRows[ i ].notiz.length() + " Zeichen) konnte nicht angelegt werden: RC " + ergebnis;
d3.sql.execute( "update mig_mandant_notizen set status = '" + ergebnis + "', fehler = '" + ergebnistext + "' where id = " + resultRows[ i ].id );
}
xlog( d3, 4, ergebnistext );
}
else
{
xlog( d3, 3, ergebnistext + "DEBUG ist eingeschaltet, es werden keine Aenderungen durchgefuehrt." );
}
}
else
{
xlog( d3, 3, "ID " + resultRows[ i ].id + " / Mandantnummer [" + resultRows[ i ].ddf1 + "]: Es wurde keine Mandantakte gefunden." );
}
}
}
else
{
xlog( d3, 3, "Es wurden keine passenden Treffer gefunden!" );
}
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;
}

View File

@@ -0,0 +1,218 @@
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_notizen_hauptakten.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;
/////////////////////////////////////////////////////////////////////////
// In welcher Tabelle soll nach den zu erstellenden Notizen gesucht werden?
@Field zieltabelle = "mig_hauptakten_notizen";
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 i, ergebniszeilen, ergebnistext;
def sqlQuery = "select top (100) id,ddf10,notiz from " + zieltabelle + " where fehler is null and status is null and ddf10 like '%ST%' ";
resultRows = d3.sql.executeAndGet( (String) sqlQuery );
if ( resultRows.size() > 0 )
{
xlog( d3, 4, " Es wurden " + resultRows.size() + " Treffer gefunden." );
xlog( d3, 4, "************************************************" );
for ( i = 0; i < resultRows.size(); i++ )
{
ergebniszeilen = d3.sql.executeAndGet( "select doku_id from firmen_spezifisch where kue_dokuart = 'ASTEU' and dok_dat_feld_10 = '" + resultRows[ i ].ddf10 + "' " );
if ( ergebniszeilen.size() > 0 )
{
ergebnistext = "ID " + resultRows[ i ].id + " / Aktennummer [" + resultRows[ i ].ddf10 + "] Hauptakte Doku-ID: [" + ergebniszeilen[ 0 ].doku_id + "] ";
if ( debug == 0 )
{
//def ergebnis = d3.call.note_add_string( resultRows[ i ].notiz, ergebniszeilen[ 0 ].doku_id, "Master" ); // hat eine Begrenzung auf die Länge der Notiz (1997 Zeichen sind noch erlaubt).
def nodeFile = new File( "d:\\d3\\apps\\notiz_hauptakte.txt" );
nodeFile.append( resultRows[ i ].notiz );
def ergebnis = d3.call.note_add_file( "d:\\d3\\apps\\notiz_hauptakte.txt", ergebniszeilen[ 0 ].doku_id, "Master" );
nodeFile.delete();
if ( ergebnis == 0 )
{
ergebnistext = ergebnistext + "Die Notiz (ID " + resultRows[ i ].id + ", Laenge: " + resultRows[ i ].notiz.length() + " Zeichen) wurde erfolgreich angelegt."
d3.sql.execute( "update " + zieltabelle + " set status = '0' where id = " + resultRows[ i ].id );
}
else
{
ergebnistext = ergebnistext + "Die Notiz (ID " + resultRows[ i ].id + ", Laenge: " + resultRows[ i ].notiz.length() + " Zeichen) konnte nicht angelegt werden: RC " + ergebnis;
d3.sql.execute( "update " + zieltabelle + " set status = '" + ergebnis + "', fehler = '" + ergebnistext + "' where id = " + resultRows[ i ].id );
}
xlog( d3, 4, ergebnistext );
}
else
{
xlog( d3, 3, ergebnistext + "DEBUG ist eingeschaltet, es werden keine Aenderungen durchgefuehrt." );
}
}
else
{
xlog( d3, 3, "ID " + resultRows[ i ].id + " / Aktennummer [" + resultRows[ i ].ddf10 + "]: Es wurde keine Hauptakte gefunden." );
}
}
}
else
{
xlog( d3, 3, "Es wurden keine passenden Treffer gefunden!" );
}
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;
}

View File

@@ -0,0 +1,566 @@
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;
}

View File

@@ -0,0 +1,566 @@
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_2.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 and id < 613985 ";
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;
}

View File

@@ -0,0 +1,566 @@
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_3.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 >= 613985 and id < 1423048 ";
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;
}

View File

@@ -0,0 +1,566 @@
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_4.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 >= 1423048 ";
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;
}

View File

@@ -0,0 +1,181 @@
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_schneller.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 i, ergebniszeilen, ergebnistext;
def sqlQuery = "select distinct m.ddf10, f.doku_id from mig_link_docs_2 m , firmen_spezifisch f where f.dok_dat_feld_10 = m.ddf10 and m.ddf10 like '[0-9][0-9][0-9][0-9][0-9][B][E][0-9][0-9][0-9][0-9][0-9][0-9]' and f.kue_dokuart = 'ABERB' "; //and m.ddf10 = '13292BE000400'";
resultRows = d3.sql.executeAndGet( (String) sqlQuery );
if ( resultRows.size() > 0 )
{
xlog( d3, 4, " Es wurden " + resultRows.size() + " Treffer gefunden." );
xlog( d3, 4, "************************************************" );
for ( i = 0; i < resultRows.size(); i++ )
{
def STATEMENT = "update mig_link_docs_2 set doku_id_target_fol = '" + resultRows[ i ].doku_id + "' where ddf10 = '" + resultRows[ i ].ddf10 + "' and doku_id_target_fol is null";
xlog( d3, 4, "Nr. " + i + ": " + STATEMENT );
def erg = d3.sql.execute( (String) STATEMENT );
xlog( d3, 4, "Nr. " + i + ": " + erg + " Datensaetze wurden aktualisiert." );
}
}
else
{
xlog( d3, 3, "Es wurden keine passenden Treffer gefunden!" );
}
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;
}