1

我目前正在编写一个应用程序,该应用程序根据从创建/修改/上次访问日期过去的天数在数据库之间移动 Notes 文档。我只是想了解一种简单方便的方法来创建具有特定日期的文档,而不必更改 Domino 服务器上的时间,以便我可以测试我的应用程序。

到目前为止,我发现的最好方法是创建一个本地副本并将系统时钟更改为我想要的日期。不幸的是,这种方法存在一些问题。它在修改日期不起作用 - 我不确定当位置设置为Island (Disconnected)时它如何获取修改日期信息- 当文档复制到时它还会更改修改日期和上次访问日期服务器副本。

有人建议尝试创建文档的 DXL,修改 DXL 文件中的日期时间,然后将其作为 Notes 文档导入回数据库;但这不起作用。它只是采用它创建的日期时间。

任何人都可以提供任何其他建议吗?

4

3 回答 3

3

您可以通过设置 UNID 来设置文档的创建日期(它基本上是一个时间戳结构,尽管在最近的版本中实际实现已经改变)。但是,访问和修改时间在 Notes/Domino 环境中是不可设置的,因为您所做的更改将被保存更改的过程覆盖。如果您有冒险的天赋并且需要使用剪刀运行,您可以通过外部应用程序以编程方式或使用十六进制编辑器手动更改数据库文件本身。(编辑二进制文件会起作用——人们多年来一直在使用十六进制编辑器来安全地清除“隐藏设计”标志。请记住,签名的文档会被严重破坏,并且您需要确保本地加密已关闭数据库文件。)

于 2010-06-04T20:18:25.103 回答
2

实际上有一种非常简单的方法来欺骗创建日期/时间:只需添加一个名为 $Created 的字段,其中包含您想要的任何日期/时间。Notes C API 头文件 nsfdata.h 中提到了这一点:

与笔记关联的时间/日期:OID.Note 可以是创建笔记时的时间日期(但不保证是 - 首先查找 $CREATED 项以获取笔记创建时间) 由 NSFNoteGetInfo(_NOTE_OID) 或 SEARCH_MATCH 中的 OID 获取。

不幸的是,没有类似的技术可以欺骗 mod 或访问日期。据我所知,至少没有任何记录在案。

于 2012-03-05T16:53:51.773 回答
1

我想考虑到 Lotus Notes 对时间戳的依赖程度(主要用于复制),没有 API 调用允许您更改注释的修改、创建或最后访问日期。(有关 Lotus Notes 内部结构的更多信息,请参见此处。)

我翻遍了 Notes C API 文档,发现只有一处提到如何在 note 的 header 中获取/设置信息,包括修改日期。但是,文档指出,当您尝试更新该注释(即将其写入磁盘)时,最后修改的日期将被写入磁盘的日期/时间覆盖。

作为替代方案,我建议在只有您控制的文档(例如 MyCreated、MyModified 和 MyAccessed)中创建您自己的一组日期项,并在您的代码中引用那些根据日期移动文档的日期项。然后,您可以像更改任何其他文档项目(通过代理、表格等)一样轻松地更改这些日期。

对于 MyCreated,使用 @CREATED 或 @NOW 的公式创建一个隐藏的计算表单字段。组合时将类型设置为计算。

对于 MyModified,使用公式 @NOW 创建一个隐藏的计算表单字段,并将类型设置为计算。

MyAccessed 有点棘手。如果你可以不用它,我建议你只使用 MyCreated 和 MyModified。如果需要,您应该能够通过在 QueryOpen 或 PostOpen 事件中设置字段值来管理它。如果您的用户只有对文档的读取权限,则会出现问题 - 更新 MyAccessed 字段的代码将无法存储该值。

希望这可以帮助!

于 2010-05-26T20:01:03.987 回答