使用XPages从dataTable中的选定文档创建响应文档

Creating response doc from a selected document within a dataTable with XPages

本文关键字:文档 创建 响应 XPages dataTable 使用      更新时间:2023-09-26

我试着保存我的文档,文档保存没有任何错误,但响应文档不在哪里可以找到。响应文档是使用复选框选择的数据表中的文档列表。下面的代码放置在复选框的onchange事件上:

<xp:checkBox id="checkBox1" value="#{vProductListCollection}">
                                <xp:eventHandler   event="onchange" submit="true" refreshMode="norefresh"
                                    id="eventHandler1">
                                    <xp:this.action><![CDATA[#{javascript:
var colTitle = vProductListCollection.getColumnValue("Title");
var prodTitle = viewScope.get("title");
var docId = viewScope.get("id");
var selDocID = vProductListCollection.getUniversalID();
if(docId.contains(selDocID )) {
prodTitle.remove(colTitle );
docId.remove(selDocID );
} else {
prodTitle.add(colTitle );
docId.add(selDocID );
}
}]]></xp:this.action>
                                </xp:eventHandler>
                            </xp:checkBox>

Postopen事件:

var titleList = new java.util.ArrayList();
ViewScope.put('title', titleList );
var idList = new java.util.ArrayList();
viewScope.put('id', idList );

在我的提交按钮(为新的主文档创建响应文档),我有:

currentDocument.save()
var TL:java.util.ArrayList = viewScope.get("title");
var Id:java.util.ArrayList=viewScope.get("id");
for(var x=0;x<Id.size();x++){
 var doc=database.getDocumentByUNID(Id.get(x)); 
 var resdoc:NotesDocument=doc.copyToDatabase(database);
 resdoc.makeResponse(currentDocument.getDocument());
 resdoc.save();
}

当我提交我的主文档得到保存,但没有响应文档,和提示?

copyToDatabase()有时工作不太好。解决方法和最佳实践是创建一个新文档并复制所有项。

你的代码可能看起来像这样:

for(var x=0;x<Id.size();x++){
    var doc=database.getDocumentByUNID(Id.get(x)); 
    var resdoc:NotesDocument=database.createDocument();
    doc.copyAllItems(resdoc, false);
    resdoc.makeResponse(currentDocument.getDocument());
    resdoc.save();
}

更新:

我发现了不创建响应文档的原因:您的Postopen(?)事件代码从未作为SSJS执行。它会抛出一个错误,因为它有一个大写字母"V"在"ViewScope.put('title'…"。因为代码永远不会被执行,viewScope "Id"保持为空,因此创建响应文档的for循环永远不会进入。

将正确的代码放入beforePageLoad事件中,它将工作。

<xp:this.beforePageLoad><![CDATA[#{javascript:
    var titleList = new java.util.ArrayList();
    viewScope.put('title', titleList );
    var idList = new java.util.ArrayList();
    viewScope.put('id', idList );}]]>
</xp:this.beforePageLoad>