1

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

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

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

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

4

2 回答 2

1

我不是 View Control 的忠实粉丝。我确定您所描述的可以完成,但我会提供另一种方法。

我做了这个视频,展示了一种从重复控件中执行 getSelectedIDs() 的方法(不要使用 IE):http: //xpages.tv/xtv3.nsf/episode_user.xsp ?action=openDocument&documentId=94A

在该示例中,用户可以单击一行,我认为我会将该 ID 添加到 sessionScope 中的地图中。也许 viewScope - 我忘了。我使用 CSS 突出显示该行以显示它已被选中。有一个按钮可以从地图中删除 id 并刷新以删除突出显示。

现在你想做什么 - 让我们暂时忘记复选框。您应该能够使用这种重复控制技术,然后在您的重复上方有一个按钮,例如选择所有待处理。该按钮将运行一个 SSJS 函数,该函数将遍历后端的数据并获取正确的 UNIDS,然后将它们添加到地图中。重复的部分刷新将显示它们全部被选中。另一个需要作用于所选列表的按钮将只引用该 ID 的映射。

在我使用 css 突出显示行的地方,我想你可以有一个复选框控件,并且该特定行在地图中 - 添加检查,否则将其留空。

无论如何-这是处理它的一种方法,您应该能够在短期内开始工作。

真的,如果您使用的是视图控件,我想您仍然可以有一个按钮通过后端获取文档并进行类似的处理。在这种情况下,您可能不需要添加检查视图,因为选择实际上是硬编码的。我想问题是如果你有那个硬编码按钮,你是否还需要标记它们。

于 2013-03-13T17:27:45.177 回答
1

使用 David Leedy 的回复中的一些花絮,我能够通过将所选 UNID 的集合保存在范围变量中来创建解决方案,使用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);
} 

感谢所有的帮助!

于 2013-03-27T13:19:34.840 回答