0

以下で悩んでいます。

XPage に viewpanel コンポーネントがありますが、これは notesview データソースではなく、viewScope に格納されているハッシュマップにバインドされています。この理由は私の質問の範囲を超えています。

私のビューの行は実際にはドキュメントにリンクされていないため、標準のチェックボックスと関連する getSelectedDocIds を使用できません。ただし、選択したドキュメントを削除する方法が必要です。対応する行の unid を含むチェックボックスのある列があります。

簡単に言えば。unid の配列があり、次の操作を実行したいと考えています。

  • 確認を求める dijit.Dialog を表示する
  • [OK] をクリックすると、次の処理を行う関数が呼び出されます。
    • unid に基づいてドキュメントを削除します
    • ビューパネルを更新する

私は次の2つの解決策を考えていますが、何が最善か疑問です(おそらく3番目の、さらに単純な解決策でしょうか?)

  1. Dojo ダイアログの [OK] ボタンを使用して、XAgent または単純な古い LS エージェントに対して XmlHttpRequest を実行する関数を呼び出す

  2. JeremyHodge の説明に従って、サーバー上で実行されるイベント ハンドラーを [OK] ボタンでトリガーします。しかし、どのように unids をパラメーターとして渡し、後でビューを更新するのでしょうか?

ありがとう!

4

3 に答える 3

1

ダイアログボタンコントロールで拡張ライブラリダイアログを利用することはできません。このボタンコントロールでは、次のことができます

3番目のオプションは、チェックボックスを含む列をデータテーブル/ビューに追加することです。これらのボックスのonchangeイベントで、viewScope変数に値を追加するeventhanderを追加します。

ページの下部(または上部)にあるボタンで、選択したアイテムをハッシュマップから削除し、選択したIDに関連付けられているドキュメントを削除するために必要なコードを追加します。このボタンは、ビューパネルが部分的に更新された通常のボタンにすることができます。ダイアログでボタンを使用できないというバグに遭遇した場合は、拡張ライブラリダイアログコントロールを使用してください。これにより、その問題が修正されます。

現在のユーザーがドキュメントを削除するための正しいアクセスレベルを持っていない場合は、sessionAsSignerグローバルを使用できます(デザイン要素の署名者が正しいアクセスレベルを持っていると仮定します)。

このようにして、xmlthttprequestによってxAgentを呼び出す必要がなく、デフォルトのxpage方法を維持できます。

これが何らかの形で役立つことを願っています

于 2012-07-25T20:32:15.547 に答える
1

ダイアログボックスに拡張ライブラリを使用する場合は、@jjbsomhorst を 2 番目に使用します。通常、ユーザーはダイアログ ボックスを読みません。したがって、アプローチはチェックボックスを含む列を追加することですが、イベントハンドラーを気にする必要はありませんが、それらすべてをその値で 1 つの scopeVariable にバインドします。送信すると、その変数は選択された UNID を持つ配列を保持します。次に、これらのドキュメントを一覧表示し、確認ボタンを表示するページをレンダリングします。新しいページはサーバーのラウンドトリップを可能にしますが、ユーザーが実際に注意を払う可能性ははるかに高くなります. できること:

編集可能なチェックボックスを含むダイアログをレンダリングする通常のページを用意し、ユーザーが「削除」をクリックするviewScope.confirmDeleteMode=true;と、それをチェックボックスの条件として使用して読み取り専用にし、選択した行のクラスを「morituri」に設定します。あなたのCSSには.morituri { color: white; background-color : red; font-weight: bold } 、「削除の確認」のような新しいボタンがあります(そして削除ボタンを非表示にします)。

これにより、処理するページが 1 つだけになります。

于 2012-07-26T03:16:58.920 に答える
1

オプション 2 を選択しました。これには、部分的な更新 ID を提供できる可能性があります。次のように、unid を submitvalue として渡しました。

function doRemove(unids){

     XSP.executeOnServer(ISP.UI.removeEventID, ISP.UI.removeRefreshID, {

        params: {
            '$$xspsubmitvalue': unids
        },
        onComplete : function() {
            //alert('test')
        }
    });

}

ISP.UI.removeEventID は次のコードを実行します。

var unids = context.getSubmittedValue();
removeDocuments(unids); //SSJS function performing the actual delete
viewScope.reload = 'reload' //triggers the hashmap to be rebuild based on new documentcollection
于 2012-07-26T08:46:57.483 に答える