////////////////////////////////// // // Geschäftspartner-IDs ändern // // geschrieben von calb / 2019.01.23 // // (c) d.velop AG 2019 // ////////////////////////////////// ////////////////////////////////// // // Dieses Skript passt Geschäftspartner-ID von verschiedenen Dokumentarten an // vars vers = "0.1 calb d.AG/PS 2019.01.23 Initialversion" // ////////////////////////////////// // Konfiguration // debug = 1 => es werden keine Änderungen am Dokumentbestand durchgeführt // debug = 0 => es werden Änderungen am Dokumentbestand durchgeführt vars debug = 1 // db_tabelle => Tabelle, in der die zu ändernden Werte gefunden werden. vars db_tabelle = "d3_mapping" // spalte_alter_wert => DB-Spalte, in der der alte Wert gefunden werden kann vars spalte_alter_wert = "Kunde_alt" // spalte_neuer_wert => DB-Spalte, in der der neue Wert gefunden werden kann vars spalte_neuer_wert = "Kunde_neu" // spalte_status => DB-Spalte, in der der Status des Eintrags festgehalten wird vars spalte_status = "status" // liste_dokuarten => Liste von Dokumentarten, in denen das Update durchgeführt werden soll vars liste_dokuarten = "AGSP,DMY,DKOR,DRECH,DVER,DKRE,DAGES,DGS,AAUF,DAB,DVPM,DFUEK,DESDO,DARTE,DLIEF,DVORK,DREKL,DGEAK" //vars liste_dokuarten = "EVERT,DFOT" // zu_aenderndes_ddf => DDF, in welchem die Information geändert werden soll vars zu_aenderndes_ddf = "6" ////////////////////////////////// call dmglog( 4, "*********************************************" ) call dmglog( 4, "* DMG_gesch_id_wechsel.jpl *" ) call dmglog( 4, "* calb/d.velop AG *" ) call dmglog( 4, "*********************************************" ) call dmglog( 4, "* " ## vers ) call dmglog( 4, "* db_tabelle : " ## db_tabelle ) call dmglog( 4, "* spalte_alter_wert : " ## spalte_alter_wert ) call dmglog( 4, "* spalte_neuer_wert : " ## spalte_neuer_wert ) call dmglog( 4, "* spalte_status : " ## spalte_status ) call dmglog( 4, "* liste_dokuarten : " ## liste_dokuarten ) call dmglog( 4, "* zu_aenderndes_ddf : " ## zu_aenderndes_ddf ) call dmglog( 4, "* DEBUG : " ## debug ) // Los geht's ...... call dmglog( 4, "*********************************************" ) /////////////////////////////////////////////////////////////////////// vars spalte_aw[5000], spalte_nw[5000] vars doku_id[500000] vars anzahl, anzahl2, i, j, k, dokuarten, ergebnis, kaputt kaputt = 0 k = 0 // Zuerst ein Select auf die Tabelle, um festzustellen, was alles getan werden muss. dbms alias spalte_aw, spalte_nw dbms sql select :spalte_alter_wert, :spalte_neuer_wert \ from :db_tabelle \ where :spalte_status = '' or :spalte_status is null anzahl = @dmrowcount dbms alias call dmglog( 4, "Es wurden " ## anzahl ## " Treffer gefunden." ) // Aufbereiten der Dokumentartenliste: if ( @length( liste_dokuarten ) > 0 ) { ergebnis = api_function( "string_replace", liste_dokuarten, " ", "" ) liste_dokuarten = api_converted_string ergebnis = api_function( "string_split", liste_dokuarten, "," ) if ( ergebnis > 0 ) { for j = 1 while j <= ergebnis step 1 { dokuarten = dokuarten ## "'" ## api_splitted_string[ j ] ## "', " } dokuarten = dokuarten( 1, @length(dokuarten) -1 ) } call dmglog( 5, "Dokuarten " ## dokuarten ) } call dmglog( 4, "*******************" ) for i = 1 while i <= anzahl step 1 { call dmglog( 4, i ## ": Alter Wert: " ## spalte_aw[ i ] ## " | Neuer Wert: " ## spalte_nw[ i ] ) call dmglog( 4, i ## ": Suche zu ändernde Dokumente ...") dbms alias doku_id dbms sql select doku_id from firmen_spezifisch \ where kue_dokuart in ( :dokuarten ) \ and dok_dat_feld_:zu_aenderndes_ddf = :+spalte_aw[ i ] anzahl2 = @dmrowcount dbms alias call dmglog( 4, i ## ": Es wurden " ## anzahl2 ## " zu ändernde Dokumente gefunden.") call dmglog( 4, i ## ": ******************************************" ) for j = 1 while j <= anzahl2 step 1 { k = 1 call dmglog( 4, i ## ": bearbeite DokuID " ## doku_id[ j ] ## " ...") if ( debug == 0 ) { ergebnis = api_function( "attribute_update_single", zu_aenderndes_ddf, spalte_nw[ i ], "", doku_id[ j ], "Master" ) } else { call dmglog( 3, i ## " / " ## j ## ": hier findet jetzt keine Dokumentänderung statt. \:-(") ergebnis = 0 } if ( ergebnis == 0 ) { call dmglog( 4, i ## " / " ## j ## ": DokuID " ## doku_id[ j ] ## " erfolgreich aktualisiert." ) } else { call dmglog( 2, i ## " / " ## j ## ": Fehler " ## ergebnis ## " beim Setzen des Attributes (attribute_update_single) bei DokuID " ## doku_id[ j ] ) kaputt = 1 } call dmglog( 4, i ## ": ==========================================" ) } //call dmglog( 5, "kaputt: " ## kaputt ) if ( debug == 0 ) { if ( k == 1 ) { if ( kaputt == 0 ) { dbms sql update :db_tabelle set :spalte_status = 'fertig' where :spalte_alter_wert = :+spalte_aw[ i ] and :spalte_neuer_wert = :+spalte_nw[ i ] } else { dbms sql update :db_tabelle set :spalte_status = 'Problem' where :spalte_alter_wert = :+spalte_aw[ i ] and :spalte_neuer_wert = :+spalte_nw[ i ] } } else { dbms sql update :db_tabelle set :spalte_status = 'keine Treffer' where :spalte_alter_wert = :+spalte_aw[ i ] and :spalte_neuer_wert = :+spalte_nw[ i ] } } kaputt = 0 k = 0 call dmglog( 4, "*********************************************" ) } call dmglog( 4, "Bearbeitung abgeschlossen, DMG_gesch_id_wechsel.jpl beendet sich ..." ) call dmglog( 4, "*********************************************" ) proc dmglog( loglevel, message ) { vars l_logdirect = "BEIDE" vars l_logdatei = "D\:\\d3\\apps\\log.txt" vars l_loglevel = 5 vars zeitstempel, loglevel_lang, d3loglevel, logmessage if ( loglevel == 5 ) { loglevel_lang = "DEBUG" // Da die d.3 Server i.d.R. nicht im Debug-Modus laufen, erscheinen DEBUG-Meldungen nicht im Log. d3loglevel = 9 } if ( loglevel == 4 ) { loglevel_lang = "INFO." d3loglevel = 6 } if ( loglevel == 3 ) { loglevel_lang = "WARN." d3loglevel = 6 } if ( loglevel == 2 ) { loglevel_lang = "ERROR" d3loglevel = 0 } if ( loglevel == 1 ) { loglevel_lang = "FATAL" d3loglevel = 0 } if ( loglevel <= l_loglevel ) { if ( ( l_logdirect == "DATEI" ) || ( l_logdirect == "BEIDE" ) ) { // Ausgabe in Datei zeitstempel = sm_sdtime( "n%4y.%0m.%0d %0h\:%0M\:%0s" ) logmessage = zeitstempel ## " " ## loglevel_lang ## " " ## message call api_function( "file_add_line", l_logdatei, logmessage, "APPEND" ) } if ( ( l_logdirect == "D3LOG" ) || ( l_logdirect == "BEIDE" ) ) { // Ausgabe im d.3 Log logmessage = loglevel_lang ## " " ## message call api_log( d3loglevel, logmessage ) } } }