4D v16.3

マクロの作成と利用

ホーム

 
4D v16.3
マクロの作成と利用

マクロの作成と利用  


 

 

メソッド内でマクロコマンドを利用することができます。マクロを利用すればメソッドの入力にかかる時間を大幅に短縮することができます。

マクロコマンドは4Dコードのパーツで、どのデータベースが開かれているかにかかわらず、あらゆるメソッドのどんな場所にでも挿入することができます。マクロにはすべてのタイプの4Dテキスト、コマンド、定数、さらにマクロ実行時のメソッドコンテキストにより値が置換される特別なタグを記述することができます。例えばマクロに<method_name/>というタグを記述しておくと、このタグはマクロ挿入時にカレンとのプロジェクトメソッド名に置換されます。

マクロは複数のXMLフォーマットのテキストファイルに格納されます。マクロはメソッドエディターリスト、またはエディター内のコンテキストメニュー、さらに自動補完機能から呼び出すことが可能です。

4DマクロはXMLフォーマットで記述されます。4Dが提供するマクロファイルをそのまま使用することも、変更することもできます。

4Dは“Macros v2”という名前のフォルダーからマクロをロードします。マクロはXMLファイルとしてこのフォルダーに配置しなければなりません。マクロファイルはフォルダー内に複数置くことができます。

“Macros v2”フォルダーは以下の場所に配置できます:

  • マシンのアクティブな4Dフォルダー。マクロはすべてのデータベースで共有されます。
    注: アクティブな4Dフォルダーの位置はOSにより異なります。詳細は4DランゲージリファレンスマニュアルのGet 4D folderコマンドの説明を参照してください。
  • データベースストラクチャーファイルと同階層。マクロはこのストラクチャーにのみロードされます。
  • コンポーネントの場合: コンポーネントのストラクチャーと同階層。この場合マクロはコンポーネントがインストールされている場合のみ利用できます。

これら3つの場所は同時に利用可能です。各場所に“Macros v2”フォルダーをインストールできます。マクロは以下の順番でロードされます: 4Dフォルダー、ストラクチャーファイル、コンポーネント。

4Dはデフォルトのマクロを提供しています。このマクロは4Dを最初に起動する際に、マシンのアクティブな4Dフォルダー内の“Macros v2”フォルダーに、“Macros.xml”という名前で作成されるXMLファイル内に含まれます。

このファイルを変更することができます。またフォルダー内に別のマクロファイルを追加することもできます。このフォルダーに問題が発生した場合は、フォルダーを削除することで次回の4D起動時に新たに作成されます。

標準のテキストエディターやプログラムを使用して、“Macros.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
  • Mac OS: :Contents:Resources:DTD:macros.dtd

マクロファイルに宣言文が含まれない場合や検証に失敗する場合、マクロはロードされません。

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/>カレントプロジェクトメソッドのフルパス名で置換されるタグ。
<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>タグを使用すると、4Dプロジェクトメソッドを実行するマクロコマンドを作成して使用することができます。これにより開発者はコンポーネントにマクロコマンドを添付して配布し、洗練された機能を提供することが可能になります。例えば以下のマクロはカレントのメソッド名を引数にとり、MyMethod メソッドを実行します:

<method>MyMethod("<method_name/>")</method>

呼び出されたメソッドコードは新規プロセスで実行されます。このプロセスはメソッド実行後に消失します。

注: 呼び出されたメソッドの実行が終了するまでストラクチャープロセスは停止されます。メソッドの実行は素早く終了し、アプリケーションをブロックするリスクがないことを確認しなければなりません。ブロックが発生してしまった場合、Ctrl+F8 (Windows) または Command+F8 (Mac OS) でこのプロセスをアボートできます。

デフォルトでマクロはコンテキストメニュー、メソッドエディターのツールバー、自動補完機能、またはメソッドエディターウィンドウ下部のマクロリストから呼び出すことができます。

各マクロごとにコンテキストメニューや自動補完機能を使用した呼び出しを禁止することができる点に留意してください。

デフォルトですべてのマクロはメソッドエディターのコンテキストメニュー (マクロ挿入階層コマンド) またはツールバーのマクロボタンから呼び出すことができます。

<macro>タグのin_menu属性を使用して、マクロをこのメニューに表示させるかどうかを指定できます。

コンテキストメニュー内で、マクロは“Macros.xml”ファイルに記述された順番で表示されます。つまりファイルを編集することでこの順番を変更できます。

デフォルトですべてのマクロは自動補完 (タイプアヘッド) 機能からアクセスできます (メソッドを記述する参照)。<macro>タグのtype_ahead属性を使用して、特定のマクロをこの動作の対象から外すことができます。

注: マクロに<selection/>タグが含まれている場合、このマクロは自動補完ポップアップウィンドウには表示されません。

メソッドエディターのリストにマクロを表示させることができます (メソッドを記述する参照)。リスト中でマクロをダブルクリックし、呼び出すことができます。特定のマクロをこのリストから呼び出すことができます。

マクロのサポートは4Dのバージョンごとに変わることがあります。カスタマイズされたマクロを管理しつつ、異なるバージョンの互換性を保持するために、4Dは以前のバージョンのマクロを取り除くことはしません。利用可能な最新の機能を使用したい場合は、それをあなたのバージョンに適用する必要があります。

v11より前のバージョンの4Dでは、<method>タグを使用する際、メソッド中でテキストを操作するための一連のプロセス変数が自動で管理されていました: 入力変数 (_textSel, _blobSel, _selLen, _textMethod, _blobMethod, _methodLen) を使用してテキストを取り出し、出力変数 (_textReplace, _blobReplace, _action) を使用してテキストを挿入しました。互換性のためこのメカニズムはまだサポートされています。しかしバージョン11からは以下の理由で廃止予定リストに置かれています:

  • 32,000文字以上のテキストを扱うためにBLOB変数を使用する必要性がなくなった。
  • 変数管理の方法が、変数の実行空間が区分けされるv11のアーキテクチャーと互換性がない。バージョン11のコンポーネントやホストデータベースは互いのメソッドの変数にアクセスできません。

ゆえに、選択されたテキストはGET MACRO PARAMETERSET MACRO PARAMETERコマンドを使用して管理することが推奨されます。これらのコマンドを使用すればホストデータベースとコンポーネント間でテキストを相互に交換することができ、マクロを管理するためのコンポーネントを作成することができます。マクロでこのモードを有効にするには、macro要素内でversion属性に値"2"を指定しなければなりません。この場合、4Dは_textSel, _textReplace等の定義済み変数を管理しなくなり、GET MACRO PARAMETERSET MACRO PARAMETERが利用可能になります。属性は以下のように定義します:

<macro name="MyMacro" version="2">
--- マクロテキスト ---
</macro>

この属性を指定しない場合、以前のモードが保持されます。

4D v11より、マクロファイルはXML標準に準拠しなければならず、厳密なシンタックスルールが適用されるようになりました。これにより以前のバージョンで作成されたマクロコードに非互換が発生することがあり、またXMLファイルがロードできなくなることがあります。異常な動作が起こるのは以下のケースです:

  • 以前のバージョンの4Dでは<macro>要素内で“// my comment”タイプのコメントが許可されていました。これはXMLのシンタックスに適合していません。このような行は標準の“<!-- my comment -->”形式で書きなおさなければなりません。
  • インタープロセス変数名を表す<>記号はエンコードされなければなりません。例えば<>params変数は&lt;&gt;paramsと書かなければなりません。
  • 以前のバージョンの4Dではルート要素である<macros>を省略できました。現在このタグは必須です。このタグがない場合、ファイルをロードできません。

4Dバージョン12では、SQLコマンドの利用を容易にするための新しいマクロコマンドを利用できます。"Macros.xml"ファイルは開発者がカスタマイズ可能なため、新しいバージョンの4Dをインストールしても自動では既存のファイルを更新しません。4D v12の新しいSQLマクロコマンドを使用するためには以下のいずれかの作業を行います:

  • "Macros v2"フォルダー内の"Macros.xml"ファイルを削除 (ファイルをカスタマイズしていない場合) して、4Dを起動し新しいファイルを作成させる。
  • "Macros v2"フォルダー内の"Macros.xml"に手作業でで新しいマクロを追加する (ファイルをカスタマイズしている場合)。新しいテンプレートファイルは4Dアプリケーションフォルダーの4D\Resources\ja.lprojにあります。



参照 

メソッドを記述する

 
プロパティ 

プロダクト: 4D
テーマ: メソッドの編集

 
履歴 

 
ARTICLE USAGE

デザインリファレンス ( 4D v16)
デザインリファレンス ( 4D v16.1)
デザインリファレンス ( 4D v16.3)