我需要创建一个程序,将自己的任务对象与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
)是最有效的方法吗?或者我是否忽略了一些陷阱?