none
Termin in Outlook "von Außen" erstellen?

    Frage

  • Hallo,

    ich würde gerne von einem SQL-Server aus Termine und Aufgaben in den firmeneigenen Outlook-Kalendern erstellen (also: in einer Tabelle finde ich neue Datensätze, in Abhängigkeit davon erstellt der SQL-Server-Agent über eine stored proc(?) im Kalender des verantwortlichen Mitarbeiters einen Termin/eine Aufgabe), finde aber gar keinen Ansatz, wie ich so etwas angehen könnte. Die SQL-Server-Seite bekomme ich hin (T-SQL, ServerAgent, Job,...), aber eine Schnittstelle finde ich nicht.

    Kann mir da jemand weiterhelfen?

    Vielen Dank im Voraus,

    Wolfgang

    Donnerstag, 21. Juni 2018 15:18

Antworten

  • Hallo Wolfgang,

    a) korrekt, so wäre der Ablauf.

    b) Man kann bspw. mittels SqlDependency in .NET auf Änderungen der Daten reagieren (auch wenn diese von einer anderen Anwendung wie bspw. dem SSMS durchgeführt werden). Da SqlDepedency aber einige Problemstellen (Speicher wird nicht immer sauber freigegeben, Events gelten nur für eine Benachrichtigung und müssen danach erneut registriert werden, Werte des Datensatzes sind nicht verfügbar, ...) schau dir evtl. auch mal SqlTableDependency an.

    c) xp_cmdshell wäre bei der obigen Variante nicht notwendig und sollte eh vermieden werden, wenn es irgendwie geht.

    Evtl. wäre das, was Du machen willst, über SSIS auch möglich. Da kenne ich mich aber zuwenig aus um das sagen zu können. Den Weg, aus EWS über ein SSIS Paket Termine zu lesen, findest Du bspw. hier:

      Reading Appointments from Exchange in SSIS

    Ob das nun auch für den umgekehrten Weg geht, müsstest Du mal probieren.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    • Als Antwort markiert AWombl Montag, 25. Juni 2018 15:34
    Montag, 25. Juni 2018 13:38
    Moderator

Alle Antworten

  • Hallo Wolfgang,

    direkt aus SQL heraus wird das wohl schwer bis unmöglich.

    Willst Du direkt in eine lokale Outlook Instanz schreiben oder über eine Exchange (EWS) API gehen?

    So oder so: Ich würde das nicht in SQL sondern in einer kleinen .NET Anwendung machen. Damit sollte das eigentlich problemlos gehen.

    https://msdn.microsoft.com/en-us/library/microsoft.office.interop.outlook.appointmentitem_methods.aspx

    https://msdn.microsoft.com/de-de/library/office/dn495623.aspx

    ...


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Freitag, 22. Juni 2018 13:19
    Moderator
  • Hallo, Stefan,

    zunächst vielen Dank für die Antwort. Da habe ich dann aber gleich noch ein paar Fragen dazu, da ich in .NET leider nicht fit bin:

    Diese Anwendung würde dann also auf die Datenbank zugreifen und aus der entsprechenden Tabelle die Kalendereinträge auslesen und sie dann mittels der verlinkten Methoden in die entsprechenden Kalender schreiben.

    Ich müsste sie dann regelmäßig nachschauen lassen, ob neue Einträge dazugekommen sind (und das relativ häufig, damit die Terminkalender halbwegs aktuell bleiben und man mit ihnen arbeiten kann). Oder gibt es eine Möglichkeit, so etwas wie eine Event-Steuerung zu basteln?

    Ich kann zwar vom SQL-Server aus über xp_cmdshell Programme starten, bezweifle aber, dass ich die Rechte dafür bekomme...

    Vielen Dank im Voraus,
    Wolfgang

    Montag, 25. Juni 2018 12:53
  • Hallo Wolfgang,

    a) korrekt, so wäre der Ablauf.

    b) Man kann bspw. mittels SqlDependency in .NET auf Änderungen der Daten reagieren (auch wenn diese von einer anderen Anwendung wie bspw. dem SSMS durchgeführt werden). Da SqlDepedency aber einige Problemstellen (Speicher wird nicht immer sauber freigegeben, Events gelten nur für eine Benachrichtigung und müssen danach erneut registriert werden, Werte des Datensatzes sind nicht verfügbar, ...) schau dir evtl. auch mal SqlTableDependency an.

    c) xp_cmdshell wäre bei der obigen Variante nicht notwendig und sollte eh vermieden werden, wenn es irgendwie geht.

    Evtl. wäre das, was Du machen willst, über SSIS auch möglich. Da kenne ich mich aber zuwenig aus um das sagen zu können. Den Weg, aus EWS über ein SSIS Paket Termine zu lesen, findest Du bspw. hier:

      Reading Appointments from Exchange in SSIS

    Ob das nun auch für den umgekehrten Weg geht, müsstest Du mal probieren.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    • Als Antwort markiert AWombl Montag, 25. Juni 2018 15:34
    Montag, 25. Juni 2018 13:38
    Moderator
  • Hallo Stefan,

    ich habe ein wenig mit meinem Admin gesprochen, der stellt die Anforderung, ein solches Programm als Dienst laufen zu lassen. Ich gehe davon aus, dass das für eine Anwendung wie die skizzierte möglich wäre. (eigentlich "?").

    Dann hört sich die SqlDependency wie ein gangbarer Weg an.

    Gruß

    Wolfgang

    Montag, 25. Juni 2018 14:52
  • Darf ich zu Deiner ursprünglichen Überlegung einen Kommentar aus Sicht des Users und des Datenschutzbeauftragten beisteuern? Ich halte es für sehr problematisch, einem User einen Termin direkt in den Kalender zu schreiben (es sei denn, der "User" ist keine Person aus Fleisch und Blut, sondern ein Konferenzraum-Account o.ä.). Ein User sollte eine Wahlmöglichkeit haben, ob er einen Termin annimmt. Das heißt, Du kannst ihm allenfalls eine Outlook-Einladung schicken, die er dann (per Klick oder wahlweise automatisch per Regel) annimmt.

    Nur meine 2 Cts ...

    Ute

    Donnerstag, 26. Juli 2018 09:01
  • Hallo, Ute,

    danke für Deinen Input.

    In diesem speziellen Fall erstellt der Mitarbeiter zusammen mit dem Kunden einen Auslieferungstermin im dafür vorgesehenen Programm und letztlich synchronisiert diese Aktion nur den (historisch gewachsenen und nur gegen immense Widerstände abschaffbaren und ggf. schwarz betriebenen Outlook-Kalender). Das Programm, in dem der Termin erstellt wird, ist das führende...

    Insofern: So wenig Klicks wie möglich ;)

    Gruß

    Wolfgang

    Freitag, 10. August 2018 11:22