7

私はもはや私のユーザーのブレイディングを無視することができます。彼らはタスクスケジューリングシステムを望んでおり、ある時点で私が提供しなければなりません。私は自分で作成することを考えていましたが(難しいことではありません)、ユーザーはすでに同じ目的でOutlookを使用しているため、2つのタスク管理システムを並べて使用することになります。

Outlookのカレンダー/タスクの統合に関して、2つの可能なアプローチが私に起こりました。

1)JavaScriptと自動化を使用する

JavaScriptで自動化できることを覚えているようです。

長所:

  • 私は以前に自動化を行いました。

短所:

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

2)いくつかの.NET APIを使用して、ExchangeServerと直接対話します

イントラネットはシングルサインオンを使用するため、セキュリティの問題が容易になることを願っています。

長所:

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

短所:

  • そのようなAPIが存在することすら知りません。

相変わらず、私は巨人の肩の上に立つのが好きです。以前にこの道を踏みにじったことがある人は、私にいくつかのガイダンスを与えることができますか?

4

2 に答える 2

7

最近、 Exchange WebサービスマネージAPIを使用して、イントラネットアプリケーションに対して同じ種類の統合を行いました。これは、2番目のオプションを実行する1つの方法です。私はJavaScriptを使って同じことを試したことがないので、それについてはわかりません。

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

fabrikam\myappnameパスワードで名前が付けられたActiveDirアカウントを持っているとしましょうFabi$Gre@t2010

void CreateFolder(string targetUserEmail) {
    string appName = "myappname";
    string appPassword = "Fabi$Gre@t2010";
    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);
}

偽装を機能させるためのExchange偽装の構成の記事を確認してください。

お役に立てば幸いです。

于 2010-12-01T20:50:34.053 に答える
0

何らかの理由で(グローバルであるため)なりすましを有効にしたくない場合は、各ユーザーに、アプリを実行しているプロファイル(CodeCanvasのサンプルのappName)とカレンダーを共有させることもできます。彼らがあなたに適切な許可(読み取り/書き込み/編集)を与えたら、あなたは次のように彼らのカレンダーに予定を追加することができます:

myappointment = new Appointment(service);
myappointment.Subject = "subject";
myappointment.Body = "body";
myappointment.Start = myStartTime;
myappointment.End = myStartTime.AddHours(1);
myMailbox = new Mailbox("username@domain.com");
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;
于 2011-01-13T18:33:00.360 に答える