変更データ・タグおよびプロパティー

テキスト書式の 各フィールドには、変更データ・タグがあります。 変更データ・タグは、フォームが最後に表示されたときにユーザーがフォーム・ フィールドを変更したと考えられるかどうかを示す、状況値です。

後で説明するように、フィールドの変更データ・タグは、項目の modified プロパティーとは はっきりと区別されます。このプロパティーは、プログラム内で設定されるもので、 変更データ・タグの値を事前設定します。

ユーザーとの対話

多くの場合、変更データ・タグは、プログラムがユーザーに対してフォームを 表示する際に、no に事前設定されます。 その後、ユーザーがフォーム・フィールドのデータを変更すると、変更データ・ タグが yes に設定され、プログラム・ロジックによって 以下のことが行われます。
  • データ・テーブルまたは関数を使用して、変更されたデータを検証する (フィールドの 変更データ・タグが yes の場合に自動的に行われます)
  • 以下のように構造化されている if 文にフィールドの名前を含めることによって、 ユーザーがフィールドを変更したことを検出する
      if (field is modified)
        ;
      end
    詳細については、『論理式』を参照してください。

ユーザーは、フィールド内に文字を入力するか、文字を削除することによって、 変更データ・タグを設定します。書式を処理依頼する前に、ユーザーがフィールドの内容を表示時の値に戻した場合でも、変更データ・タグは設定されたままとなります。

エラーのために書式が再表示された場合、その書式は依然として同じ converse 文を処理しています。この結果、書式が再表示されたとき、converse で変更されたすべてのフィールドは変更データ・タグが yes に設定されています。例えば、バリデーター機能を持つフィールドにデータを入力した場合、この機能が ConverseLib.validationFailed 関数を呼び出し、エラー・メッセージを設定して書式の再表示を引き起こす場合があります。 この場合、フィールドの変更データ・タグは yes に設定されたままなので、アクション・キーが押されると、バリデーター機能が再度実行されます。

変更プロパティーの設定

ユーザーが特定のフィールドを変更したかどうかに関係なく、プログラムにタスクを実行させる場合があります。例えば以下のような場合です。
  • ユーザーがフィールドにデータを入力していない場合でも、パスワード・フィールドの検証を強制する場合
  • クリティカル・フィールド (保護フィールドを含む) の検証機能を指定し、 プログラムが常に特定のフィールド間妥当性検査を行うようにする場合。 つまり、プログラム・ロジックは、フィールドのグループを検証し、あるフィールドの 値が他のフィールドの検証にどのように影響するかを考慮します。
上記のケースを処理するには、プログラム・ロジックまたはフォーム宣言の中で、 特定のフィールドの変更プロパティーを設定します。
  • フォームの表示以前の論理には、タイプ set field modified の 文が組み込まれます。その結果、フォームが表示されると、そのフィールドの 変更データ・タグは yes に事前設定されます。
  • フォーム宣言の中で、フィールドの変更 プロパティーを yes に 設定します。この場合、以下の規則が適用されます。
    • フォームの最初の表示時に、そのフィールドの変更データ・タグは yes に 事前設定されます。
    • フォームが表示される前に以下の状態のいずれかが発生した場合、フォームの 表示時に、変更データ・タグは yes に事前設定されます。
      • コードが、フィールドの元の内容およびプロパティー値を再割り当てする、 タイプ set field initial の文を実行した場合
      • コードが、フォームの各フィールドの元のプロパティー値を再割り当てする (内容は 再割り当てしない)、タイプ set field initialAttributes の 文を実行した場合
      • コードが、フォームの各フィールドの元の内容およびプロパティー値を再割り当てする、 タイプ set form initial の文を実行した場合
      • コードが、フォームの各フィールドの元のプロパティー値を再割り当てする (内容は 再割り当てしない)、タイプ set form initialAttributes の 文を実行した場合
set 文は、変更データ・タグの現在の設定ではなく、modified プロパティーの値に影響します。次の タイプのテストは、フォーム・データが最後にプログラムに戻されたときに有効であった、 変更データ・タグの値に基づいて行われます。
  if (field is modified)
    ;
  end
論理がフォームを最初に表示する前に、フィールドの変更データ・ タグをテストしようとすると、実行時にエラーが発生します。
プログラムではなくユーザーがフィールドを変更したかどうかを検出する必要が ある場合は、以下のようにして、フィールドの変更データ・タグの値が 確実に no に事前設定されるようにしてください。
  • フィールドの modified プロパティーが フォーム宣言で no に設定される場合は、 タイプ set field modified の文は使用しない。 この文が使用されない場合、modified プロパティーは各書式の表示前に、自動的に no に設定されます。
  • フィールドの modified プロパティーが フォーム宣言で yes に設定される場合は、フォームの表示より 前の論理で、タイプ set field normal の文を使用する。 この文は、modified プロパティーを no に 設定し、(2 次的な結果として) フィールドを無保護として通常輝度で表示します。

書式が変更済みかどうかのテスト

変数フォーム・フィールドのいずれかの変更データ・タグが yes に 設定されている場合、フォーム全体が変更済みとして認識されます。 ユーザーに対してまだ表示されていない書式の変更状況をテストすると、そのテスト結果は FALSE になります。

書式 form01 で以下のように設定されていることを前提とします。
  • フィールド field01modified プロパティーは no に 設定されている
  • フィールド field02modified プロパティーは yes に 設定されている

以下の論理は、さまざまなテストの結果を示しています。

  // tests false because a converse statement
  // was not run for the form
  if (form01 is modified)
    ;
  end

  // causes a runtime error because a converse
  // statement was not run for the form
  if (field01 is modified)
    ;
  end

  // assume that the user modifies both fields
  converse form01;

  // tests true
  if (field01 is modified)
    ;
  end

  // tests true
  if (field02 is modified)
    ;
  end

  // sets the modified property to no
  // at the next converse statement for the form
  set field01 initialAttributes;
  
  // sets the modified property to yes
  // at the next converse statement for the form
  set field02 initialAttributes;

  // tests true
  // (the previous set statement takes effect only
  // at the next converse statement for the form
  if (field01 is modified)
    ;
  end

  // assume that the user does not modify either field
  converse form01;

  // tests false because the program set the modified
  // data tag to no, and the user entered no data
  if (field01 is modified)
    ;
  end

  // tests true because the program set the modified
  // data tag to yes
  if (field02 is modified)
    ;
  end
  
  // assume that the user does not modify either field
  converse form01;

  // tests false
  if (field01 is modified)
    ;
  end

  // tests false because the presentation was not
  // the first, and the program did not reset the
  // field properties to their initial values
  if (field02 is modified)
    ;
  end

関連リファレンス
論理式

フィードバック
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.