Outlook-Konnektor für Termine

Status
Für weitere Antworten geschlossen.

itari

Benutzer
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:
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
 

Anhänge

  • outlook1.jpg
    outlook1.jpg
    24,5 KB · Aufrufe: 525
  • outlook2.jpg
    outlook2.jpg
    15,6 KB · Aufrufe: 515
  • outlooksync.php.txt
    3,9 KB · Aufrufe: 32

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
So das mit der Synchronisations-Logik hab ich mal weiter getrieben und noch ein paar kleine Fehler beseitig :rolleyes:

Also bitte Version 4711.0001 benutzen, welche man hier im Anhang findet. Ich finde Versions-Nummer immer so spaßig, deshalb sind meine nie fortlaufend :D. Ich hab noch nie wirklich verstanden, warum man sie verwendet. Muss irgendwas technisches sein, diese Nummern, weil es ja auch Programme gibt, die sich ausgiebig damit beschäftigen (SCCS, RCS, CVS, VCS, SCM, Subversion ...) Spannend dagegen finde ich so hübsche Namen wie "Chicago", "Longhorn", "Vista", "Firmware 702 Beta" für Software-Stände, die noch nicht ganz fertig sind. :D

itari

PS. Ich habe die Datei umbenannt (auch im Skript) und die Kategorie zum Löschen heißt nun 'invalid' (ich weiß nicht wo vorhin mein Kopf war). Ansonsten ist alles gleich geblieben.
 

Anhänge

  • outlooksync_termine.php.txt
    4,3 KB · Aufrufe: 22
Zuletzt bearbeitet:

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Nun habe ich noch schnell mal ein Listen-PHP-Skript zu den Outlook-Terminen gemacht, mit dem man sich auf der DS (oder auch sonstwo) seine mit dem Outlook-Konnektor auf die DS geschriebenen Termine anschauen kann.

Das kleine Skript:

PHP:
<?php
$conn = @mysql_connect("IP-Adresse-der-DS oder Name oder localhost:3306","root");
mysql_select_db("outlook",$conn);
$recs = mysql_query("select * from termin order by Start");
?>
<html><head><title>Outlook-Termine</title>
<style>body,input,td{font:11px Arial}</style>
</head><body><table><tr style="background-color:#ccc"><td>Datum</td><td>Uhrzeit</td><td>Ort</td>
<td width="180">Kurztext</td><td width="180">Kategorie</td><td width="180"></td></tr>
<?php
$tmp="";
while ($rec = mysql_fetch_assoc($recs)) {
  print "<tr><td>"
        .(substr($rec['Start'],0,10)!=$tmp?substr($rec['Start'],0,10):'')."</td><td>".substr($rec['Start'],11,5)."-"
        .(substr($rec['End'],0,10)==substr($rec['Start'],0,10)?substr($rec['End'],11,5):substr($rec['End'],5,10))
        ."</td><td>{$rec['Location']}</td><td>{$rec['Subject']}</td>"
        ."<td>{$rec['Categories']}</td><td>{$rec['Body']}</td></tr>";
  $tmp=substr($rec['Start'],0,10);
  }
?>

Anbei zwei Screenshots von den Terminen. Einmal wie es unter Outlook 2007 aussieht und einmal wie es im Browser mit dem Skript aussieht. Wobei es im Moment ja nicht auf Schönheit ankommt, sondern dass man überhaupt per Browser an seine Termine herankommt.

itari
.
 

Anhänge

  • outlook3.jpg
    outlook3.jpg
    73,4 KB · Aufrufe: 491
  • outlook4.jpg
    outlook4.jpg
    29,9 KB · Aufrufe: 490

Trolli

Benutzer
Mitglied seit
12. Jul 2007
Beiträge
9.848
Punkte für Reaktionen
1
Punkte
0
Mannomann - Du kommst ja gut rum - München, Köln, Berlin, Hamburg in zwei Tagen... ;)
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Noch ein bisschen nachgebessert und um eine Editionsmöglichkeit erweitert. Dran denken, die outlooksync_termine.php muss auf dem PC installiert werden. Die beiden anderen können auf der DS ins Web-Verzeichnis. Muss man nicht unbedingt als 3rd-party-apps installieren, da sie keinen speziellen 'root' Zugriff brauchen.

Bei allen Dateien muss man die Zeile mit dem mysql_connect auf die jeweilige IP bzw. DNS-Namen ändern und auch den Benutzer anpassen. Bei mir steht da immer 'syno'.

Ich habe dem Datenbankfeld 'Sensitivity' den Standard-Wert 0 gegeben. Das bedeutet soviel wie, der Termin ist 'normal' wichtig. Könnte man also auch noch ändern ...

In der Listenansicht ist auch ein Button eingebaut, um neue Termine per Browser einzugeben. Das Löschen eines Termins geht weiterhin über die Kategorie 'invalid'. Ich habe ein Löschfunktion deswegen nicht eingebaut, weil man damit die Synchronisations-Logik mächtig durcheinander bringen kann; falls man wirklich Löschen muss, dann über PHPmyAdmin.

Ich denke, bis auf die Schönheit ist das hier dann fertig. Wer sich noch Kalenderansichten basteln möchte, bitte sehr. Aber man hat eigentlich alle Ansichten in Outlook ...

itari

.
 

Anhänge

  • outlook_termin.php.txt
    2,3 KB · Aufrufe: 20
  • outlook_termine.php.txt
    1,3 KB · Aufrufe: 17
  • outlooksync_termine.php.txt
    4,5 KB · Aufrufe: 17
  • outlook5.jpg
    outlook5.jpg
    36,1 KB · Aufrufe: 484

_TokTok_

Benutzer
Mitglied seit
18. Nov 2007
Beiträge
1.310
Punkte für Reaktionen
0
Punkte
0
Geniale Geschichte! Bin erst jetzt auf diesen Beitrag gestoßen.

Zur Marktreife fehlt allerdings noch eine Sache: Der Webserver auf dem PC muss weg! Das ist einfach für "normale" User zu viel. Was muss passieren um das auch ohne XAMPP realisieren zu können? Kann ein Skript auf der DS nicht auf das lokale Outlook zugreifen?
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Der Webserver der DS muss weg! So würde deine Aussage stimmen. :D

Leider geht es ohne Apache auf dem PC nicht, weil er ja mit Windows-Objekten spielen kann und darf und er muss ja mit einem im Hintergrund laufenden Outlook-Prozess kommunizieren.

Und mal wieder was für den Kopf ist auch dabei, weil ich ja von einem PC aus auf die MySQL-Datenbank der DS zugreife. Ich glaube, als reinen Datenbankserver hat bislang noch niemand die DS genutzt.

Ich schreib nix für normale User. Ist hier irgendwo ein normaler User. Hier sind doch nur Freaks :D Nee, Scherz beiseite, nen XAMPP laufen zu haben, ist genauso wenig oder viel wie Windows oder Vista laufen zu haben. Weder das eine noch das andere wird von einem normalen User wirklich verstanden.

Diese kleine Idee mit dem PHP-Outlook-Zugriff ist mir mal beim Durchlesen diverser Beiträge in MSDN vor ein paar Jahren aufgefallen und ich fand das so genial, dass man per PHP so ziemlich alles in Windows fernsteuern kann, dass ich das mal damit ausprobiert habe. Nachdem ich hier im Forum öfters mal gelesen hatte, dass jemand einen Web-Kalender haben wollte, dachte ich mir, ich schreibs mal hierein.

Nebenbei bemerkt, wenn ich das SharePoint-Gedönse anschaue, wie Microsoft seine Termine da mit Outlook abgleicht, ist mein kleines Skript fix und einfach. Aber SharePoint hat sich nu auch schon in die Ämter geschlichen. Naja irgendwann wird man dies auch ablösen werden ;)

itari
 

_TokTok_

Benutzer
Mitglied seit
18. Nov 2007
Beiträge
1.310
Punkte für Reaktionen
0
Punkte
0
Eigentlich hätte ich das nicht nur auf nem PC laufen lassen wollen, sondern auf nem smartphone mit windows mobile, evtl. über das Internet. Da jez auf nem smartphone nen apache laufen lassen....hmmm
Bei diesen Anforderungen kommt man wohl um Exchange nicht herum, und das ist es doch genau was mit solchen Lösungen vermieden werden soll. Egroupware scheint auf der DS leider auch nicht richtig zu funzen.

...Aber SharePoint hat sich nu auch schon in die Ämter geschlichen...

Hoffentlich schleicht sich MOSS noch ganz woanders ein, sonst werd ich arbeitslos und geh dem Forum hier noch mehr auf die Nerven :D
 

Trolli

Benutzer
Mitglied seit
12. Jul 2007
Beiträge
9.848
Punkte für Reaktionen
1
Punkte
0

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
iCal

Wer kennt einen in PHP geschriebenen iCal-Service, der es erlaubt, eine automatische Synchronisation mit dem Mozialla Calendar durchzuführen. Das Teil soll auf der DS laufen. Ich bin schon auf DAViCAL gestoßen, aber der benutzt Postgres; dass ist mir zuviel Aufwand, das umzustellen.

itari
 

QTip

Super-Moderator
Teammitglied
Mitglied seit
04. Sep 2008
Beiträge
2.341
Punkte für Reaktionen
14
Punkte
84

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Joa, danke QTip. Die Klassen hab ich nu auch schon ausprobiert gehabt. Da sind schon die wichtigsten Idee drin gelöst, wie man iCal-Formate parsed und erzeugt.

Immer noch verschlossen bleibt mir der Sinn von WebDAV in diesem Zusammenhang (mail würde ich sofort verstehen), weil WebDAV, so wie ich es verstehe, ja nur ein Datei-Ablage-Mechanismus ist. Ich hab mal eine iCAL-Page mit PHP-Seite generiert und mit Outlook draufzugegriffen. Das macht Outlook recht schön, aber ändern kannst nichts und integrieren in einen anderen Kalender geht auch nur mit cut&paste. Das ist zu händisch. Ich möchte schon einen Dienst, der in beide Richtungen synchronisieren kann. Das sehe ich im Moment mit WebDAV nicht - oder geht das doch?

Die Mozilla-Erläuterungen hab ich überflogen. Da seh ich nichts über das Protokoll, sondern nur was über die Struktur - oder?

itari
 

QTip

Super-Moderator
Teammitglied
Mitglied seit
04. Sep 2008
Beiträge
2.341
Punkte für Reaktionen
14
Punkte
84

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Ja das meinte ich auch vorhin. Das wird eine Datei geladen und eine Datei wieder hoch geschoben = zwei Dateien. Verarbeitet denn der WebDAV dann die Differenzen? Oder überlässt er das den Clients? Wie gesagt, ich kenn WebDAV-Server nicht. Ich hab im Moment keine Plan, wie man sowas machen könnte.

itari
 

QTip

Super-Moderator
Teammitglied
Mitglied seit
04. Sep 2008
Beiträge
2.341
Punkte für Reaktionen
14
Punkte
84
lt. dem Artikel stellt der WebDav mit dem Plugin nur die Funktionalität bereit.
Das Syncronisieren macht der Client, indem er seine statischen Kalenderdaten mit den Serverdaten abgleicht. Zieh dir mal Punkt
8.2.1.3 Synchronization Process rein. Da sind auch 2 Beispiele, allerdinngs in XML.

Ich hab doch von WebDav auch keine Ahnung, hab nur ein wenig gelesen, getestest natürlich noch nicht.
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat