7

我不能再忽视我的用户的尖叫了。他们想要一个任务调度系统,在某些时候我必须交付。我正在考虑自己制作(不会很难),但是用户将拥有两个并排的任务管理系统,因为他们已经将 Outlook 用于同一件事。

在 Outlook 日历/任务集成方面,我想到了两种可能的方法:

1) 使用 JavaScript 和自动化

我似乎记得在 JavaScript 中可以实现自动化。

优点:

  • 我以前做过自动化。

缺点:

  • 自动化太可怕了!
  • 一些持久性(Outlook 实体)由客户端代码负责,其余由服务器端代码负责。这感觉很可怕。
  • 可能的安全问题/
    来自 IT 部门的阻止。

2) 使用一些 .NET API 直接与 Exchange Server 交互

Intranet 使用单点登录,因此希望这会使安全问题变得更容易。

优点:

  • 所有持久性代码都将是服务器端的。

缺点:

  • 我什至不知道存在这样的 API。

一如既往,我喜欢站在巨人的肩膀上。之前走过这条路的任何人都可以给我一些指导吗?

4

2 回答 2

7

我们最近使用Exchange Web Services Managed API对我们的 Intranet 应用程序进行了相同类型的集成。这将是第二种选择的一种方式。我从未尝试过使用 JavaScript 进行相同的操作,所以对此一无所知。

关于评论 1 的查询:您需要一个 AD 用户,您将使用该用户来模拟和处理其他用户帐户。请参考以下示例:

假设我有一个fabrikam\myappname以密码命名的 Active Dir 帐户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 回答