更改背景文档时如何刷新 XPages 中的数据源?

How to refresh the datasource in XPages, when you change background document?

如果我从数据源中获取 NotesDocument 对象,更改一些字段然后保存数据源,而不直接保存 NotesDocument,则不会保存更改。

例如:

var doc:NotesDocument = document1.getDocument(true);
doc.replaceItemValue("TestField", "Test");

我用简单的操作保存了数据源,文档中的字段 "TestField" 是空的。

如何使用后台文档中的更改更新数据源?

在 SSJS 中,您必须显式保存后端文档。为此,只需添加一行以保存文档更改。我不确定为什么这个简单的操作对你不起作用,但是添加这行你的 "Test Field" 将会更新。

doc.save();

史蒂夫说得对,如果您想更新后端文档并将其反映在 DominoDocument 包装器数据源上,您需要保存。

但是根据您的回答,您为什么要尝试更新后端文档?用 document1.replaceItemValue("TestField", "test").

更新 DominoDocument 似乎更有意义

queryNewDocument 中不存在后端文档。在 document1.save() 期间,代码将有效调用 database.createDocument(),然后将 document1 中的所有字段写入新创建的 Document 对象。如果之前创建了 Document 对象,您会遇到您在评论 Steve 的回答时提出的问题 - 如果取消保存,则需要删除 Document 对象。

我想将 Authors 字段添加到文档中,我在 queryNewDocument 事件中进行了此操作。

document1.replaceItemValue("Authors", authors);
var doc:NotesDocument = document1.getDocument(true);
    if (doc != null) {
        var Authors:NotesItem = doc.getFirstItem("Authors");
        Authors.setAuthors(true);
    }

但是如果我不使用 doc.save() 保存并且只在最后执行 document1.save(),那么字段 'Authors' 将保留为普通的文本字段。 我不想在用户点击保存按钮之前保存文档。

有没有更好的方法将 Authors 字段添加到新文档?