【问题标题】:Creating Lotus Notes documents with specific created/modified/last accessed dates for testing创建具有特定创建/修改/上次访问日期的 Lotus Notes 文档以进行测试
【发布时间】:2012-03-06 00:53:51
【问题描述】:

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

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

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

谁能提供其他建议?

【问题讨论】:

    标签: lotus-notes lotus lotus-domino


    【解决方案1】:

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

    【讨论】:

    • 赞成这个无价的警告购买者:“如果你有冒险的天赋并且需要用剪刀跑步......”
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      我想考虑到 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 字段的代码将无法存储该值。

      希望这会有所帮助!

      【讨论】:

      • 谢谢。我发现您的链接信息量很大 - 尽管我不太热衷于创建自定义字段作为解决问题的方法。这是因为我过去遇到过一个数据库,有人这样做了,他们以这样一种方式对应用程序进行了编码,其中字段没有正确更新。当用户查看文档的属性时,这会导致搜索结果出现混乱。
      • 这绝对是一个问题。您并没有真正使用我提出的解决方案连接到正确的事件。您将需要类似 SQL 中的插入和更新触发器之类的东西。不幸的是,没有办法在一个地方的 Notes 中执行此操作,因此您必须确保涵盖创建或更新文档的所有情况。如果您熟悉所有代码,绝对可以,但我理解您的犹豫。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多