2

Oracle XE 11 で Apex 4.0.2 を使用しています。

P200_CARD_TYPE値リストからフィールドが設定されているフォームがあります。私が望むのは、「表示のみ」フィールドを設定するクエリで選択した値を使用することです。P200_DESC

のソース セクションではP200_DESC、「ソース タイプ」を「SQL クエリ」に設定しています。

SELECT CARD_DESC
  FROM CARDTYPE
 WHERE card_type = :P200_CARD_TYPE;

私が抱えている問題は、Apex をこのように動作させることです。の場合P200_CARD_TYPE、「値が変更されたときのページ アクション」設定を「リダイレクトして値を設定」に設定すると、P200_CARD_TYPE変数は設定されているように見えますが (テーブルに書き出します)、

  1. フィールド表示に残りません(私のヌル表示設定に戻ります)
  2. P200_DESCP200_CARD_TYPEバインド変数を認識しません

onP200_CARD_TYPEの場合、「値が変更されたときのページ アクション」の設定があるため、選択内容は画面に保持されますが、テーブルに保持できず、P200_DESCまだ認識していないようです。

P200_CARD_TYPELOVから選択したら、設定され、他の場所で使用できると思ったでしょう。

4

1 に答える 1

5

セッション状態をまだ正しく理解していないようです。この種の質問は、ここと OTN apex フォーラムの両方で定期的に出てきます。

ドキュメントから:

HTML ページが最も頻繁に配信されるプロトコルである HTTP は、ステートレス プロトコルです。Web ブラウザは、完全なページをダウンロードするのにかかる時間だけサーバーに接続されます。さらに、各ページ要求はサーバーによって独立したイベントとして扱われ、以前に発生した、または将来発生する可能性のあるページ要求とは無関係です。あるページで入力されたフォーム値に次のページでアクセスするには、値をセッション状態として保存する必要があります。Oracle Application Expressはセッション状態を透過的に維持し、開発者がアプリケーション内の任意のページからセッション状態値を取得および設定できるようにします。

あなたのケースでこれが意味することは、その LOV から値を選択すると、その項目のセッション状態が変更されると考えたことです。そうではありません。クライアント側で値を選択すると、その値は何らかの方法でサーバーにプッシュされるまでそこでのみ使用できます。

これは、apex で理解することが非常に重要です。このような状況に再び遭遇するため、先に進む前にこれを理解する必要があります。

これで問題が解決したので、これを修正する方法に移りましょう。

サーバーに値をプッシュする最も基本的な方法は? ページ送信を実行します。すべてのアイテムのセッション状態は、クライアント側で保持されていた値で設定されます (例外は適用されますが、今は無視しましょう)。
select list アクションで間違っていたのはここです: リダイレクトを実行しました。リダイレクトはページの送信ではなく、単なるリダイレクトです。ターゲット アイテムの値を設定すると、その 1 つのアイテムのセッション ステートのみが変更されます。
したがって、SQL が変数を認識していないということではなく、値がないため何もレンダリングできないということです。
もちろん、フィールドの値を設定するためだけにページを送信したいわけではありません。送信すると、検証、ブランチ、またはプロセスが起動する可能性があります。

Tony Andrews が提案しているのは、動的アクションを使用して動的に値を取得することです。たとえば、次のように設定できます。

  • 値が変更されたときに何もしないように選択リストを設定します。
  • ツリー ビューの選択リストを右クリックし、[動的アクションの作成] を選択します。
  • イベントとして「変更」イベントを選択します
  • 真のアクションについては、「値の設定」を選択します
  • 「セットタイプ」は「SQLステートメント」である必要があります
  • desc 項目のソースとしても定義した sql を使用します。

    SELECT CARD_DESC
      FROM CARDTYPE
     WHERE card_type = :P200_CARD_TYPE;
    
  • 最後に非常に重要: [送信するページ項目] フィールドに を追加しP200_CARD_TYPEます。これにより、現在の値がP200_CARD_TYPEサーバーに送信され、そのセッション状態が設定され、クエリが機能します。

選択リストの値が変更されると、サーバー/データベースが呼び出され、値が返されて説明項目に設定されます。
それだけではありませんが、これで正しい方向に進むはずです。

于 2013-06-19T12:57:52.083 に答える