簡體   English   中英

使用 C# 和 Exchange 2019 在員工的 Outlook 日歷中創建約會

[英]Create appointments in Outlook calenders of employees using C# and Exchange 2019

我還不能在這里顯示任何代碼,因為我仍在分析是否有可能實現這一點。

在我們公司,我們有一個虛擬系統來制作和管理休假申請。 我現在應該檢查是否可以在申請人的 Outlook 日歷中輸入已批准的假期。

我需要一個遠程訪問日歷並輸入約會的中央解決方案。 我們目前使用 Mircosoft Exchange 2019 和 Office 365 的本地解決方案。

在我的研究過程中,我遇到了 EWS,但似乎 Exchange 2019 不再支持它。 有沒有可能我可以使用的另一種解決方案? 基本上我想用 C# 實現一個解決方案,但我也可以實現一個 Powershell 或 Java 解決方案。 但大多數時候我沒有找到真正的解決方案。

大多數情況下,這些示例總是在機器上本地或使用 2013 等較舊的 Exchange Server。我還沒有找到 2019 年的可靠信息。 我希望這里有人可以幫助我或給我一個提示。 或者,如果不可能的話,也很有幫助。

此致!


我目前正在研究解決方案。 成功后我會發布代碼!**

Exchange 2019 完全支持 EWS。

EWS 仍然是訪問 Exchange 的首選 API,即使 Microsoft 沒有為其添加任何新功能。

在客戶端,您可以使用 Outlook Object Model 及其Namespace.GetSharedDefaultFolder方法。 擁有MAPIFolder object 的實例后,您可以使用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;
                    }
                }
            }
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM