Методы интеграции приложения интрасети ASP.NET с календарем Outlook

Я больше не могу игнорировать рев моих пользователей. Они хотят систему планирования задач, и в какой-то момент я должен выполнить. Я думал о создании собственного (не может быть сложным), но тогда пользователи будут иметь две системы управления задачами, так как они уже используют Outlook для одной и той же вещи.

С точки зрения интеграции календаря и задач в Outlook у меня возникли два возможных подхода:

1) Используйте JavaScript и автоматизацию

Кажется, я помню, что можно сделать автоматизацию в JavaScript.

ПЛЮСЫ:

  • Я делал автоматизацию раньше.

МИНУСЫ:

  • Автоматизация ужасна!
  • Некоторая персистенция (сущности Outlook) является ответственностью кода на стороне клиента, а остальная ответственность - кодом на стороне сервера. Это чувствует себя ужасно.
  • Возможные проблемы безопасности /
    блокировка от ИТ отдела

2) Использовать API.NET для взаимодействия с Exchange Server напрямую.

В интрасети используется единый вход, поэтому, надеюсь, это облегчит проблемы безопасности.

ПЛЮСЫ:

  • Весь постоянный код будет на стороне сервера.

МИНУСЫ:

  • Я даже не знаю, что такое API существует.

Как всегда, мне нравится стоять на плечах гигантов. Может ли кто-нибудь, кто прошел этот путь, дать мне какое-нибудь руководство?

2 ответа

Решение

Недавно мы выполнили аналогичную интеграцию для нашего приложения для внутренней сети, используя управляемый API-интерфейс веб-служб Exchange. Это был бы один из вариантов второго варианта. Я никогда не пробовал то же самое с помощью JavaScript, так что понятия не имею об этом.

Что касается запроса на комментарий 1: Вам понадобится один пользователь AD, которого вы будете использовать для олицетворения и работы с учетной записью других пользователей. Пожалуйста, обратитесь к примеру ниже:

Допустим, у меня есть аккаунт Active Dir с именем fabrikam\myappname с паролем 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, чтобы заставить Олицетворение работать.

Надеюсь, это поможет.

Если по какой-то причине вы не хотите включать олицетворение (поскольку оно глобально), вы также можете попросить каждого пользователя поделиться своим календарем с вашим профилем, на котором выполняется приложение (appName в примере CodeCanvas). Как только они дадут вам соответствующее разрешение (чтение / запись / редактирование), вы можете добавлять встречи в их календарь следующим образом:

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;
Другие вопросы по тегам