我目前无法在此处显示任何代码,因为我仍在分析是否有可能实现这一目标。
在我们公司中,我们有一个虚拟系统来制作和管理请假申请。我现在应该检查是否可以在申请人的Outlook日历中输入批准的假期。
我需要一个中央解决方案,该解决方案可以远程访问日历并输入约会。我们目前使用Mircosoft Exchange 2019和Office 365的内部解决方案。
在研究期间,我遇到了EWS,但似乎Exchange 2019不再支持它。我是否可以使用其他解决方案?基本上,我想用C#实现一个解决方案,但我也可以实现Powershell或Java解决方案。但是大多数时候我都没有找到真正的解决方案。
大多数情况下,示例始终在计算机上本地使用,或者使用诸如2013年的旧版Exchange Server。我还没有找到2019年的可靠信息。我希望这里有人可以帮助我或给我提示。或者说这是否可能也是有帮助的。
最诚挚的问候!
我目前正在研究解决方案。成功后,我将发布代码!**
Exchange 2019完全支持EWS。
即使Microsoft不向其添加任何新功能,EWS仍然是访问Exchange的首选API。
在客户端,您可以使用Outlook对象模型及其Namespace.GetSharedDefaultFolder
方法。一旦有了MAPIFolder
对象的实例,就可以使用MAPIFolder.Items.Add
创建新约会。
我确实选择了一些不同的方法,但是我能够使其完全起作用。现在,我可以创建事件,并在需要时将其删除。
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;
}
}
}
}
}