Outlook AdvancedSearch DASL с использованием С#

Я делаю предварительный поиск в Outlook, используя офисную надстройку С# (VSTO)

Отфильтровать запрос DASL — urn:schemas:httpmail:datereceived > 'dd.M.yy HH:mm' — Возврат элементов на моем компьютере. Но это не работает в некоторых других машинах. Формат даты и времени на моей машине: дд-мм-гг.

Filter urn:schemas:httpmail:datereceived > 'dd/MM/yyyy HH:mm' - Не возвращать элементы на моем компьютере и работать на каком-то другом компьютере.

Существует ли какой-либо универсальный формат для фильтрации для работы на всех машинах (средах).


person Aishwarya    schedule 03.01.2018    source источник


Ответы (1)


Я думаю, ваша проблема в том, что вы передаете формат вручную. Из этого сообщения. (выделено мной)

Формат, используемый Outlook, соответствует шаблону General (короткая дата и короткое время) в классе DateTimeFormatInfo. Если вы используете метод Parse структуры DateTime, вы должны быть уверены, что аргумент метода Parse соответствует краткому формату даты и времени для текущей локали. Если вы используете конструктор для структуры DateTime, вам необходимо указать аргументы года, месяца, дня, часа, минуты и секунды, а затем использовать метод ToString со спецификатором формата "g" для преобразования значения даты и времени. в короткую строку даты и времени, ожидаемую Outlook. Аргумент спецификатора даты для метода ToString чувствителен к регистру, поэтому обязательно используйте «g» в качестве спецификатора формата. Когда вы используете конструктор DateTime и описатель формата "g" в методе ToString, вы создаете литерал даты и времени, который будет правильно интерпретироваться Outlook.

Я бы создал фильтры, как в ссылке, создав объект DateTime, а затем преобразовав его в строку, используя параметр "g". Из документации:

string searchCriteria = String.Format("\"urn:schemas:httpmail:datereceived\" >= '{0}'", new DateTime(2005, 6, 12, 15, 30, 0).ToString("g"))

Таким образом, вы можете быть уверены, что дата будет правильно отформатирована в соответствии с культурой системы, в которой выполняется запрос.

Примечание. Помните, что регистр чувствителен к регистру, поэтому вы должны использовать "g", а не "G".

person Dzyann    schedule 03.01.2018
comment
В AdvanceSearch мы не можем использовать формат запроса JET, он выдаст ошибку. Мы должны использовать формат запроса DASL. Это строковый фильтр = [LastModificationTime] ‹ ' + new DateTime(2005, 6, 12, 15, 30, 0).ToString(g) + '; JET-формат. - person Aishwarya; 04.01.2018
comment
@Aishwarya, извините за формат, я обновил пример, вы пробовали что-то вроде кода, который я обновил? - person Dzyann; 04.01.2018