创建具有特定创建/修改/上次访问日期的Lotus Notes文档以进行测试

时间:2010-05-26 01:52:42

标签: lotus-notes lotus lotus-domino

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

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

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

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

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

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

  

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

不幸的是,没有类似的技术来欺骗mod或访问日期。据我所知,至少没有人记录过。

答案 2 :(得分:1)

我想假设Lotus Notes在时间戳上的依赖程度(主要用于复制),没有API调用允许您更改注释的修改,创建或上次访问日期。 (有关Lotus Notes内部的更多内容可以找到here。)

我在Notes C API文档中进行了挖掘,发现只有一个关于如何get/set information in the note's header的提及,包括修改日期。但是,文档指出当您尝试更新该注释(即将其写入磁盘)时,最后修改日期将被写入磁盘的日期/时间覆盖。

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

对于MyCreated,创建一个隐藏的计算表单字段,其公式为@CREATED或@NOW。将类型设置为在编写时计算。

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

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

希望这有帮助!