我有一个Outlook VSTO插件,并且可以使用以下代码来检索日历约会的列表:

    private Items GetAppointmentsInRange(Folder folder, DateTime startTime, DateTime endTime)
    {
        string filter = "[Start] >= '"
                        + startTime.ToString("g")
                        + "' AND [End] <= '"
                        + endTime.ToString("g") + "'";
        Debug.WriteLine(filter);
        try
        {
            Items calItems = folder.Items;
            calItems.IncludeRecurrences = true;
            calItems.Sort("[Start]", Type.Missing);
            Items restrictItems = calItems.Restrict(filter);
            if (restrictItems.Count > 0)
            {
                return restrictItems;
            }
            else
            {
                return null;
            }
        }
        catch
        {
            return null;
        }
    }

我可以遍历此约会项,并获得entryId,我被告知是该系列的唯一标识符。

现在,我试图找出给定EntryId的正确代码是什么,以直接引用约会项目系列(而不必搜索所有内容并在“客户端”进行过滤)

在Outlook vsto中这可能吗?

最佳答案

如果要通过MailItem获取项目(FolderItemAppoinmentItemEntryID,...),则需要使用GetItemFromID(),此方法将返回由指定条目ID标识的Microsoft Outlook Item(如果有效)。

该函数在NameSpace对象中可用,您可以使用Application.Session属性或app.GetNamespace("MAPI")调用获取此功能:

var app = new Microsoft.Office.Interop.Outlook.Application();
...

var ns = app.Session; // or app.GetNamespace("MAPI");

var entryID = "<apppoinment entry id>";
var appoinment = ns.GetItemFromID(entryID) as AppointmentItem;

但是建议提供文件夹的ID:
var entryID = "<apppoinment entry id>";
var storeID = "<folder store id>";
var appoinment = ns.GetItemFromID(entryID, store) as AppointmentItem;

请注意,如果您将商品移至其他商店,则EntryID可能会更改。

此外,Microsoft建议解决方案不应依赖EntryID属性的唯一性,除非不会移动项目,例如,如果您使用Respond()olMeetingAccepted调用olMeetingTentative方法,则会创建一个具有不同EntryID的新约会项目,并删除原始项目。

关于c# - 在Outlook C#VSTO中,如何在给定EntryId等的情况下获取对约会项的引用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34516203/

10-09 22:20