"サーバー上で実行"プロジェクトメソッド属性はメソッドプロパティダイアログや属性の一括設定ダイアログを使用して設定できます:

このオプションがチェックされていると、プロジェクトメソッドは、それが呼ばれる方法に関わらず、常にサーバー上で実行されます。
注: この属性はクライアント/サーバーモードの4Dアプリケーションでのみ考慮されます。
この属性が選択されている場合、そのプロジェクトメソッドの実行コンテキストはトリガーのそれと同じものになります (4D Serverと4Dランゲージ参照)。つまり、サーバー上で実行されるメソッドは、レコードロックやトランザクションについてクライアント側の対応する同じデータベースコンテキストを共有しますが、ランゲージコンテキスト (プロセス変数、セット、カレントセレクション) は共有しません。トリガーと異なり、サーバー上で実行されるメソッドはクライアントコンテキストのカレントレコードを共有しない点に留意してください (トリガーはトリガーテーブルのカレントレコードを共有します)。
メソッドのすべての引数 ($1, $2等) はサーバに送信され、$0が (使用されていれば) クライアントに返されます。
Execute on serverコマンドと異なり、このオプションはサーバ上にプロセスを作成しません。4D Serverは、実行をリクエストしたクライアントプロセスに対応するサーバ側のクライアントプロセスを使用します。
さらにこのオプションは、普通のメソッド呼び出しのように、引数の交換が両方向で自動化されるので、サーバにメソッドの実行を移譲することが簡単になります。
Execute on serverコマンドの場合、これは非同期で動作するため、追加のプログラミングと、結果を読み込むための待ち合わせが必要です。
"サーバ上で実行"属性を持つメソッドは、4Dランゲージコマンドの利用においては、ストアドプロシージャと同じルールが適用されます。サーバ上ではいくつかのコマンドの実行は許可されず、いくつかは推奨されません。詳細はストアドプロシージャ"(サーバ上で実行される) ストアドプロシージャが行わないこと"を参照してください。
変数へのポインタ (変数、配列、または配列要素) を渡した場合、参照先の値もサーバーに送信されます。サーバー上でメソッドにより参照先の値が更新されると、更新された値がクライアントに返され、クライアント側の対応する変数が更新されます。
テーブルやフィールドのポインタは参照として送られます (テーブル番号、フィールド番号)。カレントのレコード値は自動では交換されません。
注: このオプションはインタプリターモードとコンパイルモードで同じように動作します。
以下は"サーバ上で実行"属性が設定されたプロジェクトメソッドのコードです:
C_POINTER($1)
C_POINTER($2)
C_POINTER($3)
C_TEXT($4)
C_LONGINT($0)
QUERY($1->;$2->=$4)
While(Not(End selection($1->)))
APPEND TO ARRAY($3->;myFormula($1))
NEXT RECORD($1->)
End while
UNLOAD RECORD($1->)
$0:=Records in selection($1->)
クライアント側で、メソッドは以下のように呼び出されます:
ARRAY TEXT(myArray;0)
$vlnum :=MyAppli(->[Table_1] ;->[Table_1]Field_1 ;->myArray;"to find")