4D v16.3

コンポーネントの開発

ホーム

 
4D v16.3
コンポーネントの開発

コンポーネントの開発  


 

 

コンポーネントは4D データベースの形で構成されるので、コンポーネントの開発はデータベースへの機能実装と同じです。しかしながら、コンポーネントの持つ性質のため、制限や特別なルールがあります。

コンポーネントはプロジェクトメソッド, プロジェクトフォーム, メニューバー, 選択リスト, ライブラリピクチャーなど、4D のほとんどのオブジェクトを呼ぶことができます。

以下のオブジェクトのみ、コンポーネントで使用することはできません:

  • 標準のテーブルとフィールド (しかし外部データベースのテーブルやフィールドを作成し利用することはできます)
  • テーブルフォームとそのフォームメソッド ( 他方コンポーネントはホストデータベースのテーブルフォームを呼び出すことはできます)
  • ユーザーフォーム
  • データベースメソッドとトリガー

マトリクスデータベースにこれらの要素が含まれている場合でも、それらを削除する必要はありません。利用できないオブジェクトは単に無視されます。

注: マトリクスデータベースに設定されたユーザー&グループやアクセス権は、ホストデータベースでは無視されます。

コンポーネント側で" 共有" されているプロジェクトメソッドのみがホストデータベースのデザインモードに表示され、選択することができます。他方、ホストデータベース側で" 共有" されているプロジェクトメソッドをコンポーネントから呼ぶことが可能です。詳細はプロジェクト メソッドの共有を参照してください。

コンポーネントから公開されたフォームは、ホストデータベースのサブフォームとして組み込むことが可能です。この点の詳細はフォームの共有を参照してください。

他のコンポーネントオブジェクト (公開されていないプロジェクトフォーム、選択リスト、メニュー等) はコンポーネント内で使用することはできますが、ホストデータベースからストラクチャーオブジェクトとしてアクセスすることはできません。特定のオブジェクトはホストデータベースとコンポーネント間で共有され、その他のオブジェクトは共有されません。詳細は共有及び非共有オブジェクトを参照してください。

コンポーネントは4D アプリケーション又はホストデータベースにインストールされたプラグインを使用することができます。コンポーネントフォルダにプラグインをインストールすることはできません。

マトリクスデータベースのデータベースメソッドや、一般設定 (Web フォルダ, 環境設定, その他) は一切参照されません。

(読み込みのみで開かれるため) ストラクチャーファイルを更新する以下のコマンドをコンポーネントで使用することはできません。コンポーネント中で以下のコマンドを実行すると-10511, "CommandName コマンドをコンポーネントでコールすることはできません" のエラーが生成されます

ON EVENT CALL
Method called on event
SET PICTURE TO LIBRARY
REMOVE PICTURE FROM LIBRARY
SAVE LIST
ARRAY TO LIST
EDIT FORM
CREATE USER FORM
DELETE USER FORM
CHANGE PASSWORD
EDIT ACCESS
Set group properties
Set user properties
DELETE USER
CHANGE LICENSES
BLOB TO USERS
SET PLUGIN ACCESS

注:

  • Current form tableコマンドは、プロジェクトフォームのコンテキストで呼び出されるとNil を返します。ゆえにこのコマンドをコンポーネントで使用することはできません
  • SQLデータ定義言語のコマンド (CREATE TABLEDROP TABLE等) をコンポーネントのフレームワークで使用することはできません。

ON ERR CALLコマンドによって実装されたエラー管理メソッドは、実行中のデータベースに対してのみ適用されます。コンポーネントによって生成されたエラーの場合、ホストデータベースのON ERR CALLエラー管理メソッドは呼び出されず、その逆もまた然りです。

  • 特定のテーブルに属さない" プロジェクトフォーム" のみが、コンポーネントで利用できます。マトリクスデータベースのすべてのプロジェクトフォームをコンポーネントで使用することができます。
  • コンポーネントはホストデータベースのテーブルフォームを使用できます。この場合、コンポーネントのコードでフォームを指定する際に、テーブル名ではなく、テーブルへのポインターを使用しなければならないことに注意してください。
    注:
    コンポーネントはADD RECORDコマンドを使用すると、ホストデータベースのコンテキストで、ホストデータベースのカレントの入力フォームが表示されます。フォーム上に変数が配置されている場合、コンポーネントはその変数にアクセスできません (コンポーネントとホストデータベースの相互作用参照)。
  • コンポーネントフォームをホストデータベースに対してサブフォームとして公開できます。これは特にグラフィックオブジェクトを提供するコンポーネントを開発できることを意味します。例えば4D社が提供するウィジェットはコンポーネント内でのサブフォームの利用に基づいています。この点についてはフォームの共有で説明しています。

コンポーネントはマトリクスデータベースのストラクチャーで定義されたテーブルやフィールドを使用することはできません。しかし外部データベースを作成し、そのテーブルやフィールドを必要に応じ利用することはできます。外部データベースの作成と管理は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 で提供される。
  • ヘルプファイルはコンポーネントのストラクチャファイルと同階層に置かれ、ストラクチャーと同じ名前である。
  • 結果、このファイルは自動でアプリケーションのヘルプメニューに、" ヘルプ:ヘルプファイル名" のタイトルでロードされます。

 
プロパティ 

プロダクト: 4D
テーマ: 4Dコンポーネントの開発とインストール

 
履歴 

 
ARTICLE USAGE

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