コンポーネントは4D データベースの形で構成されるので、コンポーネントの開発はデータベースへの機能実装と同じです。しかしながら、コンポーネントの持つ性質のため、制限や特別なルールがあります。
コンポーネントはプロジェクトメソッド, プロジェクトフォーム, メニューバー, 選択リスト, ライブラリピクチャーなど、4D のほとんどのオブジェクトを呼ぶことができます。
以下のオブジェクトのみ、コンポーネントで使用することはできません:
- 標準のテーブルとフィールド (しかし外部データベースのテーブルやフィールドを作成し利用することはできます)
- テーブルフォームとそのフォームメソッド ( 他方コンポーネントはホストデータベースのテーブルフォームを呼び出すことはできます)
- ユーザーフォーム
- データベースメソッドとトリガー
マトリクスデータベースにこれらの要素が含まれている場合でも、それらを削除する必要はありません。利用できないオブジェクトは単に無視されます。
注: マトリクスデータベースに設定されたユーザー&グループやアクセス権は、ホストデータベースでは無視されます。
コンポーネント側で" 共有" されているプロジェクトメソッドのみがホストデータベースのデザインモードに表示され、選択することができます。他方、ホストデータベース側で" 共有" されているプロジェクトメソッドをコンポーネントから呼ぶことが可能です。詳細はプロジェクト メソッドの共有を参照してください。
コンポーネントから公開されたフォームは、ホストデータベースのサブフォームとして組み込むことが可能です。この点の詳細はフォームの共有を参照してください。
他のコンポーネントオブジェクト (公開されていないプロジェクトフォーム、選択リスト、メニュー等) はコンポーネント内で使用することはできますが、ホストデータベースからストラクチャーオブジェクトとしてアクセスすることはできません。特定のオブジェクトはホストデータベースとコンポーネント間で共有され、その他のオブジェクトは共有されません。詳細は共有及び非共有オブジェクトを参照してください。
コンポーネントは4D アプリケーション又はホストデータベースにインストールされたプラグインを使用することができます。コンポーネントフォルダにプラグインをインストールすることはできません。
マトリクスデータベースのデータベースメソッドや、一般設定 (Web フォルダ, 環境設定, その他) は一切参照されません。
ON ERR CALLコマンドによって実装されたエラー管理メソッドは、実行中のデータベースに対してのみ適用されます。コンポーネントによって生成されたエラーの場合、ホストデータベースのON ERR CALLエラー管理メソッドは呼び出されず、その逆もまた然りです。
コンポーネントはマトリクスデータベースのストラクチャーで定義されたテーブルやフィールドを使用することはできません。しかし外部データベースを作成し、そのテーブルやフィールドを必要に応じ利用することはできます。外部データベースの作成と管理はSQLを使用して行います。外部データベースは4Dデータベースで、主たる4Dデータベースからは独立していますが、主たる4Dデータベースから操作が可能です。外部データベースの利用は、一時的にそのデータベースをカレントデータベースにすることです。言い換えれば4Dが実行するSQLクエリのターゲットデータベースを切り替えます。外部データベースの作成はSQLのCREATE DATABASEコマンドを使用します。
外部データベースに関する詳細はエクスターナルデータベースについてを参照してください。
以下のコードはコンポーネントに実装されていて、外部データベースに対して3つの基本的なアクションを行います:
- 外部データベースを作成します (まだ存在しなければ)。
- 外部データベースにデータを追加します。
- 外部データベースからデータを読み込みます。
外部データベースの作成:
<>MyDatabase:=Get 4D folder+"\MyDB"
Begin SQL
CREATE DATABASE IF NOT EXISTS DATAFILE :[<>MyDatabase];
USE DATABASE DATAFILE :[<>MyDatabase];
CREATE TABLE IF NOT EXISTS KEEPIT
(
ID INT32 PRIMARY KEY,
kind VARCHAR,
name VARCHAR,
code TEXT,
sort_order INT32
);
CREATE UNIQUE INDEX id_index ON KEEPIT (ID);
USE DATABASE SQL_INTERNAL;
End SQL
外部データベースへのデータ書き込み:
$Ptr_1:=$2
$Ptr_2:=$3
$Ptr_3:=$4
$Ptr_4:=$5
$Ptr_5:=$6
Begin SQL
USE DATABASE DATAFILE :[<>MyDatabase];
INSERT INTO KEEPIT
(ID, kind, name, code, sort_order)
VALUES
(:[$Ptr_1], :[$Ptr_2], :[$Ptr_3], :[$Ptr_4], :[$Ptr_5]);
USE DATABASE SQL_INTERNAL;
End SQL
外部データベースからデータを読み込み:
$Ptr_1:=$2
$Ptr_2:=$3
$Ptr_3:=$4
$Ptr_4:=$5
$Ptr_5:=$6
Begin SQL
USE DATABASE DATAFILE :[<>MyDatabase];
SELECT ALL ID, kind, name, code, sort_order
FROM KEEPIT
INTO :$Ptr_1, :$Ptr_2, :$Ptr_3, :$Ptr_4, :$Ptr_5;
USE DATABASE SQL_INTERNAL;
End SQL
コンポーネントはリソースを使用することができます (" 伝統的な"MacOS リソースやXLIFF タイプのファイル)。
新しいリソース管理の原則に従い (データベースアーキテクチャー参照)、コンポーネントのリソースファイルは、コンポーネントの.4db や.4dc ファイルと同階層のResources フォルダーに置かれなければなりません。コンポーネントが.4dbase 形式の場合 ( 推奨されるアーキテクチャー)、Resources フォルダは .4dbase フォルダーの中に置かれます。
自動メカニズムが有効となり、コンポーネントのResources フォルダー内で見つかったXLIFF ファイルは、 このコンポーネントによってロードされます。( 互換性のため) コンポーネントは、.4db や.4dc と同階層にある.rsr ファイルに格納された" 伝統的な" Mac OS リソースも自動的に使用します。Resources フォルダに置かれた" 伝統的な" リソースファイルはリソーステーマのコマンドを使用して、明示的にコンポーネントにロードしなければなりません。
1 つ以上のコンポーネントを含むホストデータベースでは、ホストデータベースと同様それぞれのコンポーネントが固有のリソースチェーンを持っています。リソースは異なるデータベース間で分離されます。 コンポーネントA のリソースにコンポーネントB やホストデータベースからアクセスすることはできません (共有及び非共有オブジェクト参照)。
コンポーネントにオンラインヘルプを追加できるようにするために、特別なメカニズムが実装されました。原理は4D データベースに提供されているものと同じです (付録 A: カスタムヘルプファイルを割り当てる参照) :
- コンポーネントヘルプは拡張子が.htm, .html または (Windows のみ) .chm で提供される。
- ヘルプファイルはコンポーネントのストラクチャファイルと同階層に置かれ、ストラクチャーと同じ名前である。
- 結果、このファイルは自動でアプリケーションのヘルプメニューに、" ヘルプ:ヘルプファイル名" のタイトルでロードされます。