- Mitglied seit
- 15. Mai 2008
- Beiträge
- 21.900
- Punkte für Reaktionen
- 14
- Punkte
- 0
hi leutz,
ich habe mal was dazu geschrieben, wie man Outlook dazu bewegen kann, seine Termine mit einer MySQL-Datenbank auf der DS zu synchronisieren.
Voraussetzung dafür ist, dass man sich auf dem/den PCs einen Apache-Server mit PHP installiert (am besten XAMPP), damit das Skript auf dem lokalen PC auf Outlook zugreifen kann.
Die MySQL Datenbank auf der DS habe ich outlook genannt. Die Tabelle termin:
Damit nun auch vom PC auf die MySQL-Datenbank der DS zugegriffen werden kann, muss man mit dem phpmyadmin die Rechte für den Zugriff freischalten. Sowas muss dann ungefähr dabei herauskommen:
wobei man natürlich auch einen anderen Datenbankbenutzer als 'root' verwenden kann und auch sollte.
Auf dem PC muss man einen neuen Ordner im Kalender erstellen (siehe Bild in der Anlage). Die Idee dabei ist es, dass man einen gemeinsamen Kalender gemeinsam auf der Datenbank hat und zusätzlich auch noch seinen privaten haben kann. Das muss nicht so sein; ich hab das aber mal so angenommen, dass das sinnvoll ist.
Wie man Termine in Outlook anlegt, muss schon jeder selbst herausbekommen. Für die Datenbank werden zur Zeit die folgenden Felder übernommen: Subject, Start, End, Location, Categories und Body. Außerdem wird ein Outlook-Feld missbraucht: Mileage (Feld ist gedacht für die Aufnahme der Entfernung zum Ort des Termins - ich denke, dass das kaum einer bislang benutzt hat). Hier speichere ich den Datenbank-Primärschlüssel ab, weil die ID der Termin-Records in Outlook nicht so ohne weiteres zwischen verschiedenen Outlook-Versionen ausgetauscht werden können.
Das Konnektor-Skript hat momentan zwei Funktionen:
(1) Abgleich eines Outlook-Kalender-Ordners namens 'DiskStation' mit der Datenbank:
- wenn ein Termin in Outlook ist, der noch keinen Inhalt im Feld 'Mileage' hat, wird der Termin in der Datenbank neu angelegt und der Schlüssel in das Feld eingespeichert
- wenn ein Termin bereits in der Datenbank ist, wird nachgeschaut, ob die Felder im Outlook-Termin sich gegenüber den Feldern in der Datenbank geändert haben, wenn ja, wird der Termin in der Datenbank geändert
- ein Outlook-Termin, der in dem Kategorie-Feld den Inhalt 'unvalid' hat, wird in die Datenbank übernommen, und löscht beim Zurück-Synochronisieren den Outlook-Termin. Mit anderen Worten, alle gelöschten Termine stehen auch weiterhin in der Datenbank, werden aber im Laufe der Zeit aus den Outlook-Kalendern entfernt.
(2) Abgleich der Datenbank mit einen Outlook-Kalender-Ordner namens 'DiskStation':
- wenn ein Termin in der Datenbank ist (z.B. durch einen anderen Outlook-Kalenderabgleich hineingeschrieben wurde), dann wird der Termin in Outlook neu angelegt.
- wenn ein Termin in der Datenbank ist mit der Kategorie 'unvalid', dann wird der Termin in Outlook gelöscht
- wenn ein Termin in der Datenbank und in Outlook vorhanden sind, wird geprüft, ob sich der Datenbank-Termin geändert hatte, wenn ja wird er auch in Outlook geändert.
Die Synchronisations-Logik hat noch kleine Probleme mit der gleichzeitigen Änderung gleicher Termine, weil sie keine Auswahl anbietet, wer bei einer gleichzeitigen Änderung gewinnt - das werde ich irgendwann man einbauen. Das ist auch kein triviales Problem, weil nicht immer die Regel gelten muss: "last change wins".
Wie gesagt, dass PHP-Skript muss auf dem PC / den PCs laufen, steht also erst einmal im Verzeichnis htdocs. Die Datei einfach dorthin kopieren und entsprechend umbenennen. In dem Skript muss dann noch in der Zeile 5 die IP-Adresse eingetragen werden und eventuell der Benutzer geändert werden.
Wichtig: Man muss Outlook geschlossen haben, sonst gibts Fehlermeldungen, weil das Skript eine Outlook-Task im Hintergrund aufmacht und zweimal das gleiche Programm auf die gleiche Datei .pst-Datei, geht halt nicht.
Viel Spaß damit und vielleicht schreibt ja jemand noch ein PHP-Skript, um die Termine auf der DS anzuschauen und/oder zu ändern usw.
itari
ich habe mal was dazu geschrieben, wie man Outlook dazu bewegen kann, seine Termine mit einer MySQL-Datenbank auf der DS zu synchronisieren.
Voraussetzung dafür ist, dass man sich auf dem/den PCs einen Apache-Server mit PHP installiert (am besten XAMPP), damit das Skript auf dem lokalen PC auf Outlook zugreifen kann.
Die MySQL Datenbank auf der DS habe ich outlook genannt. Die Tabelle termin:
Rich (BBCode):
CREATE TABLE IF NOT EXISTS `termin` (
`Termin_ID` int(11) NOT NULL auto_increment,
`Subject` varchar(255) collate latin1_general_ci default NULL,
`Location` varchar(255) collate latin1_general_ci default NULL,
`Start` varchar(19) collate latin1_general_ci default NULL,
`End` varchar(19) collate latin1_general_ci default NULL,
`MD5` varchar(32) collate latin1_general_ci default NULL,
`Sensitivity` varchar(1) collate latin1_general_ci default NULL,
`Categories` varchar(255) collate latin1_general_ci default NULL,
`Body` varchar(3200) collate latin1_general_ci default NULL,
PRIMARY KEY (`Termin_ID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=1 ;
Damit nun auch vom PC auf die MySQL-Datenbank der DS zugegriffen werden kann, muss man mit dem phpmyadmin die Rechte für den Zugriff freischalten. Sowas muss dann ungefähr dabei herauskommen:
Rich (BBCode):
grant select, insert, update, delete on 'outlook'.'termin' to 'root'@'%' ....
wobei man natürlich auch einen anderen Datenbankbenutzer als 'root' verwenden kann und auch sollte.
Auf dem PC muss man einen neuen Ordner im Kalender erstellen (siehe Bild in der Anlage). Die Idee dabei ist es, dass man einen gemeinsamen Kalender gemeinsam auf der Datenbank hat und zusätzlich auch noch seinen privaten haben kann. Das muss nicht so sein; ich hab das aber mal so angenommen, dass das sinnvoll ist.
Wie man Termine in Outlook anlegt, muss schon jeder selbst herausbekommen. Für die Datenbank werden zur Zeit die folgenden Felder übernommen: Subject, Start, End, Location, Categories und Body. Außerdem wird ein Outlook-Feld missbraucht: Mileage (Feld ist gedacht für die Aufnahme der Entfernung zum Ort des Termins - ich denke, dass das kaum einer bislang benutzt hat). Hier speichere ich den Datenbank-Primärschlüssel ab, weil die ID der Termin-Records in Outlook nicht so ohne weiteres zwischen verschiedenen Outlook-Versionen ausgetauscht werden können.
Das Konnektor-Skript hat momentan zwei Funktionen:
(1) Abgleich eines Outlook-Kalender-Ordners namens 'DiskStation' mit der Datenbank:
- wenn ein Termin in Outlook ist, der noch keinen Inhalt im Feld 'Mileage' hat, wird der Termin in der Datenbank neu angelegt und der Schlüssel in das Feld eingespeichert
- wenn ein Termin bereits in der Datenbank ist, wird nachgeschaut, ob die Felder im Outlook-Termin sich gegenüber den Feldern in der Datenbank geändert haben, wenn ja, wird der Termin in der Datenbank geändert
- ein Outlook-Termin, der in dem Kategorie-Feld den Inhalt 'unvalid' hat, wird in die Datenbank übernommen, und löscht beim Zurück-Synochronisieren den Outlook-Termin. Mit anderen Worten, alle gelöschten Termine stehen auch weiterhin in der Datenbank, werden aber im Laufe der Zeit aus den Outlook-Kalendern entfernt.
(2) Abgleich der Datenbank mit einen Outlook-Kalender-Ordner namens 'DiskStation':
- wenn ein Termin in der Datenbank ist (z.B. durch einen anderen Outlook-Kalenderabgleich hineingeschrieben wurde), dann wird der Termin in Outlook neu angelegt.
- wenn ein Termin in der Datenbank ist mit der Kategorie 'unvalid', dann wird der Termin in Outlook gelöscht
- wenn ein Termin in der Datenbank und in Outlook vorhanden sind, wird geprüft, ob sich der Datenbank-Termin geändert hatte, wenn ja wird er auch in Outlook geändert.
Die Synchronisations-Logik hat noch kleine Probleme mit der gleichzeitigen Änderung gleicher Termine, weil sie keine Auswahl anbietet, wer bei einer gleichzeitigen Änderung gewinnt - das werde ich irgendwann man einbauen. Das ist auch kein triviales Problem, weil nicht immer die Regel gelten muss: "last change wins".
Wie gesagt, dass PHP-Skript muss auf dem PC / den PCs laufen, steht also erst einmal im Verzeichnis htdocs. Die Datei einfach dorthin kopieren und entsprechend umbenennen. In dem Skript muss dann noch in der Zeile 5 die IP-Adresse eingetragen werden und eventuell der Benutzer geändert werden.
Wichtig: Man muss Outlook geschlossen haben, sonst gibts Fehlermeldungen, weil das Skript eine Outlook-Task im Hintergrund aufmacht und zweimal das gleiche Programm auf die gleiche Datei .pst-Datei, geht halt nicht.
Viel Spaß damit und vielleicht schreibt ja jemand noch ein PHP-Skript, um die Termine auf der DS anzuschauen und/oder zu ändern usw.
itari