我需要根据组合框值的选择在视图控件中标记复选框。
例如,我有一个客户订单文档的视图,我需要选择所有“待处理”的订单。最终用户可以向下滚动屏幕并选中标记状态为“待定”的每一行,但整个视图中可能有50个分散。我想有一个组合框,最终用户可以选择“待定”,XPages会检查所有匹配的文件。然后我有一个按钮,使用.getSelectedIds()
来处理这些文件。
我已尝试使用rowData.setSelected(true)
,但这并未在行的viewColumn中显示复选标记。
有没有办法在viewPanel中访问XPage默认复选框。
答案 0 :(得分:1)
我不是View Control的忠实粉丝。我确定你所描述的可以做,但我会提供另一种方法。
我做了这个视频,展示了一种从重复控件中做一个getSelectedIDs()的方法(不要使用IE): http://xpages.tv/xtv3.nsf/episode_user.xsp?action=openDocument&documentId=94A
在该示例中,用户可以单击一行,我会将该ID添加到sessionScope中的地图中。也许viewScope - 我忘了。我用CSS来突出显示它被选中的行。有一个按钮可以从地图中删除id并刷新以删除突出显示。
现在你想做什么 - 让我们暂时忘记复选框。你应该可以使用这种重复控制技术然后重复上面有一个像Select all Pending这样的按钮。该按钮将运行SSJS函数,该函数将遍历后端的数据并获取正确的UNIDS,然后将它们添加到地图中。重复的部分刷新将显示它们全部被选中。然后,需要对所选列表执行操作的另一个按钮将仅引用该ID的映射。
我使用css来突出显示我想象的行可以有一个复选框控件,并且该特定行在地图中 - 添加检查,否则将其留空。
无论如何 - 这是接近它的一种方式,你应该可以在短期订单上工作。
真的,如果你正在使用视图控件,我猜你仍然可以通过后端获得文档并执行类似的处理。在这种情况下,您可能不需要添加该检查视图,因为实际上选择是硬编码的。我想问题是,如果你有那个硬编码按钮,你仍然需要标记它们。
答案 1 :(得分:0)
使用David Leedy的回复中的一些花絮我能够通过使用java.util.ArrayList()
// in the postOpenView of the custom control I put...
if (sessionScope.myList==null) {
var myList = new java.util.ArrayList();
sessionScope.put('myList',myList);
}
// in the onchange event of my combobox I put the following code,
// and set the partial update to viewPanel1
var myArray = sessionScope.get("myList");
var keycode;
var vp:com.ibm.xsp.component.xp.XspViewPanel = getComponent("viewPanel1");
for(i=0; i < vp.getRowCount() ; i++){
vp.setRowIndex(i);
var rowData=vp.getRowData();
keycode = rowData.getUniversalID();
//my combobox is bound to the sessionScope viewFilter
var test1 = sessionScope.get("viewFilter")==" "; //(used for select all)
var test2 = rowData.getColumnValue("$3").toString().startsWith(sessionScope.get("viewFilter"));
if (test2 || test1) {
if (!myArray.contains(keycode)) {
myArray.add(keycode);
}
} else {
myArray.remove(keycode);
}
}
我还在视图中添加了一个带有虚拟复选框的列(这只是装饰性的),我可以从“myArray”中选择要添加(或删除)的其他行
// the onclick event of my faux checkbox column
// with partial update set to viewPanel1
var myArray = sessionScope.get("myList");
var keycode = rowData.getUniversalID();
if (!myArray.contains(keycode)) {
myArray.add(keycode);
} else {
myArray.remove(keycode);
}
感谢您的帮助!