2010-12-01 14 views
7

私のユーザーの悩みをもう無視することはできません。彼らはタスクスケジューリングシステムを望んでおり、ある時点で私は提供しなければなりません。私は自分自身を作ることを考えていましたが、難しいことはありませんが、ユーザーは同じことをOutlookを既に使用しているので、2つのサイドバイサイドのタスク管理システムがあります。見通しカレンダー/タスクの統合の面ではASP.NETイントラネットアプリケーションをOutlookカレンダーと統合するためのテクニック

、2の可能なアプローチは私に発生しました:

1)JavaScriptを使用してオートメーション

私はそれをJavaScriptで自動化を行うことが可能です覚えているようです。

PROS:

  • 私は前に自動化を行ってきました。

CONS:

  • オートメーションは恐ろしいです!
  • 一部の永続性(Outlook エンティティ)は クライアント側コードの責任であり、残りはサーバー側 コードの 責任です。これは恐ろしい感じです。
  • セキュリティ上の懸念があります/
    IT部門からのブロック。

2)Exchange Serverと対話するために、いくつかの.NET APIを使用して直接

イントラネットは、シングルサインオンを使用していますので、うまくいけば、セキュリティ上の問題を簡単にするべきです。

PROS:

  • すべての永続コードが サーバー側になります。

CONS:

  • 私も、このようなAPI が存在することを知りません。

これまでのように、私は巨人の肩に立つのが好きです。前にこの道を踏んだ人は、私に何か指導を与えることができますか?

+0

JScript(Windowsスクリプトホスト)もしそうなら、それはおそらくブラウザーでは機能せず、OLEが利用できるようにコンピューターにOutlookをインストールする必要があります。 –

+0

私は何年も前に、(私は)Wordの基本的な自動化を行うためのJavaScriptを取得できたことを思い出してください。はい、Outlookはコンピュータにインストールする必要がありますが、それはユーザーのコンピュータだからです。 – David

答えて

7

私たちは最近、Exchange Web Services Managed APIを使用してイントラネットアプリケーションと同じ種類の統合を行っています。それは第二の選択肢のために行くつもりです。私はJavaScriptを使って同じことを試みたことがないので、それについては考えません。

コメント1のクエリに関して、他のユーザーアカウントで偽装して作業するために使用する単一のADユーザーが必要です。以下の例を参照してください:

は、私は偽装が動作するために記事Configuring Exchange Impersonationをご確認くださいパスワード[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); 
} 

fabrikam\myappnameという名前のアクティブディレクトリのアカウントを持っているとしましょう。

希望に役立ちます。

+0

これは完璧に見えます。私の気持ちがさらに気にならない場合は、Joe Bloggsについて知る必要があります。その前にAPIを使用してカレンダーにアイテムを追加することはできますか?彼のActive Directoryのパスワードが必要ですか(これは明らかに問題が多いでしょう)。また、APIを使用すると、誰のためにカレンダー情報を見ることができますか?または私(またはIT担当者)がアクセスのレベルを構成することはできますか?私はちょうど私がカレンダーと電子メールを読むことができることを意味する場合、私はこのツールが必要な会社のボスを説得することがどれほど難しいと思っています。 – David

+0

@David:あなたのコメントに基づいて私の答えを更新しました。 –

+0

CCありがとう、それは非常に有用です。 – David

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; 
関連する問題