トリガーの設定
コンポーネントには、他のコンポーネント内のアクションを実行するトリガーを含めることができます。 コンポーネントによって発生させるトリガーを登録する必要があります。
コンポーネントによって、トリガーのためにペイロードが提供されます。それは、トリガー発生時に実行されるアクションに渡されます。 各トリガーについて、実行されるアクションを選択できます。 連携するよう構築されたコンポーネントでは、ユーザーによる操作なしでアクションが実行されるよう、自動的にトリガーを発生させることができます。
トリガーの登録
カスタム・コンポーネントの場合、トリガーは、コンポーネントの登録データの一部として登録されます。 トリガーを追加するには、コンポーネントがサポートする各トリガーで"triggers"
プロパティ配列を更新します。 また、ペイロード内の値をアクションでサポートされているプロパティにマップ可能になるようにユーザー・インタフェースを作成できるよう、トリガーでサポートされているペイロードを指定する必要があります。
-
appinfo.json
ファイルを編集し、"triggers":[],
エントリを確認します:"triggers": [{ "triggerName": "helloWorldWhoAreYou", "triggerDescription": "Show Who I Am", "triggerPayload": [{ "name": "whoAreYou", "displayName": "Who I Am" }] }],
-
ファイルをサイト・サーバーに同期化します。
このトリガー・エントリの例では、triggerName
( "helloWorldWhoAreYou"
)を定義しました。 名前値は一意である必要があります。 次に、トリガーに説明("Show Who I Am"
)を指定しました。この説明は、トリガーを表示するためにユーザー・インタフェース・ダイアログで使用されます。 最後に、トリガーに対して単一値のペイロードを定義しました。ユーザーは、このペイロード内のエントリを選択し、それらをアクション内のフィールドにマップできます。
トリガーが登録されたら、コンポーネントの「設定」パネルの「リンク」タブに移動したときにトリガーを表示して選択できるようになります。
トリガーの生成
トリガーは、コンポーネントによって任意の時点で発生させることができます。 通常、トリガーは、ボタンのクリックや表内の行の選択など、ユーザーによる操作で発生します。 REST APIコールが原因でデータが変更された場合など、コンポーネントが任意の基準に基づいてトリガーを呼び出すことができます。 トリガー発生時には、アクションをいくつでも実行できます。
-
render.js
ファイルを編集し、Sites SDKをコールしてトリガーを発生させるviewModel
オブジェクトにJavaScript関数を追加します。self.raiseTrigger = function (triggerName) { SitesSDK.publish(SitesSDK.MESSAGE_TYPES.TRIGGER_ACTIONS, { 'triggerName': 'helloWorldWhoAreYou', 'triggerPayload': { "whoAreYou": "This is " + self.whoAreYou() + "!"} }); };
-
ユーザー・インタフェースにエントリを追加して、トリガーを起動する関数(
-edit template.html
)および</div>
の前にボタンをコールします。<button data-bind="click raiseTrigger">Who Am I?</button>
-
render.js
ファイルをOracle Content Managementインスタンス・サーバーに同期またはアップロードします。
ViewModel
オブジェクトで、ボタンがクリックされたときに呼び出されるJavaScript関数を作成しました。 この関数は、サイトSDKを呼び出して、このトリガー"helloWorldWhoAreYou"
に対して定義されたすべてのアクションをトリガーするように指示します。 また、単一のフィールド"whoAreYou"
を持つtriggerPayload
を通過します。 これらの値"helloWorldWhoAreYou"
と"whoAreYou"
は、前のステップでトリガーを登録したときに入力した値と一致します。
ノート:
アクションが実行されるタイミングに関して事前定義済の順序はありません。 各アクションは、リストされた順序で呼び出されますが、それが完了するまで待って次のアクションが呼び出されるわけではありません。 アクションで非同期コールが行われる場合は、次のアクションが実行される前にそれが完了しない可能性があります。