如果我有一个带有datagrid
的xpage,则使用Rest服务。在datagrid
中有两个记录作为单独的记录存储在Notes
中。用户编辑xpage并编辑数据网格中的一行列。
有A列、B列和C列。C列以前是使用脚本库"ABC“计算的,其中A列和B列有两个值,它们创建背景说明文档,然后显示在数据集上。
以column A = 12
、column B = 24
、C列为例,计算出397列。列A必须使用脚本库ABC更改和重新计算。在Save Changes
按钮中,给出示例代码,演示如何选择已更改的行,设置两个变量(A列和B列),调用脚本库"ABC“,更新背景说明文档,重新显示数据集或更新数据集,并让它更新后台Notes文档。列A是唯一可编辑的列。
这是代码
var rsStore = restServiceObj;
var items = gridObj.selection.getSelected();
dojo.forEach(items, function(selectedItem) {
if(selectedItem != null) {
viewScope.ColA = rsEntry.getColumnValue("A");
viewScope.ColB = rsEntry.getColumnValue("B");
var ans = ABC();
}
});
发布于 2016-11-16 21:07:26
使用dataTable
列出所有文档。
在属性value
中计算要列出的所有NotesDocuments。
将列A作为可编辑字段添加,将B和C作为只读字段添加到dataTable中。
将onchange
事件添加到A列的可编辑字段中:
这样,每当用户更改值A时,就会自动计算C。
<xp:panel id="panelTable">
<xp:dataTable id="dataTable1"
rows="100"
var="doc">
<xp:this.value><![CDATA[#{javascript:
var documents = [];
var col = view1.getAllEntriesByKey("yourKey", true);
var entry = col.getFirstEntry();
while (entry != null) {
documents.push(entry.getDocument());
entry = col.getNextEntry(entry);
}
return documents;
}]]></xp:this.value>
<xp:column id="column1">
<xp:this.facets>
<xp:span xp:key="header">A</xp:span>
</xp:this.facets>
<xp:inputText id="inputText1" value="#{doc.A}">
<xp:eventHandler
event="onchange"
submit="true"
refreshMode="partial"
refreshId="panelTable">
<xp:this.action><![CDATA[#{javascript:
var A = doc.getItemValue("A").get(0);
var B = doc.getItemValue("B").get(0);
doc.replaceItemValue("C", ABC(A, B));
doc.save();
view1.refresh();
}]]></xp:this.action>
</xp:eventHandler>
</xp:inputText>
</xp:column>
<xp:column id="column2">
<xp:this.facets>
<xp:span xp:key="header">B</xp:span>
</xp:this.facets>
<xp:text id="computedField3" value="#{doc.B}" />
</xp:column>
<xp:column id="column3">
<xp:this.facets>
<xp:span xp:key="header">C</xp:span>
</xp:this.facets>
<xp:text id="computedField2" value="#{doc.C}" />
</xp:column>
</xp:dataTable>
</xp:panel>
https://stackoverflow.com/questions/40569694
复制相似问题