Tine 2.0 „Leonie“ ist eine Open-Source–Groupware-Lösung, die auch ein CRM und ein ERP System integriert.
Wenn man sich nun dazu entschieden hat, Tine einzusetzen, steht man unweigerlich vor dem Problem, seine vorhandenen Adressen- und Kontaktdaten aus anderen Applikationen importieren zu müssen. Erschwerend ist weiterhin die Tatsache, daß (momentan) nur spärliche Dokumentation existiert, die sich mit diesem Problem beschäftigt.
In den letzten Tagen habe ich mich intensiv mit dem Import von Adressdaten in Tine beschäftigt, und verrate hier, wie ich diese Aufgabe gelöst habe.
Ausgangslage
Im Tine-Forum fand ich ein oder zwei Beiträge, die sich mit dem Import von Adressdaten befassten. Dadurch erfuhr ich, daß es eine CLI-Api gibt, die über die Datei tine20.php im Document-Root aufzurufen ist. Bis eine Import-Funktionalität in das Frontend implemtiert ist, ist diese CLI-Api die einzige Möglichkeit, Adressdaten zu importieren.
php tine20.php --username {username} --password {password} --method Addressbook.import {source-file} {import_export-definition}
{source-file} war in meinem Fall eine CSV-Datei, die schon auf das Field-Mapping in der Import-Definition „adb_tine_import_csv“ angepasst war. Dennoch funktionierte der Import nicht. Ein Blick in die Log-Datei brachte dann zutage, daß es zu mehreren Datenbankfehlern kam, die alle besagten, daß ein Fremdschlüssel fehlerhaft war.
Analyse
Bei der Fehlersuche wurde dann schnell klar, daß das Feld „Account Id“ in der Tabelle {table-prefix}addressbook zu den Fehlern führte. In der CSV-Datei wurde das Feld account_id durchweg als leerer String geführt. Das mochte die InnoDB-Engine anscheinend nicht.
In den nachfolgenden Versuchen fand ich heraus, daß es auch nicht funktioniert, wenn man das Feld account_id in der CSV-Datei leer und ohne Anführungszeichen lässt. Auch das komplette Entfernen des Feldes aus der CSV-Datei führte immer noch zu fehlern.
Doch dann hatte ich einen Geistesblitz: Vielleicht ginge es, wenn man das Feld account_id auch aus der import-export-definition entfernt.
Lösung
Gesagt, getan. Ich habe also im Ordner pfad-zur-tine-installation/Addressbook/Import/definitions
die Datei adb_tine_import_csv.xml
nach adb_tine_import_mod_csv.xml
kopiert und in der Sektion <mapping> den ersten <field>-Eintrag (für das Feld account_id) entfernt.
Nachdem ich dann herausfand, daß die CLI-Api die import_export-Definitionen aus der Datenbank (Tabelle {prefix}import_export_definitions) liest, wenn man keinen Dateinamen angibt, konnte ich mit folgendem Befehl die Adressdaten problemlos importieren:
php tine20.php --username {username} --password {password} --method Addressbook.import {source-file} /pfad-zu-tine/Addressbook/Import/definitions/adb_tine_import_mod_csv.xml
Tags: Import, Open Source, Tine