【发布时间】:2012-05-31 14:10:22
【问题描述】:
我希望有人可以帮助我解决我们目前面临的一个非常严重的问题,即当用户在其中工作时,关键业务应用程序会丢失数据。
这是随机发生的——我从未复制过,但系统中的用户比我多得多。
创建了一个包含大量字段的文档,并且有 2 个富文本字段。我们使用的是 Domino 8.5.3 - 没有使用扩展库控件。该文档内置了工作流,所有验证都由从数据查询保存事件调用的 SSJS 函数完成。 sessionscope.log 有大量的日志记录,并且(现在)为每个用户在注释文档中捕获了这些记录,因此我可以查看他们在做什么。
有时,用户进入工作流程步骤,他们必须填写富文本字段并在下拉字段中做出选择,然后使用工作流程按钮提交文档。当按下工作流按钮(进行完整更新)时,一些客户端 JS 首先运行
// Process any autogenerated submit listeners
if( XSP._processListeners ){ // Not sure if this is valid in all versions of XPages
XSP._processListeners( XSP.querySubmitListeners, document.forms[0].id );
}
(我添加这个是为了防止 RTF 字段在阅读博客后丢失其值,但到目前为止它不起作用)
然后服务器端事件运行并调用 view.save() 以触发 QS 代码(用于验证)和 PS 代码以在服务器上运行工作流代理。
95% 的时间,这都能正常工作。
但是,在 5% 的情况下,页面会刷新对 RFT 字段 (CKEditor) 和下拉字段所做的所有更改,都像以前一样重新加载,没有内容。就像保存没有发生一样,完全更新按钮决定像页面刷新而不是提交一样工作。
在正常情况下,日志显示当按下工作流按钮时,QuerySave 代码启动并返回 True。然后记录按下的工作流按钮的 ID(这样我可以在查看问题时看到正在使用哪些按钮),然后 PostSave 代码开始并最终返回 true。
当出现问题时,QuerySave 事件会运行,如果验证通过则返回 true,如果验证失败则返回 false,然后停止。工作流按钮的 ID 也会被记录下来。但是如果 QuerySave 返回 true,代码应该继续调用 PostSave 函数 - 它甚至不会记录它正在启动 PostSave 函数。
更糟糕的是,在调用 PostSave 代码失败后,记录的下一个事件是运行的 beforePageLoad 事件,这显然会重新加载页面,而页面上没有最近的编辑,所以用户丢失了他们输入的所有信息!
这一定是我在使用 XPages 时遇到过的最烦人的问题,因为我找不到成功的 QuerySave(甚至因为未填写必填字段而导致失败)会导致页面像这样刷新的原因并丢失内容。请有人可以帮我指出正确的方向吗?
【问题讨论】:
-
这个问题现在有了更多的答案——当你知道用户在做什么时,5% 失去价值的文档很容易被复制。可以看看这个问题吗:stackoverflow.com/questions/12198351/…
标签: xpages xpages-ssjs