我需要创建一个程序,将它自己的任务对象同步到 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
) 是最有效的方法吗?还是我错过了一些陷阱?