我有一个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中使用吗?
答案 0 :(得分:2)
如果您希望MailItem
获取项目(FolderItem
,AppoinmentItem
,EntryID
,...),则需要使用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。