【问题标题】:XPages: Document conflict when saving a doc via SSJS and JavaXPages:通过 SSJS 和 Java 保存文档时发生文档冲突
【发布时间】:2018-09-12 13:36:00
【问题描述】:

我有一个 XPage,它使用 document1.save() 在 SSJS 中保存一个文档。之后,我调用一些 Java 代码对文档和保存的新数据进行一些额外的处理;我将 document1.getDocument() 传递给 Java 函数。在 Java 函数中,它调用 Document.save() 再次保存文档。这似乎是导致保存冲突的秘诀,我不知道为什么。谁能解释发生了什么?蒂亚! (除了了解为什么会发生这种情况,如果有人对我正在做的事情提出更好的建议,我将不胜感激。)

里德

【问题讨论】:

  • 您可以尝试使用 getDocument(true) 传递文档吗?这可能会阻止创建保存冲突...
  • 嗨迈克尔。如果在将 Document 传递给我的 java 代码时使用 getDocument(true),不幸的是我仍然会遇到保存冲突。我注意到的一件事是,如果我在 SSJS 中使用 document1.getDocument().save() 而不是 document1.save(),则不会发生冲突。似乎可以正确保存更改,尽管我需要再测试一下。这样做似乎不太正确....
  • 你试过只用java保存吗?
  • Per:我没有。 java真的不知道NotesXspDocument吗?似乎不在 SSJS 中执行 document1.save() 而是在 java 中执行 Document.save() 与我尝试的基本相同,即在 SSJS 中调用 document1.getDocument().save() 。真的吗...?它应该像看起来那样正常工作吗?!
  • SSJS 是 Java,您的 Java 代码可以了解 NotesXspDocument。我会添加一个答案

标签: java xpages


【解决方案1】:

您可以在 Java 中使用“resolveVariable”来获取您的 NotesXspDocument(在 Java 中称为 DominoDocument)。然后,您可以在 Java 中而不是 SSJS 中保存 DominoDocument 对象。

如果您使用 JSFUtil(在许多 XPages 开源项目中都可以找到)或使用您自己的辅助方法,那么您可以这样做来获取您的 DominoDocument(将“currentDocument”替换为您的文档数据源的名称) :

DominoDocument uidoc = (DominoDocument) JSFUtil.resolveVariable("currentDocument");

resolveVariable 方法如下所示:

public static Object resolveVariable(final String variable) {
    return FacesContext.getCurrentInstance().getApplication().getVariableResolver().resolveVariable(FacesContext.getCurrentInstance(), variable);
}

【讨论】:

  • 谢谢,佩尔!我没有意识到这一点。我现在生病了,但会试一试。它似乎可以解决根本问题。
  • 很高兴知道这一点。但是,到目前为止,在我的测试中,当我首先在我的 java 代码中调用 DominoDocument.save() 而不是在我的 SSJS 中调用 document1.save() 时,我仍然会遇到保存冲突。我希望我知道幕后发生的事情导致了这种情况......
猜你喜欢
  • 2016-06-22
  • 2020-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-22
  • 1970-01-01
相关资源
最近更新 更多