カスタム・イベント・サブスクリプションおよびVBからの公開
カスタム・イベント公開リクエストはVB内でリスニングでき、VBから公開リクエストを処理できます。
リクエストを解決または却下して、正または負のフィードバックを要求者に返送できます。 同様に、VBからカスタム・イベントをトリガーできるため、サブスクリプションを追加したレシーバは、VBから送信されるイベント・データに関する通知を受け取ります。
Fusion VBアプリケーションでは、uefCustomEventおよびtriggerUefCustomEventというコンテナに2つのイベントがあります。このイベントは、リスナーをcustomEventパブリッシュ・リクエストに追加したり、VBからcustomEventをトリガーするために使用されます:
uefCustomEvent使用方法: VB内のカスタム・イベント公開リクエストのリスニングおよび処理
GlobalContextの上部または同じブラウザ・タブからのTabContextの上部にあるカスタム・イベント公開リクエストは、VB内でtiを聞き、そのリクエストに独自のロジックを記述できます。 このリクエストを解決または拒否すると、customEventリクエストを発行しているパブリッシャに正または負のフィードが戻されます。
uefCustomEvent
によって呼び出されるevent.event
オブジェクトの構造の例を次に示します。
{
markFailure: () => {},
markSuccess: (data: any) => {},
requestDetails: {
customEventName: string;
payload: any;
},
objectContext: {
objectId: null,
objectType: null,
tabId: string,
msiTabId: null,
msiSubTabId: null
}
}
次にステップを示します。
- uefCustomEventにリスナーを追加します。
- イベント・オブジェクトで、customEventNameを確認します。
- イベント・オブジェクトで使用可能なmarkSuccessまたはmarkFailureコールバックをコールします。
- MarkSuccessコールバックを実行すると、customEventパブリッシャに肯定的なフィードバックが得られます。 markSuccessコールバックで渡されたデータは、パブリッシャで受信されます。
- MarkFailureコールバックを実行すると、customEventパブリッシャに否定的なフィードバックが得られます。
別のbrowserTab-2からbrowserTab-1のuefCustomEvent
リスナーを起動する必要がある場合は、browserTab-2からbrowserTab-1のtabContextの上にあるパブリッシュAPIをコールし、このステップで説明するアクションを実行できます。
triggerUefCustomEvent使用方法: VBからのカスタム・イベントのトリガー
VBアプリケーションから任意のcustomEventをトリガーして、同じイベントにサブスクライブされているすべてのアプリケーションでその通知を取得できます。 サブスクリプションが追加された受信側で受信したこのカスタム・イベントを使用して、任意のデータを渡すことができます。
ServiceCenterコンテナ・ページのtriggerUefCustomEventという名前のイベントは、イベント・ペイロード・オブジェクト内のeventNameおよびペイロード・プロパティを受け入れます。
次にステップを示します。
- コンテナ・ページのアクション・チェーンから、Fire Eventブロックをコールします(たとえば、ボタン・クリックで、ボタン・クリックのアクション・チェーンにFire Eventブロックをコールするアクション・チェーンを追加します)。
- ページ・レベルでeventNameをtriggerUefCustomEventとして選択します(コンテナ・ページ)
- イベントのペイロード・オブジェクトの割当てブロックをクリック
- イベント・オブジェクトのeventName属性にcustomEventNameを指定します。
- イベント・オブジェクトのペイロード属性のオブジェクトとしてデータを指定します。
同じcustomEventNameのサブスクリプションを追加したアプリケーションは、このアクション・チェーン・ブロックが実行されるたびに通知を受け取ります。 ペイロード属性で渡されたデータも受信します。 したがって、VBは任意のcustomEventをトリガーし、同じcustomEventに関心のあるアプリケーションが通知およびVBから渡されるイベント・データを取得できるように、それとともにデータを渡すことができます。
UIEventsAPPFramework.UefClient.getUEFProvider().then((CX_SVC_UI_EVENTS_FRAMEWORK) => {
CX_SVC_UI_EVENTS_FRAMEWORK.uiEventsFramework.initialize('MyFirstExtensionID').then((uefProvider) => {
uefProvider.getGlobalContext().then((globalContext) => {
const requestObject = uefProvider.requestHelper.createSubscriptionRequest('cxEventBusTabOpenEvent');
globalContext.subscribe(requestObject, (response) => {
console.log('Response from UEF API used in APP Window___', response);
});
});
});
});
例: UEFを使用して、VBアプリケーション・ウィンドウのフィールド値変更をサブスクライブします:
async listenFieldValueChange() {
const uefProvider = await UIEventsAPPFramework.UefClient.getUEFProvider();
const frameworkProvider = await uefProvider.uiEventsFramework.initialize('FVC');
const tabContext = await frameworkProvider.getTabContext();
const recordContext = await tabContext.getActiveRecord();
const requestObject =
frameworkProvider.requestHelper.createSubscriptionRequest('cxEventBusFieldValueChangeEvent');
requestObject.setFields(['ServiceRequest.Title','ServiceRequest.ProblemDescription']);
recordContext.subscribe(requestObject, (response) => {
const fieldName = response.getResponseData().getFieldName();
const newValue = response.getResponseData().getNewValue();
const oldValue = response.getResponseData().getOldValue();
console.log(`Field Name: ${fieldName}, oldValue: ${oldValue}, newValue: ${newValue}`);
});
}