2010-12-01 93 views
7

我可以忽略不再使用我的用戶。他們需要一個任務調度系統,並且在某些時候我必須提供。我正在考慮自己創建自己的(不能太難),但是隨後用戶將擁有兩個並排的任務管理系統,因爲他們已經將Outlook用於相同的事情。用於將ASP.NET Intranet應用程序與Outlook日曆集成的技巧

在Outlook日曆/任務整合方面,兩種可能的方法發生在我身上:

1)使用JavaScript和自動化

我似乎記得這是可以做到自動化的JavaScript。

優點:

  • 我以前做的自動化。

缺點:

  • 自動化是太可怕了!
  • 一些持久性(Outlook 實體)是 客戶端代碼的責任,其餘 責任的服務器端代碼 。這感覺很糟糕。
  • 可能的安全問題/
    阻斷IT部門。

2)使用一些.NET API與Exchange服務器直接

的Intranet上使用單點登錄交互,所以希望,應該使安全問題變得更加容易。

優點:

  • 所有的持久性代碼將 服務器端。

缺點:

  • 我甚至不知道這樣的API 存在。

和往常一樣,我喜歡站在巨人的肩膀上。任何能踐踏這條道路的人都能給我一些指導嗎?

+0

我猜JavaScript與自動化您的意思是JScript(Windows Scripting Host)和OLE?如果是這樣,那麼在瀏覽器中可能不起作用,並且需要在計算機上安裝Outlook,以便OLE可用。 – 2010-12-01 20:54:30

+0

我只記得很多年前我能夠通過JavaScript來完成(我認爲)Word的基本自動化。是的,Outlook必須安裝在計算機上,但它是用戶的計算機,所以它會是。 – David 2010-12-01 22:16:18

回答

7

我們最近使用Exchange Web Services Managed API爲我們的Intranet應用程序進行了相同類型的集成。這將是第二種選擇的一種方式。我從來沒有嘗試過使用JavaScript,所以不知道這一點。

關於查詢評論1:您將需要一個AD用戶,您將使用它來模擬和處理其他用戶帳戶。請參考下面的例子:

可以說我有一個名爲fabrikam\myappname的Active迪爾帳戶密碼[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進行模擬工作。

希望有所幫助。

0

如果出於某種原因,您不想啓用模擬(因爲它是全局的),您也可以讓每個用戶與運行應用程序的配置文件(CodeCanvas示例中的appName)共享日曆。一旦他們給你適當的權限(讀/寫/編輯),你可以添加約會到他們的日曆,如下所示:

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; 
相關問題