Создайте встречи в календарях Outlook сотрудников, используя C# и Exchange 2019 - PullRequest
0 голосов
/ 27 апреля 2020

Я пока не могу показать здесь никакого кода, потому что я все еще анализирую, возможно ли это реализовать.

В нашей компании у нас есть виртуальная система для создания и управления оставленными приложениями. Теперь я должен проверить, можно ли ввести утвержденный отпуск в календаре Outlook кандидата.

Мне нужно централизованное решение, которое удаленно обращается к календарю и вводит назначения. В настоящее время мы используем локальное решение Mircosoft Exchange 2019 и Office 365.

Во время моего исследования я столкнулся с EWS, но, похоже, Exchange 2019 его больше не поддерживает. Есть ли другое решение, которое я мог бы использовать? По сути, я хотел бы реализовать решение с C#, но я бы также смог реализовать решение Powershell или Java. Но большую часть времени я не находил реального решения.

В большинстве случаев примеры всегда локальны на компьютерах или используют более старый Exchange Server, такой как 2013. Я не нашел надежной информации за 2019 год , Я надеюсь, что кто-то здесь может помочь мне или дать мне подсказку. Или было бы также полезно сказать, если это невозможно.

С наилучшими пожеланиями!


В настоящее время я работаю над решением. Я отправлю код, когда я буду успешным! **

Ответы [ 2 ]

1 голос
/ 28 апреля 2020

Exchange 2019 полностью поддерживает EWS.

EWS по-прежнему является предпочтительным API для доступа к Exchange, даже если Microsoft не добавляет к нему никаких новых функций.

На стороне клиента вы можете используйте объектную модель Outlook и ее методы Namespace.GetSharedDefaultFolder. Получив экземпляр объекта MAPIFolder, вы можете использовать MAPIFolder.Items.Add для создания новой встречи.

0 голосов
/ 29 апреля 2020

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

    public void UpdateCalender()
    {
        ExchangeService Service = new ExchangeService(ExchangeVersion.Exchange2013_SP1);
        Uri Url = new Uri("https://localmaildomain.sys/EWS/Exchange.asmx");
        Service.Url =  Url;
        Service.Credentials = new NetworkCredential("service_user","service_password");

        Folder inboxFolder = Folder.Bind(Service, new FolderId(WellKnownFolderName.Calendar, Temp.UserMail));

        foreach (var entry in Temp.Positions)
        {
            if (!entry.Storno)
            {
                try
                {
                    Appointment appointment = new Appointment(Service);
                    appointment.Subject = $"Urlaub/Vacation ({entry.Type})";
                    appointment.Body = $"{entry.Comment}";
                    appointment.IsAllDayEvent = true;
                    appointment.Start = entry.Date.AddSeconds(1);
                    appointment.End = entry.Date.AddSeconds(1);
                    appointment.LegacyFreeBusyStatus = LegacyFreeBusyStatus.OOF;
                    appointment.Save(inboxFolder.Id, SendInvitationsMode.SendToNone);
                }
                catch (Exception Ex)
                {
                    Console.WriteLine($"Calender item could not be created! Exception: {Ex.ToString()}");
                }
            }
            else
            {
                CalendarView view = new CalendarView(entry.Date, entry.Date);
                FindItemsResults<Appointment> results = Service.FindAppointments(inboxFolder.Id,view);

                foreach (var appointment in results)
                {
                    if (appointment.Subject == $"Urlaub/Vacation ({entry.Type})" && appointment.Start == entry.Date)
                    {
                        try
                        {
                            appointment.Delete(DeleteMode.MoveToDeletedItems);
                        }
                        catch(Exception Ex)
                        {
                            Console.WriteLine($"Calender item could not be deleted! Exception: {Ex.ToString()}");
                        }
                        break;
                    }
                }
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...