4D v16.3コンポーネントとホストデータベースの相互作用 |
||
|
4D v16.3
コンポーネントとホストデータベースの相互作用
コンポーネントとホストデータベースの相互作用
ホストデータベースにコンポーネントがインストールされると、ホストデータベースのエキスプローラーのメソッドページ内、コンポーネントメソッドテーマにコンポーネント名が表示されます。共有プロジェクトメソッドが階層リストとして表示され、コンポーネントがインタプリターであれば、プリビューエリアに内容が表示されます。 共有メソッドの宣言についてはプロジェクト メソッドの共有を参照してください。 コンポーネントで定義される特定のタイプのオブジェクトは、自身の実行空間で展開されます。これによりホストデータベースや他のコンポーネントのオブジェクトとのコンフリクトの可能性を取り除いています。これらのオブジェクトは" 非共有または" 分割された" オブジェクトと呼びます。例えば変数は分割されたオブジェクトであり、あるコンポーネントにおける倍長整数タイプの<>Myvar 変数と、ホストデータベースや他のコンポーネントで使用されるテキストタイプの<>Myvar 変数とを同時に使用することができます。 他方のオブジェクトはホストデータベースとコンポーネントで同じ実行空間を共有します。これらのオブジェクトを使用する際にはより注意が必要となりますが、他方ホストデータベースとコンポーネント間で通信を行うことが可能です。これらのオブジェクトは" 共有" または" 分割されない" オブジェクトと呼ばれます。 例えばセットは分割されないオブジェクトであり、コンポーネントが作成した"mySet" を、ホストデータベースで実行される以下のコードで消去することが可能です: CLEAR SET("mySet") 以下は非共有(分割された) オブジェクトです:
以下は共有( 分割されない) オブジェクトです:
注: もちろん、マトリクスデータベース内で見つかった利用できないオブジェクトは、ホストデータベース側で無視されます (利用可能又は利用不可能なオブジェクト参照)。 マトリクスデータベースのすべてのプロジェクトメソッドは 、コンポーネントに含まれます。つまり、マトリクスデータベースのプロジェクトメソッドは、すべて自身のコンポーネントから呼び出して実行することができます。 他方、デフォルトで、これらのプロジェクトメソッドはホストデータベースに表示されず、呼び出すこともできません。ホストデータベースでもプロジェクトメソッドを共有するためには、 マトリクスデータベース側でそのメソッドを共有されるよう設定しなければなりません。設定することで、それらのプロジェクトメソッドはホストデータベースのエクスプローラのメソッドページに表示され、呼び出すことができるようになります ( しかしホストデータベースのメソッドエディタで編集することはできません)。これらのメソッドはコンポーネントのエントリーポイントとなります。 セキュリティのため、デフォルトでコンポーネントはホストデータベースのプロジェクトメソッドを実行することはできません。特定のケースで、コンポーネントがホストデータベースのプロジェクトメソッドにアクセスできるようにする必要があるかもしれません。そうするためには、ホストデータベースのプロジェクトメソッドで、コンポーネントからのアクセスを可能にするよう明示的に指定しなければなりません。 これはメソッドプロパティダイアログボックスの、コンポーネントとホストデータベースで共有するで設定します: メソッド属性の一括設定ダイアログを使用して、複数のメソッドに対し一気にこの属性を設定することもできます (属性一括設定参照) このオプションの効果は、データベースがどのように使用されるかにより異なります: データベースがコンポーネントとして利用される場合、メソッドはホストデータベースからアクセス可能で、エクスプローラで見ることができます。データベースがホストデータベースの場合、メソッドはコンポーネントから利用可能です。 マトリクスデータベースのフォームを共有し、ホストデータベース中でサブフォームとして利用できます。 コンポーネント側 (マトリクスデータベース側) で、プロジェクトフォームのみを公開設定できます。 ホストデータベース中でサブフォームとしてコンポーネントフォームを選択するためには、フォームプロパティダイアログボックス内で明示的に公開フォームとして定義しなければなりません。: 注: このダイアログボックスはコンテキストメニューまたはエクスプローラーのフォームアクションメニュー内、フォームプロパティ...からアクセスできます (フォームプロパティ (エクスプローラー)参照)。 サブフォームとホストデータベースの親フォーム間の相互作用は開発者が管理します。このメカニズムについてはページサブフォームで説明しています。 ホストデータベース側ではコンポーネント由来のサブフォームをページモードで利用しなければなりません。フォームエディターで親フォームを開きサブフォームオブジェクトを選択したら、プロパティリストのサブフォームテーマから出力サブフォームの選択を解除します。 そしてテーブルメニューから<なし>を選択します。するとコンポーネントから公開されたフォームが詳細フォームメニューにリストされます。フォーム名の後ろには括弧内にコンポーネント名が現れます。このリストからサブフォームとして使用するコンポーネントフォームを選択します。 すると選択されたフォームの新しいインスタンスが即座にフォーム中に作成されます。 ローカル、プロセス、インタープロセス変数は、コンポーネントとホストデータベース間で共有されません。ホストデータベースからコンポーネントの変数、またはその逆の変数にアクセスする唯一の方法はポインターを使用することです。 配列を使用した例:
変数を使用した例: C_TEXT(myvariable) ホストデータベースとコンポーネント間でポインターを使用して通信を行うには、以下の点を考慮する必要があります:
コンポーネントでテーブルを使用することはできませんが、以下のコマンドをコンポーネントの中で呼び出すことはできます: DEFAULT TABLE 実際、コンポーネントがホストデータベースのテーブルを使用する必要がある場合に、これらのコマンドはとても便利です。この方法で、ホストデータベースとコンポーネントはポインターを使用して通信を行うことができます。例えば、以下はコンポーネントで実行可能なメソッドです: C_LONGINT($1) //ホストデータベースのテーブル番号 使用できないコマンドを除き、コンポーネントではすべての4D ランゲージコマンドが使用できます。 コマンドがコンポーネントから呼ばれると、コマンドはコンポーネントのコンテキストで実行されます。ただし EXECUTE METHODコマンドは除きます。このコマンドはコマンドで指定されたメソッドのコンテキストを使用します。またユーザ&グループテーマの読み出しコマンドをコンポーネントで使用することができますが、ホストデータベースのユーザ&グループ情報を読み出すことに注意してください ( コンポーネントに固有のユーザ&グループはありません)。 SET DATABASE PARAMETERとGet database parameterコマンドは例外となります: これらのコマンドのスコープはグローバルです。 これらのコマンドがコンポーネントから呼び出されると、結果はホストデータベースに適用されます。 さらにStructure fileとGet 4D folderコマンドは、コンポーネントで使用できるように変更が行われています。 COMPONENT LISTコマンドを使用して、ホストデータベースにロードされたコンポーネントのリストを取得できます。 コンパイルされていないコンポーネントを使用すると、コードの内容がホストデータベースの標準デバッガーに表示されます。 デバッガーは分割されたオブジェクトの実行空間を考慮します。カスタムウォッチペインでホストデータベースの変数var1 の値を表示し、同じくvar1 変数を含むコンポーネントのコードを実行しても、表示される値は更新されません。カレントコンテキストの変数値を表示させるためには、変数のインスタンスを別にカスタムウォッチペインに登録しなければなりません。
|
プロパティ
プロダクト: 4D
履歴
ARTICLE USAGE
デザインリファレンス ( 4D v16) |