用的XPages一个DataTable内所选文档创建响应文档(Creating response d

2019-10-20 03:41发布

我尝试保存我的文档的文档保存得到没有任何错误,但响应文件不被发现的位置。 响应文档是使用复选框中选择的文档中的数据表的列表。 在下面的代码被放置在复选框的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>

分阶段事件:

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

在我提交钮(创建新的主文件响应DOC)我有:

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();
}

当我提出我的主要文件有救,但没有性反应的文件,并暗示?

Answer 1:

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执行。 因为是在“ViewScope.put(‘标题’......”一个大写字母“V”,将抛出一个错误。因为代码被从未被执行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>


文章来源: Creating response doc from a selected document within a dataTable with XPages