大家早上好!我花了很多时间搜索和阅读论坛,但我似乎无法找到解决方案。非常感谢您提供的任何帮助。
我已经通过C#和Visual Studio 2013创建了一个Outlook加载项。此加载项将创建许多自定义任务,这些任务正常运行。我遇到的问题是搜索那些自定义创建的任务并删除它们。我有基于严格主题行搜索的代码,但没有使用“LIKE”来查找部分搜索匹配。我还读过find方法无法搜索正文,因此高级搜索更好。我正在尝试使用我能找到的高级搜索文档,但我不确定任务的“范围”参数是什么,或者即使这是最佳解决方案。
我认为最好的方法是附加所有自定义创建的任务,并在页面上添加“DO NOT DELETE”并输出文本,我可以搜索以确定任务是由我的加载项创建的,然后将其删除。我还考虑过在创建时存储自定义任务的EntryID,但是已经读过这个数字可以改变,所以我不确定这将是总是查找和删除自定义创建任务的最佳方法。
我希望你们中的一个能够协助搜索用户任务文件夹的代码示例,以查找任务正文中包含字符串的所有任务。或者,我绝对可以搜索包含主题行中的字符串的所有任务。我正在把头发拉出来,我很欣赏你们所能提供的任何指导,文章或代码示例!我要么在VB中找到例子,要么在部分解释中我无法付诸实践。
编辑:已解决
感谢以下回复标记为答案,我想在此处提供更多代码详细信息,以防将来有人需要更详细的答案。此解决方案不会搜索此帖子标题中所述的正文,因为该解决方案不是实现我所需要的最佳方式。
创建任务
using Outlook = Microsoft.Office.Interop.Outlook;
Outlook.Application app = new Outlook.Application();
Outlook.TaskItem task = app.CreateItem(Outlook.OlItemType.olTaskItem) as Outlook.TaskItem;
Outlook.UserProperties taskUserProperties = null;
Outlook.UserProperty taskUserProperty = null;
try {
taskUserProperties = task.UserProperties;
taskUserProperty = taskUserProperties.Add("Custom Property Name", Outlook.OlUserPropertyType.olText, true, 1);
taskUserProperty.Value = "Custom value";
task.Save();
}
catch (Exception ex) {
MessageBox.Show(ex.Message);
}
finally {
if (taskUserProperty != null) Marshal.ReleaseComObject(taskUserProperty);
if (taskUserProperties != null) Marshal.ReleaseComObject(taskUserProperties);
}
找到它
string searchCriteria = "[Custom Property Name] = 'VALUE TO FIND'";
Outlook.Application app = new Outlook.Application();
Outlook._NameSpace ns = app.GetNamespace("MAPI");
Outlook.MAPIFolder folder = ns.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderTasks);
Outlook._TaskItem taskItem = null;
Outlook.Items folderItems = null;
object resultItem = null;
try {
folderItems = folder.Items;
folderItems.IncludeRecurrences = true;
if (folderItems.Count > 0) {
resultItem = folderItems.Find(searchCriteria);
if (resultItem != null) {
if (resultItem is Outlook._TaskItem) {
taskItem = resultItem as Outlook._TaskItem;
MessageBox.Show(taskItem.Subject, "Task found!", MessageBoxButtons.OK);
}
}
Marshal.ReleaseComObject(resultItem);
}
}
catch (Exception ex) {
MessageBox.Show(ex.Message);
}
finally {
if (folderItems != null) Marshal.ReleaseComObject(folderItems);
}
答案 0 :(得分:0)
为什么不使用用户属性(TaksItem.UserPropertiers.Add)? 如果将用户字段添加到文件夹字段,则可以使用Items.Find / FindNext / Restrict搜索该属性。