マクロの作成と利用
メソッド内でマクロコマンドを利用することができます。 マクロを利用すれば、コードの入力にかかる時間を大幅に短縮することができます。
マクロとは
マクロコマンドは 4Dコードのパーツで、どのデータベースが開かれているかにかかわらず、あらゆるメソッドのどんな場所にでも挿入することができます。 マクロにはすべてのタイプの 4Dテキスト、コマンド、定数、さらにマクロ実行時のメソッドコンテキストにより値が置換される特別なタグを記述することができます。 たとえば、マクロに <method_name/>;
というタグを記述しておくと、マクロ挿入時にこのタグはカレントのプロジェクトメソッド名に置換されます。
マクロは 1つ以上の XMLフォーマットのテキストファイルに格納されます。 マクロはコードエディターリスト、またはエディター内のコンテキストメニュー、さらに自動補完機能から呼び出すことが可能です。
4Dマクロは XMLフォーマットで記述されます。 4Dが提供するデフォルトのマクロファイルをそのまま使用することも、変更することもできます。
マクロの場所
4D は Macros v2 という名前のフォルダーからマクロを読み込みます。 マクロは XMLファイルとしてこのフォルダーに配置しなければなりません。
"Macros v2" フォルダーは以下の場所に配置できます:
- マシンのアクティブ4Dフォルダー。 この場合、マクロはすべてのデータベースで共有されます。 注: アクティブ4Dフォルダーの位置は OS により異なります。 詳細については、4Dランゲージリファレンス マニュアルの Get 4D folder コマンドの説明を参照ください。
- データベースストラクチャーファイルと同階層。 マクロは、このストラクチャーにのみ読み込まれます。
- コンポーネントの場合: データベースの Components フォルダーと同階層。 この場合マクロは、コンポーネントがインストールされている場合のみ利用できます。
これら 3つの場所は同時に利用可能です。各場所に "Macros v2" フォルダーをインストールできます。 マクロは以下の順番でロードされます: 4Dフォルダー、ストラクチャーファイル、コンポーネント1 ... コンポーネントX。
デフォルトマクロ
4D はデフォルトで、制御フローキーワードなどに対応するマクロを提供しています。 このマクロは 4Dを初回起動する際、マシンのアクティブ4Dフォルダー内の "Macros v2" フォルダーに作成されるMacros.xml ファイルに含まれます。
このファイルを変更することができます。また、フォルダー内に別のマクロファイルを追加することもできます (後述参照)。 このフォルダーに問題が発生した場合は、フォルダーを削除すると次回の 4D起動時に新たに作成されます。
カスタマイズしたマクロを追加する
標準のテキストエディターやプログラムを使用して、"Macros.xml" ファイルにカスタマイズしたマクロを追加できます。 またフォルダー内に、カスタマイズしたマクロを記述した XMLファイルを追加することもできます。
ローカルモードでは、4D を使用中にマクロファイルを開くこと ができます。 利用可能なマクロのリストは 4Dがアクティブになるたびに更新されます。 たとえば、テキストエディターを最前面にしてマクロファイルを更新し、その後メソッドの編集に戻ると、新しいマクロがコードエディターで利用可能になっています。
空およびエラーのあるマクロは表示されません。
カスタマイズしたマクロのシンタックスを検証する
4Dのマクロコマンドファイルは XML標準に準拠していなければなりません。 つまりXML宣言 <?xml version="1.0" ...?>
とドキュメント宣言 <!DOCTYPE macros SYSTEM "http://www.4d.com/dtd/2007/macros.dtd">
文がマクロファイルの先頭になければならず、そうでない場合、マクロは読み込まれません。 異なるタイプの XMLエンコーディングがサポートされています。 しかし、Mac/PC (UTF-8) 互換のエンコーディングを使用することが推奨されます。 4D はマクロファイルを検証するための DTD を提供しています。 ファイルは以下の場所にあります:
- Windows: \Resources\DTD\macros.dtd
- macOS: :Contents:Resources:DTD:macros.dtd
マクロファイルに宣言文が含まれない場合や検証に失敗する場合、マクロはロードされません。
4Dマクロのシンタックス
4Dマクロは "要素" と呼ばれるカスタマイズされた XMLタグを使用して構築されます。
いくつかのタグは定義の開始と終了を表し (<tag>
と </tag>
のようなペア)、その他のタグは実行コンテキストにより置換されます (<tag/>
)。
XML仕様に準拠し、いくつかのタグは属性を含むことがあります。 明示されない限り属性の指定は任意であり、省略された場合はデフォルト値が使用されます。 要素および属性のシンタックスは以下の通りです:
- 開始および終了タグのペア:
<tag attribute="value"> </tag>
- 置換されるタグ:
<tag attribute="value"/>
要素に複数の属性を指定できる場合、スペースで区切って記述します: \<tag attribute1="value" attribute2="value" attribute3="value"... >
利用可能なタグのリストと利用モードは以下の通りです:
要素タグ | 説明 |
---|---|
<macros> </macros> | マクロファイルの開始と終了 (必須)。 |
<macro> </macro> | マクロとその属性の定義の開始と終了。 |
属性: | |
- name: メニューやコードエディターリストに表示されるマクロの名前** (必須)。 | |
- type_ahead_text: タイプアヘッド (自動補完) 機能*を使用してマクロを呼び出すために入力する文字列**。 | |
- in_menu: コンテキストメニュー*からマクロを呼び出すことを許可するかを指定するブール値。 値は "true" (デフォルト) または "false"。 | |
- type_ahead: タイプアヘッド (自動補完) 機能*を使用してマクロを呼び出すことを許可するかを指定するブール値。 値は "true" (デフォルト) または "false"。 | |
- method_event: メソッドごとの現在の処理フェーズ (作成、閉じる等) に応じてマクロの自動呼出しを実行するために使用します。 値 = "on_load": マクロはメソッドを開くたびに実行されます, "on_save": マクロはメソッドが保存されるたびに実行されます (メソッドを閉じるまたはファイル>保存コマンドを使用して保存する), "on_create": マクロはメソッドが作成されるたびに実行されます, "on_close": マクロはメソッドが閉じられるたびに実行されます。 | |
"on_save" と "on_close" は組み合わせて使用できます — 言い換えれば、これらのイベントは更新されたメソッドが閉じられるときに両方とも生成されます。 他方、"on_create" と "on_load" が連続して実行されることはありません。 この属性は、たとえばメソッド作成時にデフォルトのフォーマット (ヘッダーエリアのコメント等) を適用したり、メソッドを閉じる際にタイムスタンプを記録するために使用することができます。 | |
- version: マクロ用にテキスト選択の新しいモードを有効化するために使用します (後述の "<method> タグについ て" 参照)。 新しいモードを有効にするには "2" を指定します。 この属性を省略するか version="1" を指定すると、以前のモードが保持されます。 | |
- in_toolbar: ツールバーのマクロボタンメニューにマクロを表示するかどうかを指定するブール値。 値="true" (デフォルト) または "false"。 | |
<selection/> | マクロが挿入される時点で選択されていたテキストを使用して、タグが置換されます。 選択テキストは空の場合もあります。 |
<text> </text> | メソッドに挿入されるコードの開始と終了タグ。 コードの先頭と最後には改行が追加されます。 |
<method> </method> | プロジェクトメソッド名とその引数 (オプション) の開始と終了。 マクロが呼び出されたとき、メソッドが実行されます。 ("param1;param2;...") の形式で引数を渡せます。 この引数は、呼び出されたメソッド内で $1, $2...変数に渡されます。 このタグに関する追加情報は後述の "<method> タグについて" を参照ください。 |
<caret/> | マクロが挿入された後のコード中の挿入ポイントの場所。 |
<user_4D/> | カレント4Dユーザー名で置換されるタグ。 |
<user_os/> | カレントのシステムユーザー名で置換されるタグ。 |
<method_name/> | カレントメソッド名で置換されるタグ。 |
<method_path/> | カレントメソッドのパスシンタックス (METHOD Get path が返すものと同じ) で置換されるタグ。 |
<date/> | カレントの日付で置換されるタグ。 |
属性: | |
- format: 4D の日付フォーマット。 フォーマットが設定されていない場合、デフォルトのフォーマットが使用されます。 値 = 4Dフォーマットの数字 (0 - 8)。 | |
<time/> | カレントの時間で置換されるタグ。 |
属性: | |
- format: 4D の時間フォーマット。 フォーマットが設定されていない場合、デフォルトのフォーマットが使用されます。 値 = 4Dフォーマットの数字 (0 - 6)。 | |
<clipboard/> | クリップボードの内容で置換されるタグ。 |
属性: | |
- index: ペーストするクリップボード。 値 = クリップボード番号 (0 - 9)。 |
-
- マクロは、コードエディターのコンテキストメニューやタイプアヘッド機能を使用して呼び出すことができます (後述参照)。
- ** XML言語仕様に準拠するには、拡張文字 (アクセント文字や引用符など) を使用してはなりません。
以下はマクロ定義の例です:
マクロの内容 | コメント |
---|---|
<?xml version="1.0"...?> | XML宣言 |
<!DOCTYPE macros SYSTEM> | ドキュメント宣言 |
<macros> | マクロXMLファイルの開始 |
<macro name="RecordLoop"> | マクロ定義の開始と名前 |
<text> | マクロコードの開始 |
For($i;1;Records in selection(<Selection/> )) | <Selection/> タグは、マクロ挿入時に 4Dメソッド内で選択されているコードにより置換されます (たとえばテーブル名) |
SAVE RECORD(<Selection/> ) | |
NEXT RECORD(<Selection/> ) | |
End for | |
</text> | マクロコードの終了 |
</macro> | マクロ定義の終了 |
</macros> | マクロXMLファイルの終了 |
<method>
タグについて
<method>
タグを使用すると、4Dプロジェクトメソッドを実行するマクロコマンドを作成して使用することができます。 これにより開発者はコンポーネントにマクロコマンドを添付して配布し、洗練された機能を提供することが可能になります。 たとえば、以下のマクロはカレントのメソッド名を引数にとり、MyMethod メソッドを実行します:
<method>MyMethod("<method_name/>")</method>
呼び出されたメソッドコードは新規プロセスで実行されます。 このプロセスはメソッド実行後に消失します。
呼び出されたメソッドの実行が終了するまでストラクチャ ープロセスは停止されます。 メソッドの実行は素早く終了し、アプリケーションをブロックするリスクがないことを確認しなければなりません。 ブロックしてしまった場合には、Ctrl+F8 (Windows) または Command+F8 (macOS) でこのプロセスをアボートできます。
マクロを呼び出す
デフォルトでマクロはコードエディターのコンテキストメニューまたはツールバー、自動補完機能、またはコードエディターウィンドウ下部のマクロリストから呼び出すことができます。
各マクロごとにコンテキストメニューや自動補完機能を使用した呼び出しを禁止できる点に留意してください。
コンテキストメニューとツールバー
デフォルトでは、すべてのマクロをコードエディターのコンテキストメニュー (マクロ挿入 階層コマンド) またはツールバーの マクロ ボタンから呼び出すことができます。
<macro>
タグの in_menu 属性を使用して、マクロをこのメニューに表示するかどうかを指定できます。
コンテキストメニュー内で、マクロは "Macros.xml" ファイル (および追加の XMLファイル) に記述された順番で表示されます。 つまりファイルを編集することでこの順番を変更できます。
自動補完
デフォルトでは、すべてのマクロは自動補完 (タイプアヘッド) 機能からアクセスできます (コードエディター 参照)。 <macro>
タグの type_ahead 属性を使用して、特定のマクロをこの動作の対象から外すことができます。
注: マクロに <selection/>
タグが含まれている場合、このマクロは自動補完ポップアップウィンドウには表示されません。
コードエディターリスト
コードエディターのリストにマクロを表示させることができます (コードエディター 参照)。 リスト中でマクロをダブルクリックし、呼び出すことができます。 特定のマクロをこのリストから除外することはできません。
互換性に関する注意
マクロのサポートは 4Dのバージョ ンごとに変わることがあります。 カスタマイズされたマクロを管理しつつ、異なるバージョンの互換性を保持するために、4Dは以前のバージョンのマクロを取り除くことはしません。 最新機能を使用したい場合は、適切にバージョンを調整する必要があります。
method の選択テキスト変数
選択されたテキストは GET MACRO PARAMETER と SET MACRO PARAMETER コマンドを使用して管理することが推奨されます。 これらのコマンドを使用すると、ホストプロジェクトとコンポーネント間でテキストを相互に交換することができ、マクロの管理専用のコンポーネントを作成することができます。 マクロでこのモードを有効にするには、macro 要素内で version 属性に値 2 を指定しなければなりません。 この場合、4D は旧式の _textSel, _textReplace 等の定義済み変数を管理しなくなり、GET MACRO PARAMETER と SET MACRO PARAMETER が利用可能になります。 属性は以下のように定義します:
<macro name="MyMacro" version="2">
--- マクロテキスト ---
</macro>
この属性を指定しない場合、以前のモードが保持されます。
XML標準に関連する非互換性
マクロファイルは XML標準に準拠しなければならず、厳密なシンタックスルールが適用されます。 以前のバージョンで作成されたマクロコードの場合、これにより非互換が発生することがあり、また XMLファイルの読み込みが妨げられる可能性があります。 異常な動作が起こるのは以下のケースです:
- 以前のバージョンの 4Dでは
<macro>
要素内で "// my comment" 形式のコメントが許可されていました。これは XMLのシンタックスに適合していません。 このような行は標準の"<!-- my comment -->"
形式に書きなおさなければなりません。 - インタープロセス変数名を表す
<>
記号はエンコードされなければなりません。 たとえば、<>params
変数は<>params
と書かなければなりません。 - 以前のバージョンの 4D ではルート要素である
<macros>
を省略できました。 現在このタグは必須です。このタグがない場合、ファイルをロードできません。