Files
d.velop/DMG Dental/Geschäftspartner-ID ändern/DMG_gesch_id_wechsel.jpl
2024-06-19 16:46:15 +02:00

292 lines
7.4 KiB
Plaintext

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