1

コンボ ボックスの値の選択に基づいて、ビュー コントロールのチェック ボックスをマークする必要があります。

たとえば、顧客注文ドキュメントのビューがあり、「保留中」の注文をすべて選択する必要があるとします。エンド ユーザーは画面を下にスクロールして、ステータスが「保留中」の各行にチェック マークを付けることができますが、ビュー全体に 50 行が散らばっている可能性があります。エンド ユーザーが「保留中」を選択できるコンボ ボックスが必要です。XPages は、一致するすべてのドキュメントにチェック マークを付けます。次に.getSelectedIds()、それらのドキュメントを操作するために使用するボタンがあります。

を使用してみrowData.setSelected(true)ましたが、行の viewColumn にチェック マークが表示されません。

viewPanel で XPage のデフォルト チェックボックスにアクセスする方法はありますか。

4

2 に答える 2

1

私はビューコントロールの大ファンではありません。あなたが説明することはできると確信していますが、別のアプローチを提供します。

リピートコントロールからgetSelectedIDs()を実行する方法を示すこのビデオを作成しました(IEは使用しないでください):http: //xpages.tv/xtv3.nsf/episode_user.xsp ?action = openDocument&documentId = 94A

その例では、ユーザーは行をクリックして、そのIDをsessionScopeのマップに追加すると思います。多分viewScope-私は忘れています。CSSを使用して行を強調表示し、選択されていることを示しました。マップからIDを削除し、ハイライトを削除するために更新するボタンがありました。

今あなたがしたいこと-今のところチェックボックスを忘れましょう。このリピート制御手法を使用できるはずです。リピートの上に、[すべて保留中を選択]のようなボタンがあります。そのボタンは、バックエンド上のデータをループして正しいUNIDSを取得し、それらをマップに追加するSSJS関数を実行します。リピートを部分的に更新すると、すべてが選択された状態で表示されます。選択したリストを操作する必要がある別のボタンは、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 に答える