



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




