outlook-addin - Outlook VSTO - DAST 查询返回条件无效

我正在尝试在共享日历上搜索约会。第一步是我使用自定义属性 twMeetingId 将约会保存在共享日历中。这工作正常:

Outlook.AppointmentItem nurseAppointment = Globals.ThisAddIn.Application.GetNamespace("MAPI").GetSharedDefaultFolder(recepient, Outlook.OlDefaultFolders.olFolderCalendar).Items.Add();
nurseAppointment.UserProperties.Add("twMeetingId", Outlook.OlUserPropertyType.olText, false, 1);
nurseAppointment.UserProperties["twMeetingId"].Value = appointmentData.meetingId;
nurseAppointment.Save();

然后我试图根据自定义属性 twMeetingId 在同一个共享日历中查找任何约会

var filter = $"@SQL =\"http://schemas.microsoft.com/mapi/string/{{00020329-0000-0000-C000-000000000046}}/twMeetingId/0000001f\" = '{appointmentData.meetingId}'";
Outlook.Items items = Globals.ThisAddIn.Application.GetNamespace("MAPI").GetSharedDefaultFolder(recepient, Outlook.OlDefaultFolders.olFolderCalendar).Items.Restrict(filter);

此时我收到错误“条件无效”。我已经检查了过滤器中的 meetingId value 是否正确。我也尝试过如下使用 Jet 查询,但它也不起作用:

nurseAppointment = Globals.ThisAddIn.Application.GetNamespace("MAPI").GetSharedDefaultFolder(recepient, Outlook.OlDefaultFolders.olFolderCalendar).Items.Find(String.Format("[twMeetingId] = '{0}'", appointmentData.meetingId));

我在这里想念什么?

回答1

@SQL= 之间有一个错误的空格。以下条件对我来说没有错误:

@SQL="http://schemas.microsoft.com/mapi/string/{00020329-0000-0000-C000-000000000046}/twMeetingId/0000001f" = 'test'

还要确保 appointmentData.meetingId 不包含任何需要编码的字符。

回答2

看起来您的代码中有一个错误组合的搜索字符串:

var filter = $"@SQL=\"http://schemas.microsoft.com/mapi/string/{{00020329-0000-0000-C000-000000000046}}/twMeetingId\" = '{appointmentData.meetingId}'";

首先,如您所见,您需要在搜索字符串中使用一个花括号。

其次,您需要删除 DASL 属性名称末尾的属性类型。

如果您想使用没有 DASL 命名空间的属性名称,如下所示:

"[twMeetingId] = '{0}'"

您需要确保在调用 UserProperties.Add 方法时将该属性添加到文件夹字段中。如果属性将作为自定义字段添加到项目所在的文件夹中,则 AddToFolderFields 参数为 true。此字段可以显示在文件夹的视图中。 alse 如果属性将作为自定义字段添加到项目而不是文件夹。默认 value 为 True。

您可能会发现https://docs.microsoft.com/en-us/office/vba/outlook/How-to/Search-and-Filter/filtering-items-using-query-keywords一文很有帮助。

相似文章

随机推荐

最新文章