管理自定义文档锁定以防止冲突文档

时间:2015-06-19 21:22:02

标签: xpages ssjs

我有一个内置于ssjs对象的自定义文档流程。当我在读取模式下单击文档中的“编辑”按钮时,我会调用在后端文档中设置锁定日期/时间和锁定所有者的方法,然后返回true。然后可以使用ChangeDocumentMode简单操作将文档更改为编辑模式。但是,第一次保存文档(例如使用简单操作)时,它会创建冲突文档。前端文档可能不知道后端文档修改,并且在进入编辑模式之前保存了。

如果我更改此过程以便让我的文档锁定代码设置两个后端文档字段然后使用context.redirectToPage,则文档将打开到编辑模式并从ui保存它不会创建任何冲突文档。但是,如果在使用我的代码解锁文档后,我使用“打开页面”简单操作转到“上一页”退出文档,它只返回到读取模式而不是实际关闭文档。我确信最初的redirectToPage中断了历史记录并导致了这个问题。

问题:是否有人建议如何在进入编辑模式之前锁定文档,进入编辑模式,保存而不会导致冲突文档,并且仍然可以使用“打开页面”简单操作退出(解锁后)文件)?

以下是锁定相关代码的示例,包括进入编辑模式的代码:

thisDoc.replaceItemValue("LockOwner",context.getUser().getCommonName());
thisDoc.replaceItemValue("LockDate",session.createDateTime(@Now()));
thisDoc.save();
var url = view.getPageName()+"?action=editDocument&documentId="+thisDoc.getNoteID();
context.redirectToPage(url);

1 个答案:

答案 0 :(得分:0)

这取决于您的使用案例。如果您的应用程序是用户访问文档的方式,我建议不要在文档中写入任何内容进行锁定 - 在解锁之前,您最终需要为断开连接的用户(网络,关闭浏览器,崩溃)提供解锁管理功能。 锁定的方式,例如在WebDAV中是一个服务器内存时间锁定,呼叫每30秒更新一次。您将使用经典的Ajax调用。

openNTF WebDAV for Domino项目具有这种锁定机制的服务器端,您可能希望从那里复制它。

如果您必须写入文档:更改序列并在readmode中的queryOpen事件中更新文档 - 这涵盖了用户也为编辑URL添加了书签的情况。

告诉我们它是怎么回事!