Как выбрать все документы за последние 7 дней? - PullRequest
4 голосов
/ 16 февраля 2009

У меня есть формула выбора вида

SELECT @If( @Date(@Now) = @Date(@Created); @All; @False)  

и я хочу, чтобы он выбрал все документы за последние 7 дней, а не только за сегодняшний.

Ответы [ 4 ]

6 голосов
/ 30 июня 2009

Вам нужно 2 части. Формула выбора вида:

SELECT isnotyet7daysOld = @True

и агент (или два), которые работают по расписанию и в режиме «когда документы созданы или изменены». Агент выглядит так (оба)

minDate := @Adjust(@Today;0;0;-7;0;0;0);
REM "There are no future documents";
tmpResult := @if(minDate <= @Created;@False;@True);
SELECT tmpResult != isnotyet7daysOld;
FIELD isnotyet7daysOld := tmpResult

Для настройки вам нужно 0 не ноль; NULL работает, так как нет поля или переменной с именем NULL, а @Formula прощает и делает отсутствующее значение 0. Хитрость здесь : вы вычисляете значение, которое поле isnotyet7daysOld должно иметь для выбранных документов (которые будут изменены для агента onChange или всех для запланированного агента), а затем выбираете для изменения только те, где результат не совпадает. Таким образом, вы минимизируете обновления документов. Также сохраненные документы обновляются напрямую. Если вы теперь добавите скрытое поле «вычислено при составлении» isnotyet7daysOld с @True в качестве значения поля, вы надежно захватите весь свой документ. И вам нужно запускать запланированный агент только один раз за ночь (0:01).

5 голосов
/ 16 февраля 2009
SELECT @If( @Date(@Now) < @Date(@Adjust(@Created(), null, null, 7, null, null, null)); @All; @False)
2 голосов
/ 26 октября 2009

Вот что я сделал (я использовал @TextToTime("Today") вместо @Today, чтобы избежать перестройки индекса в соответствии с приведенным выше предупреждением):

SELECT (@Created) >= @Adjust(@TextToTime("Today");0;0;-7;0;0;0)   

Кстати, спасибо за подсказки. Я давно хотел создать такой вид. Я - системный программист z / OS (мэйнфрейм), и мне приходилось перестраивать это представление еженедельно, чтобы оно стало актуальным, так как формула «стандартного» представления не была относительной датой. Я воспользовался подсказкой @TextToTime из примера @Created в справке Notes (здесь был пример получения документов в текущем месяце). Мой клиент Notes - версия 6.5.

2 голосов
/ 16 февраля 2009

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

Если вы используете @Today или @Now, то Notes / Domino всегда будет считать, что все документы в представлении не содержат данных, и при каждом обращении к нему придется перестраивать индекс. Это будет хорошо для очень маленьких баз данных, но для больших - катастрофа.

Некоторые люди пытаются обойти это, используя формулу типа @date («Сегодня»). Notes / Domino не распознает это как формулу на основе даты / времени, так как она не содержит @Today или @Now и будет работать изначально. Но вы обнаружите, что представление не удалит старые документы, пока индекс не будет полностью обновлен, что может быть сложно организовать.

Лучший способ справиться с этим - запускать каждую ночь агент, который обновляет формулу выбора с правильными значениями фиксированной даты. Джейк Хоулетт на codestore.net имеет несколько отличных сообщений об этом.

...