在Outlook C#VSTO中,如何在给定EntryId等的情况下获得对appointmentItem的引用

时间:2015-12-29 17:46:36

标签: c# calendar outlook vsto

我有一个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,什么是正确的代码来直接引用约会项目系列(无需搜索所有内容并过滤&#34;客户端&#34 ;

这可以在outlook vsto中使用吗?

2 个答案:

答案 0 :(得分:2)

如果您希望MailItem获取项目(FolderItemAppoinmentItemEntryID,...),则需要使用GetItemFromID(), method返回由指定条目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方法1}}创建一个具有不同EntryID的新约会项目,并删除原始文件。

答案 1 :(得分:-1)

您想使用NameSpace对象的GetItemFromID方法(直观地说,这可以通过Application.Session属性访问)

您需要从中检索项目的MAPI商店的商店ID。