我希望实现一个"另存为新的"按钮。这本质上将采用现有文档并使用所有现有字段创建文档的新副本。这需要从文档而不是viewPanel实现。
答案 0 :(得分:3)
我的CMS中有“服务”功能,允许作者使用以下SSJS创建“服务”的副本:
var service = {
...
duplicate : function(thisDoc:NotesXspDocument) {
try {
var newDoc:NotesDocument = database.createDocument();
thisDoc.getDocument().copyAllItems(newDoc, true);
var newId = newDoc.getItemValueString("id") + "-" + session.evaluate("@Unique").elementAt(0) + "-DUPLICATE";
newDoc.replaceItemValue("id", newId);
newDoc.save(true);
context.redirectToPage("/service.xsp?id=" + newId + "&");
} catch(e) {
print(database.getTitle() + " SSJS Error for service.duplicate()");
print(e.toString());
}
}
}
现在,我读取了dataSources中的ID,这就是我传递newId值的原因。如果您正在使用开箱即用的dataSource设置,则需要将其更改为getUniversalID()并将URL参数设置为“?action = openDocument& documentId =”。
[edit] - 这是适用于标准数据源的脚本
var newDoc:NotesDocument = database.createDocument();
currentDocument.getDocument().copyAllItems(newDoc, true);
newDoc.save(true);
var newId = newDoc.getUniversalID();
context.redirectToPage("/entry.xsp/%24%24OpenDominoDocument.xsp? documentId="+@Text(newId)+"&action=editDocument");
[编辑](Chris Toohey):我将“document1”更改为“currentDocument”以更好地支持相对本地/当前的NotesDocument dataSource(因为有人可以从“document1”更改默认的dataSource名称,并且建议的编辑代码将不会“工作)。
答案 1 :(得分:2)
NotesDatabase.createDocument()
和NotesDocument.copyAllItems(destDoc)
应该提供功能(或相应的Java等价物)。它比NotesDocument.copyToDatabase()
答案 2 :(得分:0)
答案 3 :(得分:0)
不确定这是否可以在XPage下运行,但如果文档包含' $ VerOpt' notesItem(字段名称)中包含有效设置(例如:" 2")数据库可能会为您创建新副本。您必须根据需要安排设置/清除值。如果您想创建新版本'在每次保存时,表单都有一个默认属性,您可以设置一个设置。搜索此保留的字段名以获取详细信息。