前のトピック: レポート データ オブジェクトに基づくコンボ ボックスへの事前入力方法

次のトピック: フィールドで JavaScript 式を使用する方法

ユーザ入力を使用して選択ボックスに事前入力する方法

ユーザが入力した値を、フォーム内の 1 つまたは複数のフィールドで使用して、選択ボックス内の値を決定することができます。 ユーザに対して、複数の有効な選択肢のセットを 2 つ提供し、ユーザがカスタムの選択内容を指定できないようにするには、この方法が便利です。 ユーザに選択可能な複数のオプションを提供しながらも、ユーザの選択の標準化および妥当性を確保したい場合に役立ちます。

この方法を使用する典型的な例としては、国および州の選択ボックスがあります。 reportobjid および reportobjvars 属性を使用して、ユーザが選択した国の州だけが州の選択ボックスに表示されるよう設定できます。

ある選択ボックスに対してユーザが入力した値に基づいて、他の選択ボックスに事前入力されるようにするには、以下の手順に従います。 この手順では、国と州のシナリオを例として使用します。

  1. レポート ビルダで、MDB などのデータ ソースに対して、最初の選択ボックスに必要な値を照会するデータ オブジェクトを作成します。 このクエリは、適用可能なすべての値のリストを返し、コンボ ボックスにそのリストを読み込みます。 この手順は、レポート データ オブジェクトに基づいたコンボ ボックスへの事前入力の手順の一部です。

    この例では、データベースから国のリストを取得するレポート データ オブジェクトを作成します。

    フォームが表示されると、レポート データ オブジェクトが実行され、コンボ ボックスに結果の値が読み込まれます。

    このデータ オブジェクトの ID は、後で参照できるように書きとめておきます。

    MDB のデータ オブジェクトのクエリとして、以下に例を示します。 この例は、フォームが添付されているサービスまたはサービス オプションに適用可能な国のリストを返します。

    SELECT country_id,country_name from my_country_table
    

    このクエリによって、以下が実行されます。

  2. フォーム上で、最初の選択ボックスを追加します。これはフォームの要素の 1 つです。
    1. _id 属性に、意味のある値を指定し、フォームを保存します。 reportobjvars 属性を指定する際は、後で参照できるように書きとめておきます。
    2. reportobjid という名前の HTML 属性の値に、データ オブジェクトの ID を指定し、フォームを保存します。

      : データ オブジェクトを使用してコンボ ボックスに事前入力する場合、選択ボックスにオプションは一切追加しないでください。これらのオプションは、ユーザがフォームを開いたときに無視されます(使用されません)。 選択ボックスのオプションはすべて無視され、データ オブジェクトのみが使用されます。

    3. 選択ボックスの multiple 属性に False を指定し、ユーザがコンボ ボックス内の 1 つのオプションのみを選択できるようにします。 フォームを保存します。
    4. title 属性(ツールチップ テキスト)に、説明のテキストを指定することもできます(たとえば、「矢印をクリックし、スクロールして国を選択します」など)。
    5. 選択ボックスのデフォルトの表示テキストを、「選択ボックス」から、よりわかりやすい名前に変更することもできます。その場合は、コンポーネント ツリーで要素を選択して、ツリーの最上部の[名前の変更]アイコンをクリックします。

      : 別のロケールのユーザがこのフォームを使用する場合に、ツールチップのテキストまたは選択ボックスの名前を任意でローカライズできます。

    6. value 属性は空にしておきます。 この値には、クエリによって返された最初の結果が読み込まれます。
  3. 最初の選択ボックス内でユーザが選択した内容に基づいて、データベースから値のリストを取得するための 2 番目のレポート データ オブジェクトを作成します。 このレポート データ オブジェクトでは、クエリ内にいくつかのレポート変数を指定し、フォーム内の最初のフィールドにユーザが入力した値を使用して値が提供されるようにします。

    この例では、ユーザが選択した国に基づいて、データベースから州を取得する 2 番目のレポート データ オブジェクトを作成します。 手順 1 のガイドラインに従って、2 番目のレポート データ オブジェクトを作成します。

  4. フォーム上で、2 番目の選択ボックスを追加します。 このボックスには、最初の選択ボックスに対するユーザの選択内容に基づいて、値が事前入力されます。 手順 2 のガイドラインに従って、2 番目の選択ボックスを作成します。以下の点に注意してください。
  5. 2 番目の選択ボックスでは、次の形式を使用して、reportobjvars 属性を指定します: $({'reportvar':value})。

    有効なは以下のいずれかです。

    この例では、ユーザが選択した国に基づいて、データベースから州が事前入力される 2 番目の選択ボックスを作成します。 州の選択ボックスの reportobjvars 属性には、ca_fdGetSelectedOptionValues という名前の事前定義された JavaScript 関数を以下のように指定します。

    $({'selected_country':ca_fdGetSelectedOptionValues ('<form _id> ','country' )[0]})
    
    form _id

    最初の選択ボックスを含むフォームの _id 属性の値を指定します。 手順 2 でこのフォームを参照します。

    country

    最初の選択ボックスの _id 属性の値を指定します。 手順 2 でこの値を作成および記録します。

  6. 最初の選択ボックスで、onchange 属性を設定し、ユーザが最初の選択ボックスの選択肢を変更した場合はすぐに 2 番目の選択ボックスの該当データが取得されるようにします。 onchange 属性には、ca_fdFetchSelectData という名前の事前定義された JavaScript 関数を以下のように指定します。
    ca_fdFetchSelectData('<form _id>','<field _id>'); 
    
    form _id

    2 番目の選択ボックスを含むフォームの _id 属性の値を指定します。 手順 4 でこのフォームを参照します。

    field_id

    2 番目の選択ボックスを含むフォームの _id 属性の値を指定します。 手順 4 でこの値を作成および記録します。

    この例では、国の選択ボックスの onchange 属性を以下のように指定します。

    ca_fdFetchSelectData('<form _id>','<state field _id>'); 
    
  7. フォームをテストして目的どおりに機能するかを確認します。

ベスト プラクティスとして、実稼働環境で使用する前に、テスト環境において、サービス内でフォームを使用してテストすることをお勧めします。