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

テキスト書式の各項目には、変更データ・タグがあります。変更データ・タグは、書式が最後に表示されたときに、ユーザーが書式項目を変更したと考えられるかどうかを示す、状況値です。CICS® と関係する変更データ・タグの利点の 1 つは、ユーザーからプログラムに転送されるデータに、ユーザーが変更したと考えられる項目のみが組み込まれるため、ネットワーク・トラフィックが少なくなることです。

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

ユーザーとの対話

多くの場合、変更データ・タグは、プログラムがユーザーに対して書式を表示する際に、no に事前設定されます。その後、ユーザーが書式項目のデータを変更すると、変更データ・タグが yes に設定され、プログラム・ロジックによって以下のことが行われます。
  • データ・テーブルまたは関数を使用して変更されたデータを検証する (項目の変更データ・タグが yes の場合に自動的に行われます)
  • ユーザーが項目を変更したことを検出する (例えば、タイプ if item modified の条件文を使用して行われます)

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

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

変更プロパティーの設定

ユーザーが特定のフィールドを変更したかどうかに関係なく、プログラムにタスクを実行させる場合があります。例えば以下のような場合です。
  • ユーザーがフィールドにデータを入力していない場合でも、パスワード・フィールドの検証を強制する場合
  • クリティカル・フィールド (保護フィールドを含む) の検証機能を指定し、プログラムが常に特定のフィールド間妥当性検査を行うようにする場合。つまり、プログラム・ロジックは、フィールドのグループを検証し、あるフィールドの値が他のフィールドの検証にどのように影響するかを考えます。
上記のケースを処理するには、プログラム・ロジックまたは書式宣言の中で、特定の項目の変更プロパティーを設定します。
  • 書式の表示以前の論理には、タイプ set item modified の文が組み込まれます。その結果、書式が表示されると、その項目の変更データ・タグは yes に事前設定されます。
  • 書式宣言の中で、項目の変更 プロパティーを yes に設定します。この場合、以下の規則が適用されます。
    • 書式の最初の表示時に、その項目の変更データ・タグは yes に事前設定されます。
    • 書式が表示される前に以下の状態のいずれかが発生した場合、書式の表示時に、変更データ・タグは yes に事前設定されます。
      • コードが、項目の元の内容およびプロパティー値を再割り当てする、タイプ set item initial の文を実行した場合
      • コードが、書式の各項目の元のプロパティー値を再割り当てする (内容は再割り当てしない)、タイプ set item initialAttributes の文を実行した場合
      • コードが、書式の各項目の元の内容およびプロパティー値を再割り当てする、タイプ set form initial の文を実行した場合
      • コードが、書式の各項目の元のプロパティー値を再割り当てする (内容は再割り当てしない)、タイプ set form initialAttributes の文を実行した場合

set 文は、変更データ・タグの現在の設定ではなく、modified プロパティーの値に影響します。タイプ if item modified のテストは、書式データが最後にプログラムに戻されたときに有効だった、変更データ・タグの値に基づきます。論理が書式を最初に表示する前に、項目の変更データ・タグをテストしようとすると、実行時にエラーが発生します。

プログラムではなくユーザーが項目を変更したかどうかを検出する必要がある場合は、以下のようにして、項目の変更データ・タグの値が確実に no に事前設定されるようにしてください。
  • 項目の modified プロパティーが書式宣言で no に設定される場合は、タイプ set item modified の文は使用しません。この文が使用されない場合、modified プロパティーは各書式の表示前に、自動的に no に設定されます。
  • 項目の modified プロパティーが書式宣言で yes に設定される場合は、書式の表示より前の論理で、タイプ set item normal の文を使用する。 この文は、modified プロパティーを no に設定し、2 次的な結果として、項目を無保護として通常輝度で表示します。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  // tests false because the presentation was not
  // the first, and the program did not reset the
  // item properties to their initial values
  if (item02 is modified)
    ;
  end
ご利用条件 | フィードバック
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.
(C) Copyright IBM Japan 2005.