2010-12-01 9 views
7

Ich kann das Kreischen meiner Benutzer nicht mehr ignorieren. Sie wollen ein Aufgabenplanungssystem und irgendwann muss ich liefern. Ich dachte daran, mein eigenes zu machen (kann nicht schwer sein), aber dann hätten die Benutzer zwei nebeneinander liegende Task-Management-Systeme, da sie Outlook bereits für dasselbe verwenden.Techniken für die Integration einer ASP.NET Intranet App mit dem Outlook-Kalender

In Bezug auf der Outlook-Kalender/Aufgabenintegration, zwei mögliche Ansätze fielen mich ein:

1) zu verwenden JavaScript und Automation

Ich scheinen es ist möglich, mich daran zu erinnern Automatisierung in JavaScript zu tun.

PROS:

  • ich vor Automatisierung gemacht habe.

CONTRA:

  • Automation ist schrecklich!
  • Einige Persistenz (Outlook Einheiten) liegt in der Verantwortung von clientseitigen Code, und der Rest der Verantwortung der serverseitigen Code. Das fühlt sich schrecklich an.
  • Mögliche Sicherheitsbedenken/
    Blockierung von IT-Abteilung.

2) Verwenden Sie einige .NET-API mit Exchange Server direkt auf

Das Intranet verwendet Single-Sign zu interagieren, so hoffnungsvoll, dass sollten Sicherheitsprobleme leichter machen.

PROS:

  • Alle Persistenz Code serverseitige wäre.

CONTRA:

  • ich nicht einmal wissen, dass eine solche API existiert.

Wie immer möchte ich auf den Schultern von Riesen stehen. Kann mir jemand, der diesen Weg vorher beschritten hat, eine Anleitung geben?

+0

ich mit JavaScript Automation bin Erraten Sie bedeuten JScript (Windows Scripting Host) und OLE? Wenn dies der Fall ist, funktioniert dies wahrscheinlich nicht in einem Browser und erfordert, dass Outlook auf den Computern installiert wird, damit OLE verfügbar ist. –

+0

Ich erinnere mich noch, dass ich vor vielen Jahren JavaScript bekommen konnte, um die grundlegende Automatisierung von (glaube ich) Word zu machen. Ja, Outlook müsste auf dem Computer installiert werden, aber es ist der Computer des Benutzers, also wäre es. – David

Antwort

7

Wir haben kürzlich die gleiche Art von Integration für unsere Intranet-Anwendung mit der Exchange Web Services Managed API gemacht. Das wäre ein Weg für die zweite Option. Ich habe es noch nie mit JavaScript versucht, also keine Ahnung.

In Bezug auf die Abfrage für Kommentar 1: Sie benötigen einen einzelnen AD-Benutzer, den Sie verwenden werden, um zu imitieren und an dem anderen Benutzerkonto zu arbeiten.Bitte beachten Sie die folgende Beispiel:

Können sagen, ich habe ein Active Directory-Konto namens fabrikam\myappname mit Passwort [email protected]

void CreateFolder(string targetUserEmail) { 
    string appName = "myappname"; 
    string appPassword = "[email protected]"; 
    string emailDomain = "fabrikam"; 
    string appEmail = string.Format("{0}@{1}.com", appName, emailDomain); 

    ExchangeService service = new ExchangeService(); 
    service.Credentials = new NetworkCredential(appName, appPassword, emailDomain); 
    service.AutodiscoverUrl(appEmail); 

    service.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, targetUserEmail); 

    Folder newFolder = new Folder(service); 
    newFolder.DisplayName = "TestFolder1"; 

    newFolder.Save(WellKnownFolderName.Inbox); 
} 

Configuring Exchange Impersonation den Artikel überprüfen Sie Identitätswechsel arbeiten zu machen.

Hoffe, dass hilft.

+0

Das sieht perfekt aus. Wenn es dir nichts ausmacht, dass ich dich weiter pumpe, was muss ich über Joe Bloggs wissen, bevor ich anfangen kann, die API zu verwenden, um Dinge zu seinem Kalender hinzuzufügen? Benötige ich sein Active Directory Passwort (das wäre natürlich sehr problematisch). Wird mir die API als Entwickler auch erlauben, Kalenderinformationen für jeden zu sehen? Oder kann ich (oder die IT-Leute) Zugriffsebenen konfigurieren? Ich denke nur, wie schwer es wäre, Firmenbosse zu überzeugen, dass ich dieses Tool brauche, wenn es auch bedeutet, dass ich ihre Kalender und E-Mails lesen kann. – David

+0

@David: Meine Antwort basierend auf Ihrem Kommentar aktualisiert. –

+0

Danke CC, das ist sehr hilfreich. – David

0

Wenn Sie aus irgendeinem Grund den Identitätswechsel nicht aktivieren möchten (da er global ist), können Sie auch jeden Benutzer seinen Kalender mit Ihrem Profil teilen, auf dem die App ausgeführt wird (appName in CodeCanvas 'Beispiel). Sobald sie geben Ihre die entsprechende Berechtigung (Lesen/Schreiben/Editieren) Sie Termine zu ihren Kalender wie so hinzufügen:

myappointment = new Appointment(service); 
myappointment.Subject = "subject"; 
myappointment.Body = "body"; 
myappointment.Start = myStartTime; 
myappointment.End = myStartTime.AddHours(1); 
myMailbox = new Mailbox("[email protected]"); 
myFolder = new FolderId(WellKnownFolderName.Calendar, myMailbox); 
myappointment.Save(myFolder, SendInvitationsMode.SendToNone); 
/* get the appointment id so your app can access it later to update or delete */ 
myexchangeid = myappointment.Id.UniqueId;