Методы интеграции приложения интрасети ASP.NET с календарем Outlook - PullRequest
7 голосов
/ 01 декабря 2010

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

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

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

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

PROS:

  • Я раньше занимался автоматизацией.

CONS:

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

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

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

PROS:

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

CONS:

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

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

Ответы [ 2 ]

7 голосов
/ 01 декабря 2010

Недавно мы выполнили такую ​​же интеграцию для нашего приложения для внутренней сети, используя Управляемый 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 , чтобы олицетворение работало.

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

0 голосов
/ 13 января 2011

Если по какой-то причине вы не хотите включать олицетворение (поскольку оно глобально), вы также можете попросить каждого пользователя поделиться своим календарем с вашим профилем, на котором запущено приложение (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;
...