1

これは非常に奇妙な質問ですが、パンくずリスト、タブ、または戻るボタンをクリックして、ユーザーがこの特定のページを離れたときに、SQL UPDATE を実行するプロセスをトリガーできるかどうか疑問に思いました。

「戻る」ボタンで実行するプロセスをセットアップしました。しかし、私は次の問題に遭遇しました。代わりにパンくずリストまたはタブをクリックするとどうなりますか。

私はネットを検索しましたが、この質問を投稿することは最後の手段でした. 誰かが私を正しい方向に向けることができるかどうか疑問に思いましたか?

更新された投稿

ページ 1:
テキスト フィールドとボタンが含まれています。ユーザーはテキスト フィールドにカテゴリを入力し、ボタンをクリックして次のページに進みます。このボタンは、テキスト フィールドの値をページ 2 のテキスト フィールドに渡します。

ページ 2: ページ
上の 2 つの領域。1 つの領域には、カテゴリに関する情報が保持されます - 前のページのカテゴリ名、カテゴリの説明、およびカテゴリのリビジョン番号 (これは私が作業しようとしているものです)。2 番目のリージョンは、カテゴリ テキスト フィールドのカテゴリの下にリストされているアイテム名と番号を取得するレポートです。レポートで「表示」リンクを使用して、選択した特定のアイテムの編集ページを読み込みます。「表示」リンクは、レポートの「カテゴリ名」(カテゴリ テキスト フィールドから) と「項目番号」をページ 3 に渡します。

ページ 3
2 つの領域が使用されます。最初の領域: ページ 2 から取得した項目番号と項目の名前 (簡単なクエリを使用して取得) を一覧表示します。2 番目の領域: レポートは 2 つの列で使用されます。列 1 のアイテム プロパティのリストと、更新可能な値を保持する列 2 の各アイテム プロパティの横にあるテキスト フィールドです。「Apply Changes」ボタンには、必要に応じて変更と更新を探す PlSql が背後にあります。変更された関連フィールドを更新し、ユーザーをページ 2 (最初に入力したカテゴリにリストされたアイテムを表示するページ) に戻します。

ユーザーが同じカテゴリのアイテムの編集を完了する可能性があるため、3 ページの [変更を適用] ボタンでカテゴリ リビジョンを増やすことができません。そのため、カテゴリへのビストごとにカテゴリのリビジョンを1ずつ増やすことができる場所がわかりません。Ps 3 ページの「変更を適用」ボタンを使用して情報が変更された場合、各項目のリビジョン番号を 1 ずつ増やします。

4

1 に答える 1

0

これを行う 1 つの方法は、ajax を介して (通常どおりページを送信せずに) ページ項目のセッション状態を更新し、javascript onbeforeunload によって呼び出されたときにテーブルを更新するアプリケーション プロセスを呼び出すことです。

UpdatePageXOnExit などの名前で、オンデマンドで起動するアプリケーション プロセスを作成します。そのアプリケーション プロセスの PL/SQL ブロックで、更新するページの各アイテムのアイテム状態で SQL 更新コマンドを使用します。次のようなもの:

BEGIN
    UPDATE table_name SET col1 = :PX_ITEM_1, col2 = :PX_ITEM_2, col3 = :PX_ITEM3, col4 = :PX_ITEM_4, col5 = PX_ITEM_5 
WHERE (condition... I would suggest ROWIDs to simplify changes to the 
       fields of the PK; otherwise you will have to create additional
       page items for each field of the PK, then set those items to
       the values of the PK when the page loads using a before
       header page process, and then use those values in this where
       clause like this: where col1 = :PX_ORIGINAL_PK_FIELD_1 AND col2 =
       :PX_ORIGINAL_PK_FIELD_2 );
END ;

その特定のページのページ設定に移動し、JavaScript: Execute On Page Load セクションで、次のように記述します。

window.onbeforeunload = updateOnExit; 

また、JavaScript 関数とグローバル変数の宣言では、次のように記述します。

function updateOnExit() {
    var get = new htmldb_Get(null,&APP_ID.,'APPLICATION_PROCESS=UpdatePageXOnExit',&APP_PAGE_ID.);
    get.add('PX_ITEM_1',$x('PX_ITEM_1').value)
    get.add('PX_ITEM_2',$x('PX_ITEM_2').value)
    get.add('PX_ITEM_3',$x('PX_ITEM_3').value)
    get.add('PX_ITEM_4',$x('PX_ITEM_4').value)
    get.add('PX_ITEM_5',$x('PX_ITEM_5').value)
    gReturn = get.get();
    get = null;
    // Comment out the following line or not, as per the note in the following paragraph
    return 'Are you sure you would like to leave the page?';
}

この最後の部分は、ユーザー側で変更されたが、通常はページ送信中に発生するサーバー側にアップロードされていないページ上のページ項目のセッション状態を更新する AJAX です。注: return ステートメントをコメント アウトすると、ユーザーがページにとどまることを許可する警告ボックスが表示されなくなります。それがあなたの好みなら、それを選んでください。警告ボックスを使用することを選択した場合、ユーザーがページにとどまることを選択した場合でも、ajax はページ プロセスを実行します。

于 2013-01-17T22:04:11.637 に答える