Xpages 从视图中获取所选文档并另存为单独的文档
我正在尝试从视图中获取所选文档并另存为单独的文档 下面是xpage的设计 顶部的组合框、带有复选框的视图(此视图用于选择)、用于保存视图和组合框中的选择值的按钮。还将显示另一个视图,该视图将显示保存的值 由此,我可以获得所选文档的unid并保存到视图范围变量。“添加”按钮可以保存组合框和视图中的选定值,并在另一个视图中显示结果 但是,如果在视图中选择多个值并单击“保存”,则会将所有值保存在一个文档中。所以我尝试使用for循环来循环查看和保存所选的值,它仍然只在一个文档中保存一个值Xpages 从视图中获取所选文档并另存为单独的文档,xpages,Xpages,我正在尝试从视图中获取所选文档并另存为单独的文档 下面是xpage的设计 顶部的组合框、带有复选框的视图(此视图用于选择)、用于保存视图和组合框中的选择值的按钮。还将显示另一个视图,该视图将显示保存的值 由此,我可以获得所选文档的unid并保存到视图范围变量。“添加”按钮可以保存组合框和视图中的选定值,并在另一个视图中显示结果 但是,如果在视图中选择多个值并单击“保存”,则会将所有值保存在一个文档中。所以我尝试使用for循环来循环查看和保存所选的值,它仍然只在一个文档中保存一个值 <
<xp:table id="table1a">
<xp:tr>
<xp:td id="table1">
<xp:comboBox id="comboBox1"
dojoType="dijit.form.ComboBox" style="width:250.0px"
value="#{document1.Category}">
<xp:selectItems id="selectItems3">
<xp:this.value><![CDATA[#{javascript:var SetFirstValueBlank = @Text("");
return SetFirstValueBlank;
}]]></xp:this.value>
</xp:selectItems>
<xp:selectItems id="selectItems4">
<xp:this.value><![CDATA[#{javascript:@Unique(@DbColumn(@DbName(), "CategoryListView", 1));}]]></xp:this.value>
</xp:selectItems>
<xp:eventHandler event="onchange" submit="true"
refreshMode="partial" refreshId="table1a">
</xp:eventHandler>
</xp:comboBox>
<xp:text escape="true" id="computedField1">
</xp:text>
</xp:td>
</xp:tr>
<xp:tr>
<xp:td>
<xp:viewPanel rows="10" id="viewPanel1" var="rowData">
<xp:this.data>
<xp:dominoView var="view1"
viewName="hListView">
</xp:dominoView>
</xp:this.data>
<xp:viewColumn columnName="ItemName"
id="viewColumn1" style="background-color:rgb(255,255,255)"
showCheckbox="true">
<xp:viewColumnHeader value="Item Name"
id="viewColumnHeader1" rendered="false">
</xp:viewColumnHeader>
</xp:viewColumn>
<xp:this.facets>
<xp:pager partialRefresh="true"
layout="Previous Group Next" xp:key="footerPager" id="pager2">
</xp:pager>
</xp:this.facets>
</xp:viewPanel>
<xp:br></xp:br>
<xp:button value="Add" id="button1"
style="height:35.0px">
<xp:eventHandler event="onclick" submit="true"
refreshMode="complete">
<xp:this.action><![CDATA[#{javascript:var Category = getComponent("comboBox1").getValue();
var viewPanel=getComponent("viewPanel1");
var docIDArray=viewPanel.getSelectedIds();
var unidArray = new Array();
for(i=0; i < docIDArray.length; i++) {
var unid=database.getDocumentByID(docIDArray[i]).getUniversalID();
unidArray.push(unid);
}
viewScope.put("unidArray", @Implode(unidArray, ","));
for(var i=0; i< unidArray.length;i++ )
{
document1.replaceItemValue("ItemName", unidArray[i]);
document1.save();
}
}]]></xp:this.action>
</xp:eventHandler>
</xp:button>
<xp:br></xp:br>
<xp:br></xp:br>
<xp:viewPanel rows="6" id="viewPanel2">
<xp:this.data>
<xp:dominoView var="view2" viewName="CategoryItemView">
<xp:this.categoryFilter><![CDATA[#{javascript:getComponent("comboBox1").getValue();}]]></xp:this.categoryFilter>
</xp:dominoView>
</xp:this.data>
<xp:this.rendered><![CDATA[#{javascript:var value = getComponent("comboBox1").getValue();
if(value =="" || value == null)
{
return false;
}
else
{
return true;
}}]]></xp:this.rendered><xp:viewColumn id="viewColumn4" columnName="Category" rendered="false">
<xp:this.facets>
<xp:viewColumnHeader xp:key="header" id="viewColumnHeader4" value="Category">
</xp:viewColumnHeader>
</xp:this.facets>
</xp:viewColumn>
<xp:viewColumn id="viewColumn3" columnName="$10">
<xp:this.facets>
<xp:viewColumnHeader xp:key="header" id="viewColumnHeader3" value="Category">
</xp:viewColumnHeader>
</xp:this.facets>
</xp:viewColumn>
<xp:viewColumn columnName="ItemName" id="viewColumn2">
<xp:viewColumnHeader value="Item" id="viewColumnHeader2">
</xp:viewColumnHeader>
</xp:viewColumn>
<xp:this.facets>
<xp:pager partialRefresh="true" layout="Previous Group Next" xp:key="footerPager" id="pager3">
</xp:pager>
</xp:this.facets></xp:viewPanel><xp:br></xp:br></xp:td>
</xp:tr>
</xp:table>
有人能告诉我如何在单独的文档中保存多个值吗?多谢各位
编辑:删除以前的某些内容
我想我将首先关注如何将多个值保存为单独的文档,因为这一部分在程序中非常重要,一旦我可以保存为单独的文档,就会有另一个函数需要处理结果
我回顾了代码,我认为我仍将使用for循环,但不幸的是,它仍然只保存一个文档。我猜document1对象绑定到XPage上的,它仅在XPage打开时创建。要使按钮创建多个文档,需要修改for循环:
var oneOfMany : NotesXspDocument;
for(var i=0; i< unidArray.length;i++ )
{
oneOfMany = database.createDocument();
oneOfMany.replaceItemValue( "Category", document1.getItemValue("Category" ) );
oneOfMany.replaceItemValue("ItemName", unidArray[i]);
oneOfMany.replaceItemValue("form", "MyFormName" );
oneOfMany.save();
}
因为它不再使用document1,所以此循环将需要填充您需要的其他项,例如表单,例如示例中的MyFormName。感谢我知道如何使用database.createDocument,在收到您的回答之前,我不知道我可以在for循环中使用此代码。所以我现在可以将多个值保存为单独的文档。非常感谢。但是有一件事我注意到,如果我使用database.createDocument,运行表单验证->选择文档保存将不起作用。即使我使用公式编写代理,然后使用database.GetAgentYagent.run,它也不起作用。我之所以需要使用这些方法,是因为表单中有一些计算字段,当我保存文档时,这些计算字段将更新它,并将在另一个函数中使用。但是,在使用简单数据绑定的新xpage中,数据源是document1,运行表单验证->在document save和database.GetAgentYagent.Run上选择都可以正常工作。你对这个问题有什么想法吗?当然,添加一个of many.computeWithForm false,false;就在拯救之前。这与运行表单验证选项相同。有关computeWithForm方法以及如何使用它的更多信息,请查看帮助。不过提醒一下,它可能是一个时间密集的操作,尤其是在许多文档和复杂的表单上,所以请考虑手动添加其他字段。您好,我知道这个帖子已经发布了一段时间。谢谢你的评论,我可以分别保存多个文档。我可以问一个关于这篇文章的问题吗。是否可以在视图中进行数据绑定?