4D v16.3

EXECUTE METHOD IN SUBFORM

ホーム

 
4D v16.3
EXECUTE METHOD IN SUBFORM

EXECUTE METHOD IN SUBFORM 


 

EXECUTE METHOD IN SUBFORM ( subformObject ; methodName {; return {; param} {; param2 ; ... ; paramN}} ) 
引数   説明
subformObject  テキスト in サブフォームオブジェクトの名称
methodName  テキスト in 実行するプロジェクトメソッドの名前
return  演算子, 変数 in メソッドが値を戻さない場合 *
in メソッドから返される値
param  in メソッドに渡す引数

説明   

EXECUTE METHOD IN SUBFORM コマンドを使用して サブフォームオブジェクトsubformObject のコンテキストでプロジェクトメソッドmethodName を実行できます。

呼ばれるプロジェクトメソッドは任意の数の引数をparam に受け取ることができ、また戻り値はreturnに返されます。メソッドが値を戻さない場合は、return* を渡します。

methodNameに はデータベースあるいはコマンドを実行するコンポーネントからアクセスが可能なプロジェクトメソッドを指定できます。実行コンテキストは呼び出されたメ ソッド内でも保持されます。つまりカレントフォームおよびカレントフォームイベントは指定されたまま引き継がれます。サブフォームがコンポーネント由来の 場合、メソッドはコンポーネントに属していなければならず、また"コンポーネントとホストデータベースで共有する"プロパティがチェックされていなければ なりません。

このコマンドは (subformObject オブジェクトを含む) 親フォームのコンテキスト、例えばフォームメソッド等から実行しなくてはなりません。

注: methodName メソッドは、subformObject がカレントページに見つからないか、インスタンス化されていない場合、実行されません。

親フォーム"Company"中にサブフォーム"ContactDetail"が置かれています。ContactDetailフォームが設定されたサブフォームオブジェクトの名前は"ContactSubform"です。ここでcompanyのフィールド値に基づき、サブフォーム内の特定の要素のアピアランスを変更したいとします (例えば[Company]City="New York"のときは"contactname"を赤に、[Company]City="San Diego"のときは青にするなど)。このメカニズムはSetToColor メソッドに実装されています。この結果を得るために、SetToColor メソッドをCompany親フォームの"On Load"フォームイベントのプロセスから直接呼び出すことはできません。なぜなら"contactname"オブジェクトはカレントフォームではなく、 "ContactSubform"サブフォームオブジェクト中に表示されているフォームに属しているからです。そのため正しく動作させるために、メソッドはEXECUTE METHOD IN SUBFORMコマンドを使用して実行されなければなりません。

 Case of
    :(Form event=On Load)
       Case of
          :([Company]City="New York")
             $Color:=$Red
          :([Company]City="San Diego")
             $Color:=$Blue
          Else
             $Color:=$Black
       End case
       EXECUTE METHOD IN SUBFORM("ContactSubform";"SetToColor";*;$Color)
 End case

コンポーネントとして使用される予定のデータベースを開発しています。このデータベースには共有プロジェクトフォーム (例として"Calender"と名付けます) が含まれています。またこのフォームにはダイナミック変数やカレンダを調整するための公開プロジェクトメソッド (SetCalendarDate(varDate)) が含まれています。
このメソッドがCalenderフォームメソッドで直接使用される場合、開発者は直接このメソッドをフォームの"On Load"イベントで呼び出すことができます:

 SetCalendarDate(Current date)
しかしホストデータベースのコンテキストで、プロジェクトフォームに2つの"Calendar"サブフォーム"Cal1"および"Cal2"が配置されている状況を想像してください。Cal1の日付を2010/01/01、Cal2の日付を2010/05/05に設定する必要があるとします。このケースでは、コンポーネントメソッドSetCalendarDate を直接呼び出すことはできません。なぜならコンポーネントメソッドはどちらのフォームに処理を適用したらよいかわからないからです。そこで、このメソッドを以下の方法で呼び出す必要があります:

 EXECUTE METHOD IN SUBFORM("Cal1";"SetCalendarDate";*;!10/01/01!)
 EXECUTE METHOD IN SUBFORM("Cal2";"SetCalendarDate";*;!10/05/05!)

上級例題: 先と同じ状況で、ここでは汎用メソッドを作成してみます:

  // SetCalendarDate メソッドの内容
 C_DATE($1)
 C_TEXT($2)
 Case of
    :(Count parameters=1)
  // 標準のメソッド実行 (フォーム内で呼び出された場合)
  // またはケース2からの再帰呼び出し
 
    :(Count parameters=2)
  // 外部呼出し、
  // 1つの引数で再帰呼び出しを行う
       EXECUTE METHOD IN SUBFORM($2;"SetCalendarDate";*;$1)
 End case

コマンドが正しく実行されるとシステム変数OKに1が設定され、そうでなければ0が設定されます。

 
プロパティ 

プロダクト: 4D
テーマ: ランゲージ
番号: 1085

このコマンドはOKシステム変数を更新します

 
履歴 

初出: 4D v12

 
ARTICLE USAGE

ランゲージリファレンス ( 4D v16)
ランゲージリファレンス ( 4D v16.1)
ランゲージリファレンス ( 4D v16.2)
ランゲージリファレンス ( 4D v16.3)