C# VSTO Outlook,尝试获取通过对话 ID 进行搜索的查询,但无论我输入什么,要么出错,要么没有给出结果

问题描述 投票:0回答:1

我希望能够从我的加载项中的功能区进行搜索,但是当我根据对话 ID 构建查询并尝试运行高级搜索时,我每次都会遇到相同的异常:

System.Runtime.InteropServices.COMException:“操作失败。”

代码如下所示:

private async void inSearchId_TextChanged(object sender, RibbonControlEventArgs e)
{
var searchText = (sender as RibbonEditBox).Text;
if (searchText.Length < 5) return; // No point searching until theres a decent query to search against

var conversationLinks = await GetConversationsBySearch(searchText);

var filter = BuildFilterFromConversationIds(conversationLinks);

Search search = _app.AdvancedSearch("inbox", filter, true, "CustomQuery");
search.Results.Sort("[ReceivedTime]", OlSortOrder.olDescending);
}

BuildFilterFromConversationIds 的返回值为

@SQL="http://schemas.microsoft.com/mapi/proptag/0x3013001E" = '22E6722D04D84704B28B060C1CA5AB92'

或者在另一个迭代中:

@SQL="urn:schemas:httpmail:conversationid" = '22E6722D04D84704B28B060C1CA5AB92'

两者都会引发上述错误。

我可以通过以下查询让它工作(作为测试):

urn:schemas:httpmail:subject LIKE '%Test%'

我看过很多地方,但我看不出我错过了什么。按对话 ID 搜索的查询应该是什么样子?为什么它会抛出异常?

c# outlook-addin office-addins
1个回答
0
投票

PR_CONVERSATION_ID
属性是
0x30130102
(请注意,类型是
PT_BINARY
=
0x0102
),而不是
0x3013001E
(类型是
PT_STRING8
=
0x001E
)。

但是 OOM 不允许您搜索二进制 (

PT_BINARY
) 属性。如果使用 Redemption 是一个选项(我是它的作者),它确实允许二进制搜索。从我的头顶上掉下来:

Redemption.RDOSession session = new Redemption.RDOSession();
session.MAPIOBJECT = _app.Session.MAPIOBJECT;
var inbox = session.GetDefaultFolder(OlDefaultFolders.olFolderInbox);
var items = inbox.Items.Restrict(" ""http://schemas.microsoft.com/mapi/proptag/0x30130102"" = '22E6722D04D84704B28B060C1CA5AB92'");
© www.soinside.com 2019 - 2024. All rights reserved.