Modified
Modified ( aField ) : Boolean
引数 | 型 | 説明 | |
---|---|---|---|
aField | Field | → | テストするフィールド |
戻り値 | Boolean | ← | フィールドに新しい値が代入されていればTrue, そうでなければFalse |
このコマンドはスレッドセーフではないため、プリエンプティブなコードには使えません。
説明
Modified はデータ入力中、プログラムを使用してfield に値が代入されていたり、データ入力中に値が編集された場合に、Trueを返します。Modified コマンドはフォームメソッド(またはフォームメソッドから呼ばれたサブルーチン)で使用されなければなりません。
このコマンドは同じ実行サイクル内でのみ意味のある値を返します。特に以前の*_o_During* 実行サイクルに対応するフォームイベント(On Clicked、On After Keystroke、等)では、Falseに設定されます。
データ入力時には、(元の値が変更されたかどうかに関わらず)ユーザがフィールドを編集した後別のフィールドへ移動するか、コントロールをクリックすると、フィールドが更新されたとみなされます。tabキーでフィールドを移動しただけでは、Modified はTrueにならない点に注意してください。Modified がTrueになるためには、フィールドが編集されなければなりません。
メソッドの実行時には、フィールドに値が割り当てられると(異なる値かどうかに関係なく)、フィールドが編集されたものと解釈されます。
注: Modified は、PUSH RECORD とPOP RECORD コマンド実行後は、常にTrueを返します。
いずれの場合でも、フィールドの値が実際に変更されたかどうかを調べるには、Old コマンドを使用します。
注: Modified はあらゆるタイプのフィールドに対して適用できますが、このコマンドをOld コマンドと組み合わせて使用する場合には、Old コマンドの制約に注意してください。詳細についてはOld コマンドの説明を参照してください。
データ入力時には、フォームメソッドでModified を使用するよりも、オブジェクトメソッドでForm event code を使用して処理を実行する方が簡単です。フィールドが修正される度にOn Data Changeイベントがオブジェクトメソッドに送信されるので、オブジェクトメソッドの利用はフォームメソッドでModified を使用したのと同じ意味を持ちます。
注: 処理を正しく実行するため、Modified コマンドはフォームメソッドまたは、フォームメソッドから呼び出されるメソッド内でのみ使用します。
例題 1
次の例は、[Orders]Quantity フィールドや*[Orders]Price* フィールドが変更されたかどうかを判定します。どちらかが変更されると、[Orders]Total フィールドを再計算します。
If((Modified([Orders]Quantity)|(Modified([Orders]Price))
[Orders]Total :=[Orders]Quantity*[Orders]Price
End if
2番目の行をサブルーチンにして、[Orders]Quantity フィールドと*[Orders]Price* フィールドのオブジェクトメソッドのOn Data Changeフォームイベントでそのサブルーチンを呼び出しても、同じ結果となります。
例題 2
[anyTable]テーブルのレコードを選択し、次に[anyTable]Important fieldフィールドが修正される可能性がある複数のサブルーチンを呼び出しますが、これらのメソッドはレコードの保存を行いません。メインのメソッドの終わりで、Modified コマンドを使用してレコードを保存する必要があるかどうかを調べています:
// レコードがカレントレコードとして選択済みです
// サブルーチンを使用して処理を行います
DO SOMETHING
DO SOMETHING ELSE
DO NOT FORGET TO DO THAT
// ...
// レコードを保存する必要があるか検証します
If(Modified([anyTable]Important field))
SAVE RECORD([anyTable])
End if