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
不包含任何需要编码的字符。
我正在尝试在共享日历上搜索约会。第一步是我使用自定义 属性 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
不包含任何需要编码的字符。