[使用C#和Exchange 2019在员工的Outlook日历中创建约会

问题描述 投票:0回答:2

我目前无法在此处显示任何代码,因为我仍在分析是否有可能实现这一目标。

在我们公司中,我们有一个虚拟系统来制作和管理请假申请。我现在应该检查是否可以在申请人的Outlook日历中输入批准的假期。

我需要一个中央解决方案,该解决方案可以远程访问日历并输入约会。我们目前使用Mircosoft Exchange 2019和Office 365的内部解决方案。

在研究期间,我遇到了EWS,但似乎Exchange 2019不再支持它。我是否可以使用其他解决方案?基本上,我想用C#实现一个解决方案,但我也可以实现Powershell或Java解决方案。但是大多数时候我都没有找到真正的解决方案。

大多数情况下,示例始终在计算机上本地使用,或者使用诸如2013年的旧版Exchange Server。我还没有找到2019年的可靠信息。我希望这里有人可以帮助我或给我提示。或者说这是否可能也是有帮助的。

最诚挚的问候!


我目前正在研究解决方案。成功后,我将发布代码!**

c# outlook calendar exchange-server exchangewebservices
2个回答
1
投票

Exchange 2019完全支持EWS。

即使Microsoft不向其添加任何新功能,EWS仍然是访问Exchange的首选API。

在客户端,您可以使用Outlook对象模型及其Namespace.GetSharedDefaultFolder方法。一旦有了MAPIFolder对象的实例,就可以使用MAPIFolder.Items.Add创建新约会。


0
投票

我确实选择了一些不同的方法,但是我能够使其完全起作用。现在,我可以创建事件,并在需要时将其删除。

    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;
                    }
                }
            }
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.