gpt4 book ai didi

c# - 从 Outlook 中检索单个项目的最有效方法是什么(互操作)

转载 作者:太空狗 更新时间:2023-10-30 01:07:57 25 4
gpt4 key购买 nike

我需要创建一个程序,将它自己的任务对象同步到 Outlook 中的任务。在操作过程中,outlook 中的任务可能会被创建/更新/删除。

最直接的方法是遍历 outlook 中的所有任务项,查找要更新的任务项。非常粗略:

ApplicationClass _app;
NameSpace _nameSpace;
MAPIFolder _folder;

_app = new ApplicationClass();
_nameSpace = _app.GetNamespace("MAPI");
_folder = _nameSpace.GetDefaultFolder(OlDefaultFolders.olFolderTasks);

Dictionary<int,MyTask> data = GetData();

for (int i = 1; i <= _folder.Items.Count; i++)
{
TaskItem taskItem = (TaskItem)_folder.Items.Item(i);
int itemID;
if(ItemNeedsProcessing(taskItem, out itemID))
UpdateItem(taskItem, data[itemID]);
}

但这可能会遍历数百个项目(取决于客户的 outlook 任务历史记录),只是为了进行一两个更改。

或者,我可以跟踪任务的 ItemID...

string itemID = "00000000873..."; //taken from property on object.
object o = _nameSpace.GetItemFromID(itemID); //ignore possible exceptions for now
TaskItem taskItem = (TaskItem)o;

...并直接更新它(这使应用程序端任务的创建/删除变得有些复杂)。

直接检索任务项 (GetItemFromID) 是最有效的方法吗?还是我遗漏了一些陷阱?

最佳答案

添加了 Outlook 2007+ Folder.GetTableFolder.Items 相比,它使用轻量级方法优化了检索.使用表格 can be up to 10x faster而不是 Items 迭代器。

至于检索实际项目,Session.GetItemFromID是检索项目的最快方法 - 特别是如果您传入 Store.StoreID作为次要参数,这样 Outlook 就不必确定特定 EntryID 属于哪个Store

const string PR_STORE_ENTRYID = "http://schemas.microsoft.com/mapi/proptag/0x0FFB0102";
Outlook.Table tasks = Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderTasks).GetTable();
tasks.Columns.Add(PR_STORE_ENTRYID); // optimal for GetItemFromID
while (!tasks.EndOfTable)
{
Outlook.Row task = tasks.GetNextRow();
Outlook.TaskItem item = Application.Session.GetItemFromID(task["EntryID"], task.BinaryToString(PR_STORE_ENTRYID)) as Outlook.TaskItem;
}

至于最佳方法 - 如果您想最大程度地减少同步执行时间,您应该跟踪应用程序中的 Task EntryIDTask StoreID。否则,检索所有任务的蛮力方法会奏效,但我建议使用 Folder.GetTable() 而不是使用 Folder.Items

关于c# - 从 Outlook 中检索单个项目的最有效方法是什么(互操作),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11015028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com