在XPage中以编程方式在视图控制器中标记复选框

时间:2013-03-13 14:56:55

标签: xpages lotus-domino

我需要根据组合框值的选择在视图控件中标记复选框。

例如,我有一个客户订单文档的视图,我需要选择所有“待处理”的订单。最终用户可以向下滚动屏幕并选中标记状态为“待定”的每一行,但整个视图中可能有50个分散。我想有一个组合框,最终用户可以选择“待定”,XPages会检查所有匹配的文件。然后我有一个按钮,使用.getSelectedIds()来处理这些文件。

我已尝试使用rowData.setSelected(true),但这并未在行的viewColumn中显示复选标记。

有没有办法在viewPanel中访问XPage默认复选框。

2 个答案:

答案 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()

将选定的UNID集合保存在范围变量中来创建解决方案
// 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);
} 

感谢您的帮助!