This
This : Object
| 引数 | 型 | 説明 | |
|---|---|---|---|
| 戻り値 | Object | ← | カレントの要素またはオブジェクト | 
説明
This コマンドは現在処理中のオブジェクトへの参照を返します。
This の値は、呼ばれ方によって決まります。 This の値は実行時に代入により設定することはできません。また、呼び出されるたびに違う値となりえます。
このコマンドは以下で説明するように、異なるコンテキストで使用することができます。 これらのコンテキストの中においては、This.<propertyPath> を通してオブジェクト/コレクションの要素プロパティやエンティティの属性にアクセスすることができます。 例えば、This.name やThis.employer.lastName はオブジェクト、要素やエンティティプロパティへの有効なパスとなります。
これら以外のコンテキストにおいては、コマンドはNull を返します。
クラス関数
クラスコンストラクター 関数が new() 関数により使用された場合、その内部の This はインスタンス化される新規オブジェクトを指します。
//Class: ob
Class constructor  
 // This に対して値を割り当てることで
 // プロパティを作成する
 This.a:=42
// 4Dメソッドにて 
$o:=cs.ob.new()
$val:=$o.a //42
コンストラクター内で Super キーワードを使ってスーパークラスのコンストラクターを呼び出す場合、必ず
Thisより先にスーパークラスのコンストラクター を呼ぶ必要があることに留意してください。順番を違えるとエラーが生成されます。 こちらの 例題 を参照ください。
いずれの場合においても、This はメソッドの呼び出し元のオブジェクトを指します。
//Class: ob
Function f() : Integer
 return This.a+This.b
この場合、プロジェクトメソッド内には次のように書けます:
$o:=cs.ob.new()
$o.a:=5
$o.b:=3
$val:=$o.f() //8
この例では、変数 $o に代入されたオブジェクトは自身の f プロパティを持たないため、これをクラスより継承します。 f は $o のメソッドとして呼び出されるため、メソッド内の This は $o を指します。
フォーミュラオブジェクト
Formula あるいは Formula from string コマンドで作成されたフォーミュラオブジェクトの実行コンテキストにおいては、This はフォーミュラによって現在処理されているオブジェクトへの参照を返します。
例えば、プロジェクトをオブジェクトのカプセル化されたフォーミュラとして使用したい場合を考えます:
 var $person : Object := New object
 $person.firstName:="John"
 $person.lastName:="Smith"
 $person.greeting:=Formula(Greeting)
 $g:=$person.greeting("hello") // "hello John Smith" を返す
 $g:=$person.greeting("hi") // "hi John Smith" を返す
Greeting プロジェクトメソッドの中身は以下のようになっています:
 #DECLARE($greeting : Text) : Text
 return $greeting+" "+This.firstName+" "+This.lastName
リストボックス
コレクションまたはエンティティセレクションに割り当てられたリストボックスのコンテキストにおいては、On Display Detail あるいは On Data Change イベントの最中において、は現在の行を表示するためにリストボックス割り当てられたコレクション要素またはエンティティへの参照を返します。
スカラー値のコレクションをリストボックスに対して使用した場合、4D はそれぞれの要素に対して、単一のプロパティ value を持つオブジェクトを作成します。 そのため、要素の値はThis.value という代入不可の式によって返されます。
例題 1
以下のような構造を持つオブジェクトのコレクションがある場合を考えます:
{  
"ID": 1234
"name": "Xavier",  
"revenues": 47300,  
"employees": [  
             "Allan",  
             "Bob", 
             "Charlie"  
            ] 
},{  
"ID": 2563
"name": "Carla",  
"revenues": 55000,  
"isFemale": true
"employees": [  
             "Igor",  
             "Jane"  
            ] 
},...
 
リストボックス内では、各カラムはオブジェクトのプロパティいずれか一つを、直接的 (This.name) に、あるいは間接的 (This.employees.length) に、あるいは直接使用できる式(getPicture) を通して参照しています。 このリストボックスは、以下のようになります:
GetPicture プロジェクトメソッドは、On display detail イベント中に自動的に実行されます:
  //GetPicture メソッド
 #DECLARE -> $genderPict : Picture
 If(This.isFemale)
    $genderPict:=Form.genericFemaleImage
 Else
    $genderPict:=Form.genericMaleImage
 End if
フォームを実行すると、以下のような結果が表示されます:

例題 2
以下のようなストラクチャーからのエンティティをリストボックスに表示したい場合を考えます:

その場合、以下のような定義を持つ"コレクションまたはエンティティセレクション"型のリストボックスを作成します:

注:
- This.ID、This.Title および This.Date は、ds.Event データクラス内の対応する属性を直接参照します。
- This.meetings は(1対N リレーション名に基づいた)リレーション属性であり、ds.Meeting データクラスのエンティティセレクションを返します。
- Form.eventList はリストボックスに割り当てられているエンティティセレクション です。 初期化コードは、On Loadフォームイベント内で以下のように書くことができます:
 Case of  
    :(Form event code=On Load)  
       Form.eventList:=ds.Event.all() //全てのエンティティを格納したエンティティセレクションを返す
 End case  
フォームが実行されると、リストボックスにはエンティティセレクションが入った状態で表示されます:
参照
プロパティ
| コマンド番号 | 1470 | 
| スレッドセーフ | ✓ |