METHOD SET CODE
METHOD SET CODE ( path ; code {; *} )
引数 | 型 | 説明 | |
---|---|---|---|
path | Text, Text配列 | → | メソッドパスを格納したテキストまたはテキスト配列 |
code | Text, Text配列 | → | 指定したメソッドのコード |
* | 演算子 | → | 指定時 = コンポーネントで実行されたとき、コマンドをホストデータベースに適用する (コンポーネントのコンテキスト以外ではこの引数は無視されます) |
このコマンドはスレッドセーフではないため、プリエンプティブなコードには使えません。
説明
METHOD SET CODEコマンドはpath引数で指定したメソッドのコードをcode引数に渡した内容で置き換えます。
データベースメソッド、クラス定義、トリガー、プロジェクトメソッド、フォームメソッド、オブジェクトメソッドなど、すべてのタイプのメソッドのコードにこのコマンドはアクセスできます。
メソッドが存在しなければ、code引数に渡した内容で新規作成されます。
注: プロジェクトデータベースにおいては、データベースメソッド、トリガー、およびプロジェクトメソッドのみ新規作成することができます。
プロジェクトにおける注意:
- プロジェクトデータベースにおいては、データベースメソッド、トリガー、およびプロジェクトメソッドのみ新規作成することができます。
- 新規作成されたプロジェクトにおいては、環境設定のProject ソースファイルにトークンを含める オプションによって、トークンが保存されるか保存されないかを決めることができます。
テキスト配列あるいはテキスト変数を使用する2通りのシンタックスを使用できます:
var tVpath : Text // テキスト変数
var tVcode : Text
METHOD SET CODE(tVpath;tVcode) // 1つのメソッドのコード
ARRAY TEXT(arrPaths;0) // テキスト配列
ARRAY TEXT(arrCodes;0)
METHOD SET CODE(arrPaths;arrCodes) // 複数のメソッドのコード
この2つのシンタックスを混合して使用することはできません。
無効なパス名を渡した場合、コマンドはなにも行いません。
METHOD SET CODE が呼ばれた場合、デフォルトでメソッド属性はリセットされます。ただし code 引数の先頭行に有効なメタデータ(JSON表記)が含まれる場合、それらはメソッド属性を指定するために使用され、先頭行はコードには含まれません。メタデータの例は以下の通りです:
// %attributes = {"invisible":true,"lang":"fr","folder":"Security"}
注: これらのメタデータはMETHOD GET CODEコマンドで自動的に生成されます。サポートされる属性についての詳細な情報に関しては、METHOD SET ATTRIBUTES コマンドを参照して下さい。
メタデータの「folder」プロパティに関しては、以下の点に留意して下さい。
- このプロパティが明示されていて有効なフォルダーに対応する場合、メソッドはその親フォルダーに置かれます。
- このプロパティが明示されていないかフォルダーが存在しない場合、コマンドは親フォルダーの階層に変更を加えません。
- このプロパティが空の文字列を含む場合、メソッドはルート階層に置かれます。
このコマンドをコンポーネントから実行することもできますが、この場合 (コンポーネントコードには書き込みアクセスができないため) * 引数を渡さなければなりません。この状況で * 引数を省略するとエラー-9763が生成されます。
例題
この例題ではアプリケーションのすべてのメソッドを書き出し/読み込みします:
$root_t:=Get 4D folder(Database folder)+"methods"+Folder separator
ARRAY TEXT($fileNames_at;0)
CONFIRM("メソッドを読み込みますか、書き出しますか?";"Import";"Export")
If(OK=1)
DOCUMENT LIST($root_t;$fileNames_at)
For($loop_l;1;Size of array($fileNames_at))
$filename_t:=$fileNames_at{$loop_l}
DOCUMENT TO BLOB($root_t+$filename_t;$blob_x)
METHOD SET CODE($filename_t;BLOB to text($blob_x;UTF8 text without length))
End for
Else
If(Test path name($root_t)#Is a folder)
CREATE FOLDER($root_t;*)
End if
METHOD GET PATHS(Path project method;$fileNames_at)
METHOD GET CODE($fileNames_at;$code_at)
For($loop_l;1;Size of array($fileNames_at))
$filename_t:=$fileNames_at{$loop_l}
SET BLOB SIZE($blob_x;0)
TEXT TO BLOB($code_at{$loop_l};$blob_x;UTF8 text without length)
BLOB TO DOCUMENT($root_t+$filename_t;$blob_x)
End for
End if
SHOW ON DISK($root_t)