检查文档是否由其他用户xpages打开

检查文档是否由其他用户xpages打开,xpages,xpages-extlib,xpages-ssjs,Xpages,Xpages Extlib,Xpages Ssjs,我正在为下面的场景使用xpages。 我有一个代理,它将从notesview将值更新为datasource的一个字段。有时,当一个用户通过xpage打开数据源时,另一个用户同时运行代理。此时,代理可以运行并更新数据源的字段。但是从xpages方面,我们可以捕捉到文档被其他用户修改并且无法保存xpages的异常。 我想从探员的角度阻止这件事。我想知道是否有一种方法可以知道文档是由一个用户从代理端打开的,这样代理就不会更新该数据源的值。 谢谢你的帮助 首先:混合代理和XPages的麻烦比它的价值还多

我正在为下面的场景使用xpages。 我有一个代理,它将从notesview将值更新为datasource的一个字段。有时,当一个用户通过xpage打开数据源时,另一个用户同时运行代理。此时,代理可以运行并更新数据源的字段。但是从xpages方面,我们可以捕捉到文档被其他用户修改并且无法保存xpages的异常。 我想从探员的角度阻止这件事。我想知道是否有一种方法可以知道文档是由一个用户从代理端打开的,这样代理就不会更新该数据源的值。
谢谢你的帮助

首先:混合代理和XPages的麻烦比它的价值还多,最好将代理代码转换成Java类(并支付代理中随着时间积累的技术债务)

一个重要原因是:代理和XPages在该用户的会话中除了内存中的文档(如果已移交)外,不共享任何内容

如果您从XPage启动代理:您可以使用ApplicationScope变量(例如java.util.HashMap),当用户打开文档时,您可以用unid和用户名填充该变量。在启动该代理之前,检查unid是否在不同用户名的范围内。如果是,请不要运行代理

您需要建立一种机制来终止和更新这些锁,否则最终会导致死锁条目

如果代理直接或按计划启动,事情会变得更复杂一些。您可以实现一个web服务servlet来处理锁,因为XPages和代理都可以与web服务对话