注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。

Workshop モジュールを埋め込む

Workshop には、別の Workshop モジュールの埋め込みをサポートする2つの機能があります。埋め込みモジュールウィジェットと、ループセクションレイアウト(「ループレイアウト」)です。

これらの機能を使用すると、ほかの Workshop モジュール内に埋め込める Workshop モジュールを作成できます。埋め込みモジュールは Workshop が提供するすべての機能をサポートしますが、埋め込まれるモジュールと埋め込み先のモジュール間のインタラクションには、いくつかの制限があります。このドキュメントでは、別のモジュールを埋め込むモジュールを「親」モジュール、埋め込まれるモジュールを「子」モジュールと呼ぶことがあります。このドキュメントで「埋め込みモジュール」と記載している場合、特に明記しない限り、埋め込みモジュールウィジェットと、ループレイアウトに埋め込まれるモジュールの両方を指します。

ユースケース

埋め込みモジュールには、次のようなユースケースがあります。

多くのモジュール間での再利用

埋め込みモジュールを使用すると、単一の子モジュールを設定し、多くの親モジュールで再利用できます。作成できる埋め込みモジュールの種類には、次のような例があります。

  • 設定済みの Object View
  • 複雑な設定を持つ単一のウィジェット
  • 複雑な変数ロジックを元にしたウィジェット群
  • ウィジェットをまったく持たない複雑な変数ロジック

単一モジュール内での再利用

埋め込みモジュールは、ループレイアウト(オブジェクトセットと配列の両方をサポート)または個別の埋め込みモジュールウィジェットを使用して、単一の親モジュール内で何度も使用できます。同じ親モジュール内に何度も埋め込む子モジュールには、次のような例があります。

  • 指定された変数から生成されるカスタムカード表示
  • タブまたはページごとに1回表示されるウィジェット群

保守性

埋め込みモジュールを使用して、大きな親モジュールを多くの子モジュールに分割することで、保守性を向上できます。これにより、子モジュールごとに独自の変数スコープを持たせることができ、異なる Workshop 作成者が子モジュールを同時に編集できます。

Marketplace でのカスタマイズ

Marketplace で Workshop モジュールをパッケージ化する際、埋め込みモジュールを使用して、カスタマイズ可能な領域を提供できます。埋め込まれる子モジュールは依存関係としてパッケージ化されます。インストール時に、Marketplace ユーザーは、モジュールインターフェース変数の型シグネチャが同じモジュールを選択し、インストールした親モジュールの一部をカスタマイズできます。

Workshop モジュールのリソースを変更せずに実装を置き換える

埋め込みモジュールを使用すると、ユーザーがすでに使用している Workshop リソースを変更せずに、新しい Workshop モジュールの実装をデプロイできます。これを行うには、モジュール内の唯一のウィジェットとして埋め込みモジュールを使用します。これにより、ユーザーに新しい Workshop リソースへの移行を求めることなく、モジュールに大きな変更を加えられます。

埋め込みモジュール間の通信

親モジュールと子モジュール間、または兄弟モジュール間で通信するには、モジュールインターフェース変数を使用します。たとえば、これらの共有インターフェース変数を、選択されたオブジェクト、選択されたタブ、オーバーレイが表示されているかどうかといった共有状態の元として使用できます。Workshop は、マッピングされたこれらのインターフェース変数の元として常に親モジュールの変数定義を使用し、埋め込みモジュールのインターフェース変数定義を無視します。この動作の詳細は、埋め込みモジュールのインターフェース設定で説明しています。埋め込みモジュールはイベントを通じてインターフェース変数の値を変更でき、これにより、これらの変数を参照するほかの箇所が更新された値に応じて動作できます。

ただし、子モジュール内で更新された変数は、親モジュールに自動的には伝播しません。子モジュールでの変更を親モジュールの変数に反映するには、モジュールインターフェースを通じて親モジュールの変数を対象とする「変数を設定」イベントを、子モジュール内で明示的に設定する必要があります。

埋め込まれた子モジュールを編集モードで開くと(たとえば、埋め込みモジュールウィジェットまたはループインスタンスから参照先モジュールを開くを選択した場合)、マッピングされたモジュールインターフェース変数の現在の値が適用された状態で、子モジュールのエディターが開きます。これは表示モードの動作と同じであり、親モジュールに存在する状態と同じ状態で、埋め込みモジュールをデバッグしやすくなります。

制限事項

子モジュールのモジュール設定は継承されない

ルーティング、状態の保存、自動更新など、子モジュールのモジュールレベルの設定は使用されません。つまり、自動更新を使用するすべてのモジュールで自動更新を明示的に設定する必要があり、埋め込みモジュールのコンテキスト内では自動更新は機能しません。自動更新しない親モジュール内に自動更新するモジュールを埋め込むには、iFrame ウィジェットを使用して、自動更新するサンドボックス環境として動作する別のモジュールを埋め込めます。URL クエリパラメーター embedded=true を設定すると、Foundry のサイドバーを非表示にできます。

ワークフローで必要な場合は、親モジュールレベルでこれらを設定し、モジュールインターフェースを通じて子モジュールに変数を渡せます。

イベントの受け渡し

埋め込みモジュールは、イベントの受け渡しという概念をサポートしていません。イベントの受け渡しとは、作成者が親モジュールから子モジュールにイベント設定を渡すことで、子モジュールが親モジュールの設定を参照するイベントを呼び出せるようにするものです(たとえば、子モジュールが親モジュール内のオーバーレイを開くイベントを呼び出す場合です)。

埋め込みモジュール間で通信するために、親モジュールは、レイアウトの状態の元となる変数を子モジュールのモジュールインターフェース変数に渡すことができます。これにより、子モジュールが親モジュールのレイアウトの状態を変更できます。

マップテンプレートでの派生プロパティ

子モジュールが埋め込まれると、埋め込みモジュール間での競合を避けるため、派生プロパティはプレフィックス付きの ID で親モジュールに再登録されます。通常のウィジェットは、設定がウィジェット定義に直接保存され、ID 置換ロジックで処理されるため、正しく機能します。ただし、マップウィジェットの設定は、元の派生プロパティIDを参照し続けるテンプレートとして保存されます。その結果、派生プロパティがテーブルなどのウィジェットには表示されても、親モジュールのマップのホバーカードには表示されないことがあります。

この制限を回避するには、埋め込みモジュールでの登録に依存するのではなく、派生プロパティを親モジュールに直接コピーします。これにより元の ID が保持され、マップテンプレートが参照する ID と親モジュールに登録された ID が一致します。

埋め込みモジュールの来歴

Workshop のほかの「Foundry アプリ」ウィジェットと同様に、ほかの Workshop モジュールで使用される埋め込みモジュールの来歴は、Data Lineage では報告されません。

自己参照する埋め込みモジュール

デフォルトでは、モジュールは、直接、または子モジュールの連鎖を通じて自身を埋め込むことはできません。この機能を有効にせずに自己参照を設定すると、埋め込みモジュールが無限に連鎖する可能性を防ぐため、モジュールは作成者に警告を表示し、閲覧者には何も表示しません。

自己参照する埋め込みモジュールを有効にする際は、十分に注意してください。無効な階層や循環参照により、無限再帰が発生し、モジュールが使用できなくなる可能性があります。

埋め込みモジュールの権限

埋め込みモジュールは、独自の権限設定を持つ個別のリソースです。子モジュールを埋め込んだ親モジュールを閲覧する権限があっても、その子モジュールを閲覧する権限がない場合、ユーザーには「モジュールを読み込めませんでした」というエラーが表示されます。

パフォーマンス

埋め込みモジュールは、通常の Workshop モジュールと同様のパフォーマンス特性を持つはずです。特筆すべき違いは、埋め込みモジュールの初期化が、そのモジュールが画面に表示されるまで遅延されることです。初期化されると、埋め込みモジュールは、モジュール全体が同じ場所で設定されている場合と同様に動作することが期待されます。

埋め込みモジュールは初回の表示後に遅延読み込みされるため、通常、親モジュールの初回読み込み時間が短縮されます。ただし、埋め込みが複数の階層にわたり、そのすべてが初期ページに表示される場合、各階層を順番に読み込む必要がある「ウォーターフォール」効果により、初回の読み込みが遅くなることがあります。読み込み時間を最適化するには、大きなモジュールを分割し、最初は表示されない部分を埋め込みモジュールに分けることを検討します。

子モジュールの設定はインスタンスごとに1回初期化され、その変数の初期化にコストがかかります。ただし、多くのインスタンスで再利用する場合でも、子モジュールの設定を読み込む必要があるのは1回だけです。

複数の埋め込みモジュールを含む親モジュールを編集する際は、埋め込みモジュールの各タブを開かないようにしてください。開くと、その後の編集セッション全体でパフォーマンスが低下するためです。特定の埋め込みモジュールを確認または変更する必要がある場合は、親モジュールのエディター経由ではなく、直接開くことを検討します。

埋め込みモジュールとループレイアウトを使用すると、作成者は非常に大規模で複雑なモジュールをはるかに簡単に設定できます。作成者は、同時に表示されるウィジェットと変数の総数、特に読み込みコストが高いものの数に留意してください。

モバイルモード

モジュールがモバイルモードの場合、埋め込みモジュールウィジェットとループレイアウトに埋め込めるのは、ほかのモバイルモジュールのみです。