Методы интеграции приложения интрасети 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;