2010-12-01 39 views
7

Je ne peux plus ignorer le braiement de mes utilisateurs. Ils veulent un système de planification des tâches et à un moment donné je dois livrer. Je pensais faire mon propre (ne peut pas être dur), mais alors les utilisateurs auraient deux systèmes de gestion de tâches côte à côte, car ils utilisent déjà Outlook pour la même chose.Techniques d'intégration d'une application intranet ASP.NET avec le calendrier Outlook

En termes d'intégration calendrier/tâches Outlook, deux approches possibles me vint:

1) Utiliser JavaScript et automatisation

me semble me rappeler qu'il est possible de faire l'automatisation en JavaScript.

PROS:

  • Je l'ai fait avant l'automatisation.

CONS:

  • Automation est horrible!
  • une certaine persistance (entités Perspectives ) est la responsabilité du Code côté client, et le reste de la responsabilité du côté serveur de code . C'est horrible.
  • Problèmes de sécurité possibles/
    Blocage du service informatique

2) Utilisez une API .NET pour interagir avec Exchange Server directement

L'intranet utilise l'authentification unique, donc nous espérons que devrait faire des questions de sécurité plus facile.

PROS:

  • Tout le code de persistance serait côté serveur.

CONS:

  • Je ne sais même pas qu'une telle API existe.

Comme toujours, j'aime me tenir sur les épaules des géants. Quelqu'un qui a déjà foulé ce chemin peut-il me guider?

+0

Je devine avec JavaScript Automation vous dire JScript (Windows Scripting Host) et OLE? Si c'est le cas, cela ne fonctionnera probablement pas dans un navigateur et nécessite l'installation d'Outlook sur les ordinateurs afin que OLE soit disponible. –

+0

Je me souviens juste qu'il y a plusieurs années, j'ai pu obtenir JavaScript pour faire de l'automatisation de base de (je pense) Word. Oui, Outlook devrait être installé sur l'ordinateur, mais c'est l'ordinateur de l'utilisateur, ce serait donc le cas. – David

Répondre

7

Nous avons récemment fait le même type d'intégration pour notre application intranet en utilisant le Exchange Web Services Managed API. Ce serait une façon de faire pour la deuxième option. Je n'ai jamais essayé la même chose en utilisant JavaScript, donc aucune idée à ce sujet.

En ce qui concerne la requête pour le commentaire 1: Vous auriez besoin d'un seul utilisateur AD que vous utiliserez pour usurper l'identité et travailler sur le compte des autres utilisateurs.S'il vous plaît se référer à l'exemple ci-dessous:

Disons que j'ai un compte actif Dir nommé fabrikam\myappname avec mot de passe [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); 
} 

Ne cochez l'article Configuring Exchange Impersonation pour rendre le travail Impersonation.

Espérons que cela aide.

+0

Cela semble parfait. Si cela ne vous dérange pas de vous pousser plus loin, que dois-je savoir sur Joe Bloggs avant que je puisse commencer à utiliser l'API pour ajouter des choses à son calendrier? Ai-je besoin de son mot de passe Active Directory (cela serait évidemment très problématique). Aussi, l'API me permettra-t-elle, en tant que développeur, de voir les informations de calendrier pour n'importe qui? Ou puis-je (ou les informaticiens) configurer des «niveaux» d'accès? Je pense simplement à quel point ce serait difficile de persuader les chefs d'entreprise que j'ai besoin de cet outil si cela signifie aussi que je peux lire leurs calendriers et leurs courriels. – David

+0

@David: Mise à jour de ma réponse en fonction de votre commentaire. –

+0

Merci CC, c'est extrêmement utile. – David

0

Si, pour une raison quelconque, vous ne voulez pas activer l'emprunt d'identité (car il est global), vous pouvez également demander à chaque utilisateur de partager son calendrier avec votre profil qui exécute l'application (appName dans l'exemple de CodeCanvas). Une fois qu'ils donnent à votre l'autorisation appropriée (lecture/écriture/modifier) ​​vous pouvez ajouter des rendez-vous à leur calendrier comme ceci:

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;