如果我使用Rest服务在其上有datagrid
的xpage。在datagrid
中有两条记录存储为Notes
中的单个记录。用户编辑xpage并编辑一行中数据网格中的一列。
列A,列B和列C.列C先前使用脚本库“ABC”计算,其中两个值在列A和列B上,它们创建了背景Notes文档,然后显示在数据网格上
例如,column A = 12
,column B = 24
,C列的计算结果为397. A列必须使用脚本库ABC进行更改和重新计算。在Save Changes
按钮中,给我示例代码,显示如何选择更改的行,使用列A和列B设置两个变量,调用脚本库“ABC”并更新背景Notes文档并重新显示数据网格或更新datagrid并让它更新后台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();
}
});
答案 0 :(得分:1)
使用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>