Quantcast
Channel: Andreas Witt » Content Management
Viewing all articles
Browse latest Browse all 10

Kundendaten (konvertieren und) in webEdition importieren

0
0

Bei der Umsetzung von größeren Websites, Online-Shops, Portalen etc. gehört die Datenmigration von einem System (zu Beispiel das abzulösende Content Management System (Kurz: CMS)) zu einem anderen System (das neue bessere CMS, z.B. webEdition ) zu den eher unbeliebten Aufgaben. Oft bereiten die sehr stark unterschiedliche Datenstruktur, die Datenkodierung (Zeichensatz), die Datenmenge etc. große Probleme -  besonders wenn der Abgleich nicht nur einmal sondern regelmäßig stattfinden soll.

Daneben ist es schwierig dem Kunden, den durch die Datenmigration entstandenen Aufwand zu erklären. Oft höre ich Sätze wie: “Die Daten müssen doch nur von der einen Datenbank in die andere, dass kann doch nicht problematisch sein!” Doch kann es schon!

An einem Beispiel möchte ich kurz erläutern, wie Kundendaten aus Typo3 exportiert und in die webEdition Kundenverwaltung importiert werden können. Und welche projektspezifischen Datenkonvertierungen den Aufwand beeinflussen.

1. Quelldaten (CSV-Export) aus Typo3 analysieren

Als erstes sollte man sich so früh wie möglich vom Kunden einen Datenexport liefern lassen. Dies hat den Vorteil, dass eventuell nicht berücksichtige Herausforderungen frühzeitig erkannt und noch Einfluss auf die neue Datenstruktur im Zielsystem Einfluss genommen werden kann.

Das nachfolgende Beispiel zeigt die Feldbezeichnungen aus dem Typo3 CSV-Export.

"uid";"pid";"tstamp";"username";"password";"usergroup";"disable";"starttime";"endtime";"name";"address";"telephone";"fax";"email";"crdate";"cruser_id";"lockToDomain";"deleted";"uc";"title";"zip";"city";"country";"www";"company";"image";"TSconfig";"module_sys_dmail_category";"module_sys_dmail_html";"fe_cruser_id";"lastlogin";"is_online";"tx_user_firstname"

Oben sehen Sie die erste Zeile aus einer CSV-Datei, welche die Datenstruktur der Daten widerspiegelt. Diese erscheint zunächst sehr unproblematisch und lässt sich problemlos mit der webEdition Kundenverwaltung abbilden. Analysieren wir nun die Feldinhalte genauer, stellen wir fest, dass in den Feldern “name” (für Nachname) und “tx_user_firstname” (für Vorname) nicht nur die jeweiligen Namen, sondern auch Titel (wie z.B. Dr., Prof. etc.) enthalten sind. Außerdem enthält das Feld “country” die Angaben für die Länderinformationen in unterschiedlichen Formaten, z.B. für Deutschland gibt es die Angaben “Deutschland”, “deutschland” und “D”.

2. Datenstruktur in der webEdition Kundenverwaltung (Zielsystem)

Die Quelldaten aus dem Typo3-System sollen in die webEdition Kundenverwaltung importiert werden. Hierbei ändert sich jedoch auch die Datenstruktur, weil zukünftig Rechnungs- und Lieferadresse getrennt erfasst werden. Dies gilt auch für Namenstitel, we z.B. Dr., Prof. und Prof. Dr. Die Datenstruktur könnte in der webEdition Kundenverwaltung wie folgt aussehen:

Feldgruppe: Allgemein (vom CMS webEdition vorgegeben)

  • Username
  • Password
  • Forename
  • Surname
  • LoginDenied (Zugang gesperrt)
  • MemberSince
  • LastLogin
  • LastAccess
  • AutoLoginDenied
  • AutoLogin (Auto-Login erwünscht)

Feldgruppe: Rechnung (individuell erstellt)

  • Titel
  • Vorname
  • Nachname
  • StrasseNr
  • PLZ
  • Ort
  • Land
  • etc.

Feldgruppe: Lieferung (individuell erstellt)

  • Titel
  • Vorname
  • Nachname
  • StrasseNr
  • PLZ
  • Ort
  • Land
  • etc.

3. Quelldaten für den Import (via CSV oder XML) in webEdition vorbereiten

Nachdem nun die Analyse der Quelldaten und die Strukturierung des Zielsystems abgeschlossen sind, können wir die Daten für den Import vorbereiten. Dabei kann für den Import in webEdition das Dateiformat eine CSV- oder eine XML-Datei sein. Im vorliegenden Beispiel haben wir uns für die “schlankere” CSV-Variante entschieden. Beim Import der Quelldaten müssen wir (für unser Beispiel) folgende Punkte beachten:

  1. Namenstitel werden nun in einem separaten Feld erfasst
  2. Länderinformationen werden in webEdition als ISO-Codes (z.B. DE für Deutschland) gespeichert
  3. Die zukünftige Webseite wird mehrsprachig sein, so dass jedem Kundendatensatz eine Sprache zugewiesen werden muss, um nach dem Login die richtige Sprache anzuzeigen

Die Datenaufbereitung geschieht automatisiert anhand eines Skriptes, welches wir als webEdition Template direkt im CMS webEdition anlegen. Dabei lesen wir zunächst die Quelldaten aus der CSV-Datei in ein PHP-Array ($sourceArray) ein und konvertieren die Daten für Punkt 1. und 2. (siehe nachfolgendes Codebeispiel):

$row = (int) 0;
$listOfCountryCodes = Zend_Locale::getTranslationList('territory', 'de'); //Liste aller Laender und den dazugehoerigen ISO-Codes
$sourceArray = array();
$handle = fopen ("csvTypo3SourceCustomerExport.txt","r"); // Quelldatei zum Lesen oeffnen
while ( ($data = fgetcsv ($handle, 2000, ";")) !== FALSE ) { // Daten werden aus der Datei
    $sourceArray[$row]["memberSince"] .= (string) $data[14];
    $sourceArray[$row]["lastLogin"] .= (string) $data[30];
    $sourceArray[$row]["loginDenied"] .= (string) $data[16];
    $sourceArray[$row]["username"] .= (string) $data[3];
    $sourceArray[$row]["password"] .= (string) $data[4];
    $sourceArray[$row]["salutation"] .= (string) $data[53];
    //ist im Feld Vorname ($data[32]) oder Nachname ($data[9]) ein "." enthalten, gehen wir von einem Namenstitel aus, der in ein separates Feld ("title") extrahiert wird
    if(strpos($data[9], ".")!==FALSE){
        $sourceArray[$row]["title"] .= (string) trim(substr($data[9],0,(strpos($data[9],".")+1)));
        $sourceArray[$row]["forename"] .= (string) $data[32];
        $sourceArray[$row]["surname"] .= (string) trim(substr($data[9],(strpos($data[9],".")+1), strlen($data[9])));
    }elseif(strpos($data[32], ".")!==FALSE){
        $sourceArray[$row]["title"] .= (string) trim(substr($data[32],0,(strpos($data[32],".")+1)));
        $sourceArray[$row]["forename"] .= (string)trim(substr($data[32],(strpos($data[32],".")+1), strlen($data[32])));
        $sourceArray[$row]["surname"] .= (string) $data[9];
    }else{
        $sourceArray[$row]["title"] .= "";
        $sourceArray[$row]["forename"] .= (string) $data[32];
        $sourceArray[$row]["surname"] .= (string) $data[9];
    }
    $sourceArray[$row]["street"] .= (string) $data[10];
    $sourceArray[$row]["zip"] .= (string) $data[20];
    $sourceArray[$row]["city"] .= (string) $data[21];
    //Länderinformationen aus dem Quelldaten in ISO-Codes konvertieren
    $sourceArray[$row]["country"] .= (string) array_search($data[22],$listOfCountryCodes);
    $sourceArray[$row]["telephone"] .= (string) $data[11];
    $sourceArray[$row]["email"] .= (string) $data[13];
    $sourceArray[$row]["company"] .= (string) $data[24];
       $row ++;
}
fclose ($handle)

Ein Vorteil von webEdition, den wir uns an dieser Stelle zu Nutze machen, ist das integrierte Zend Framework. Dadurch können wir die in den Quelldaten enthalten deutschsprachig ausgeschriebenen Länderinformationen ganz einfach in ISO-Codes konvertieren.
Als nächstes erzeugen wir dann die später zu importierende CSV-Datei anhand des folgenden Codebeispiels:

$handle = fopen ("weImportTargetCustomer.csv","w+");

//Feldstruktur des CSV-Datei in die erste Zeile schreiben
fputs($handle,'"Username";"Password";"Forename";"Surname";"LoginDenied";"MemberSince";"LastLogin";"LastAccess";"AutoLoginDenied";"AutoLogin";"Gruppe";"Sprache";"Rechnung_Anrede";"Rechnung_Titel";"Rechnung_Vorname";"Rechnung_Nachname";"Rechnung_StrasseNr";"Rechnung_PLZ";"Rechnung_Ort";"Rechnung_Land";"Rechnung_EMail";"Rechnung_Telefon";"Rechnung_Firma";'."\n");

foreach($sourceArray as $keyP => $valueC){
    fputs($handle,'"'.$valueC['username'].'";"'.$valueC['password'].'";"'.$valueC['forename'].'";"'.$valueC['surname'].'";"'.$valueC['loginDenied'].'";"'.$valueC['memberSince'].'";"'.$valueC['lastLogin'].'";"0";"0";"0";"Kunde";"de";"'.$valueC['salutation'].'";"'.$valueC['title'].'";"'.$valueC['forename'].'";"'.$valueC['surname'].'";"'.$valueC['street'].'";"'.$valueC['zip'].'";"'.$valueC['city'].'";"'.$valueC['country'].'";"'.$valueC['email'].'";"'.$valueC['telephone'].'";"'.$valueC['company'].'";'."\n");
}  
fclose ($handle);

Jetzt setzen wir noch für jeden Kundendatensatz als Sprache Deutsch (“de”), da die bisherigen Webseite nur auf Deutsch angeboten wurde und weise als Kundengruppe “Kunde” zu, da bisher nicht mit Kundengruppen gearbeitet wurde.

Kleiner Tipp: die Feldbezeichnung in der CSV-Datei sollte genauso, wie in der webEdition Kundenverwaltung heißen. Dadurch erfolgt eine automatische Feldzuordnung beim Importvorgang (siehe Abbildung 1)

4. Kundendaten in die webEdition Kundenverwaltung importieren

Als letztes importieren wir die Kundendaten in die webEdition Kundenverwaltung. Nach dem Login in das CMS, öffnen wir die Kundenverwaltung und rufen das Menü Kunden > Import auf. Der Wizard leitet uns durch den Import-Vorgang, bei dem wir zunächst zwischen dem CSV- oder XML-Import wählen und anschließen die Quelldaten (z.B. weImportTargetCustomer.csv) vom Server oder der lokalen Festplatte laden.

Anschließend weißen wir noch das Dateiformat, und den Textbegrenzer zu und erhalten folgende Auflistung:

Kundendaten in die webEdition Kundenverwaltung importieren

Abbildung 1: Kundendaten in die webEdition Kundenverwaltung importieren

Abhängig von der Größe der Quelldaten, kann der Importvorgang einige Zeit in Anspruch nehmen. Es kann eventuell sinnvoll sein, sehr umfangreiche Daten in mehreren Schritten zu importieren. Beim Import legen wir zudem fest, wie mit identischen Datensätzen verfahren werden soll. Beim Erstimport empfiehlt sich hier Umbenennen. Beim wiederholten Import kann die Einstellung Überschreiben oder Überspringen sinnvoll sein.


Viewing all articles
Browse latest Browse all 10

Latest Images

Trending Articles





Latest Images