2016-03-21 78 views
2

我必须将我的数据库pkid保存到outlook。我用UserProperties["TaskId"]。我试图通过这个ID来寻找项目,下面的代码是不工作UserProperties的Outlook项目搜索

tasksFolder.Items.Find(string.Format("[TaskId] = '{0}'", id)) 

反正有没有找到我的项目,而不是循环在我所有的名单! 有没有更好的方法来保存Outlook上的数据库ID,EntryID是只读的。

+0

对此有何更新? –

+0

感谢您的询问,我保存用户自定义属性文件夹和它工作正常,异常发生只有第一次:) –

回答

1

您可以利用在后台工作的AdvancedSearch

正是你可以开始使用Application.AdvancedSearch异步搜索任务(见documentation here

string scope参数实际上是在其中进行搜索执行Outlook文件夹。我想你可能会使用默认的任务文件夹(请参阅olDefaultFolder

对于您的情况,您将不得不使用CustomField创建查询。这里是语法(未测试)。这个奇怪的0x0000001f实际上是CustomProperties内部ID,see

"http://schemas.microsoft.com/mapi/string/{00020329-0000-0000-C000-000000000046}/TaskId/0x0000001f = 'yourid'" 

注意与AdvancedSearch你有背景,而不是冻结UI线程来执行搜索任务的好处。我建议你使用一个ID来标识你的搜索,这样你就不会搞乱并发搜索或取消。

+0

感谢您的答复和有用的细节,我感谢你的努力,如果你可以,我有另一个问题帮我,ns.GetItemFromID抛出异常,如果该项目不存在,你知道无论如何,以避免这种情况,我用尝试和空捕获,但我讨厌这种方式来处理错误 –

+0

@mokhAkh考虑try/catch,我不喜欢它但似乎没有其他选择。我还在Outlook VSTO产品中使用了这样一段代码 –

+0

感谢您的回答,它使我找到了一个可行的解决方案。 如果你正在寻找一个完整的工作过滤器,这里是我的:'var filter = $“@ SQL = \”http://schemas.microsoft.com/mapi/string/{{00020329-0000-0000-C000- 000000000046}}/MyUserProperty/0000001f \“='{value}'”;' – Yaurthek