Создание документов Lotus Notes с конкретными датами создания / изменения / последнего доступа для тестирования - PullRequest
1 голос
/ 26 мая 2010

В настоящее время я пишу приложение, которое перемещает документы Notes между базами данных на основе количества дней, прошедших с даты создания / изменения / последнего доступа. Я просто хотел бы получить идеи о простом и удобном способе создания документов с конкретными датами без необходимости изменять время на сервере Domino, чтобы я мог протестировать свое приложение.

Лучший способ, который я нашел до сих пор, - это создать локальную реплику и изменить системные часы на нужную мне дату. К сожалению, есть проблемы, связанные с этим методом. Он не работает в дату изменения - я не уверен, как он получает информацию о дате изменения, когда для местоположения установлено значение Остров (отключен) - и также изменяет даты изменения и последнего доступа, когда документы реплицируются на реплику сервера.

Кто-то предложил попытаться создать DXL документа, изменить дату и время в файле DXL, а затем импортировать его обратно в базу данных как документ Notes; но это не работает. Он просто берет дату и время, когда он был создан.

Может кто-нибудь предложить какие-либо другие предложения?

Ответы [ 3 ]

3 голосов
/ 05 июня 2010

Вы можете установить дату создания документа, установив UNID (который по сути представляет собой структуру меток времени, хотя фактическая реализация изменилась в последних версиях). Однако время доступа и изменения будет невозможно изменить из среды Notes / Domino, поскольку внесенные вами изменения будут перезаписаны процессом сохранения изменений. Если у вас есть склонность к приключениям и вам нужно бегать с ножницами, вы можете внести изменения в сам файл базы данных либо программно из внешнего приложения, либо вручную с помощью шестнадцатеричного редактора. (Редактирование двоичного файла будет работать - люди уже давно используют шестнадцатеричные редакторы для безопасного сброса флажка «скрыть дизайн». Имейте в виду, что подписанные документы будут сильно взрываться, и вам необходимо убедиться, что локальное шифрование для файл базы данных.)

2 голосов
/ 05 марта 2012

На самом деле существует очень простой способ подделать дату / время создания: просто добавьте поле с именем $ Created с любой желаемой датой / временем. Это упоминается в заголовочном файле API-интерфейса Notes C nsfdata.h:

Время / даты, связанные с заметками: OID.Note может быть датой времени, когда была создана заметка (но не гарантированно - ищите $ CREATED пункт первым для времени создания заметки) Получено NSFNoteGetInfo (_NOTE_OID) или OID в SEARCH_MATCH.

К сожалению, нет аналогичной техники для подмены мода или даты доступа. По крайней мере, ни один, который когда-либо был задокументирован, насколько я знаю.

1 голос
/ 27 мая 2010

Я полагаю, учитывая зависимость Lotus Notes от временных отметок (в основном для репликации), нет вызова API, который позволял бы изменять измененные, созданные или последние даты доступа к заметке. (Подробнее о внутренностях Lotus Notes можно найти здесь .)

Я покопался в документации Notes C API и нашел только одно упоминание о том, как получить / установить информацию в заголовке заметки , включая дату изменения. Однако в документации говорится, что при попытке обновить эту заметку (т.е. записать ее на диск) дата последнего изменения будет перезаписана датой / временем записи на диск.

В качестве альтернативы я бы предложил создать свой собственный набор элементов даты в документах, которые контролируются только вами, например, MyCreated, MyModified и MyAccessed, и ссылаться на элементы в вашем коде, которые перемещают документы на основе дат. После этого вы сможете изменить эти даты так же легко, как и любой другой элемент документа (через агентов, формы и т. Д.)

Для MyCreated создайте скрытое вычисляемое поле формы с формулой @CREATED или @NOW. Установите тип для вычисляемого при создании.

Для MyModified создайте скрытое вычисляемое поле формы с формулой @NOW и установите для типа вычисляемый.

MyAccessed становится немного сложнее. Если вы можете обойтись без этого, я предлагаю вам вживую работать только с MyCreated и MyModified. Если вам это нужно, вы должны иметь возможность управлять им, задав значение поля в событиях QueryOpen или PostOpen. Проблемы возникают, если ваши пользователи имеют доступ только для чтения к документу - код для обновления поля MyAccessed не сможет сохранить это значение.

Надеюсь, это поможет!

...