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

Outlook VSTO - DAST query returning condition is not valid

我正在尝试在共享日历上搜索约会。第一步是我使用自定义 属性 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 值是否正确。我也试过如下使用 Jet 查询,但它也不起作用:

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

我在这里错过了什么?

看起来您在代码中的搜索字符串有误:

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 如果 属性 将作为自定义字段添加到项目而不是文件夹。默认值为真。

您可能会发现 Filtering Items Using Query Keywords 文章有帮助。

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

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

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