プレイブック取り込みコンポーネントインスタンスの構成
プレイブック取り込みコンポーネントインスタンスを構成して、ユーザーが Web サイトに埋め込み、Web サイトからプレイブックガイド付きエクスペリエンスを使用してケースを直接送信できるようにします。
始める前に
プレイブック取り込みコンポーネントインスタンスを構成するには、次のセットアップが必要です。
- インスタンスで Web 埋め込み可能 を有効にします。詳細については、「Web 埋め込み可能 のアクティブ化」を参照してください。
- カスタム URL をインスタンス URL として設定。
- OpenID Connect (OIDC) 認証または非 OIDC 認証を使用して、 ServiceNow コンポーネントを認証します。詳細については、「OIDC を使用した ServiceNow コンポーネントの認証」と「ServiceNow コンポーネントの非 OIDC 認証」を参照してください。
必要なロール:sn_embeddable_core.emb_admin
手順
- 移動先 すべて > Web 埋め込み可能 > ホームページ.
-
ホームページで、[モジュールの作成] を選択するか、既存のモジュールを使用します。
新しいモジュールの作成の詳細については、「 モジュールを作成」を参照してください。
-
モジュールページの [コンポーネント] タブで、プレイブック取り込みコンポーネントインスタンスを既存または新規のグループに追加します。
グループを作成してからコンポーネントインスタンスを追加する方法の詳細については、「 グループの作成とコンポーネントインスタンスの追加」を参照してください。
- オプション:
[ 静的プレビューを表示 ] オプションを切り替えて、ライブプレビューが利用できないときにコンポーネントの視覚的表現を表示します。
注:有効にすると、グローバルプロパティまたはコンポーネントプロパティへの変更は [プレビュー] タブにリアルタイムで表示されません。
-
プレイブック取り込みコンポーネントインスタンスのプロパティを構成します。
- [プレビュー] タブには、コンポーネントプロパティで設定された選択肢に従ってリアルタイムデータが表示されます。
- プレイブック取り込みコンポーネントインスタンスに関連するコンポーネントプロパティの説明については、「 プレイブック取り込みのコンポーネントプロパティ」を参照してください。
-
[ CORS ルール ] タブを選択して、CORS ルールを構成します。
CORS ルールの構成の詳細については、「 ServiceNowコンポーネントを埋め込む前に CORS (クロスオリジンリソース共有) ルールを構成する」を参照してください。
-
[ コンポーネント ] タブを選択します。
アプリケーションスコープに関するメッセージが表示された場合は、スコープを [カスタマーサービスの Web コンポーネント ] に変更して、レコードを編集できるようにします。
-
[ 埋め込みコードの取得] を選択します。
グローバルコードとコンポーネントコードの両方を表示するポップアップウィンドウが表示されます。
-
[グローバル コード] タブで、生成されたコードを確認し、[ グローバル コードのコピー] を選択します。
グローバル コードは、サードパーティの Web ページに一度だけ追加する必要があります。
import { init, login, logout, startGuestSession } from 'https://demo.servicenow.com/uxasset/externals/sn_embeddable_core/index.jsdbx'; await init({ theme: 'fad87d2ca304121029a4d1aed31e610f', /* sys_id of the theme to use for the embeddable components in your website */ baseURL: 'https://demo.servicenow.com', /* Base URL of the instance to be used for the embeddable components in your website */ authCallback: getTokenCallBack, /* Function which returns the auth token for the current user, required for auth setup */ module: '591800ffc1243610f87714367ed47c6a', /* Demo module */ pageName: document.title, /* Uses the browser's document title as the page name in User analytics experience */ guestTokenCallback: getGuestJWTTokenCallBack, /* Function which returns the guest token for the current user, required for guest validation setup */ cacheComponents: [] /* Pre-caches resources for improved performance. Update component list as per your usage */ }); function getTokenCallBack() { var idToken; /* Get the id token for the current user */ return Promise.resolve(idToken); } function getGuestJWTTokenCallBack() { var guestToken; /* Get the guest token for the current user */ return Promise.resolve(guestToken); } /* Uncomment below function to handle guest session */ // await startGuestSession(); /* Uncomment below functions to handle login and logout once the user logs into your website */ // await login(); // await logout(); - オプション:
[コンポーネントコード] タブで、[ イベントハンドラーを有効にする ] 切り替えスイッチをスライドさせて、Web サイトでのユーザーインタラクションによってトリガーされたイベントを処理します。
注:イベントハンドラーを有効にすると、コンポーネントコードも変更されます。Web 埋め込み可能 におけるイベントハンドラーの詳細については、「プレイブック取り込みコンポーネントのイベントハンドラー」を参照してください。
-
[コンポーネントコード] タブで、生成されたコードを確認し、[コンポーネントコードをコピー (Copy component code)] を選択します。
生成されたコンポーネントコードには、イベントハンドラーの構成も含まれています。
<!-- Module: Demo module Group: Group 1 Instance: Playbook intake 1 --> <sn-embedx-playbook-intake table="sn_onboarding_case" sys-id="-1" playbook-title="Create case with playbook" stage-orientation="horizontal" max-visible-stages="5" activity-view-mode="focused" playbook-experience="0d71033773f220109edbc1f52ff6a741" record-generator="494435eb53a231103466ddeeff7b12e0" confirmation-text="Case submitted successfully!" confirmation-sub-text="Estimated resolution in 24 hours" reference-number-label="Reference Number :" primary-button-label="View details" secondary-button-label="Browse services"> </sn-embedx-playbook-intake> <!-- The component also includes the following additional properties: hide-stages hide-errors hide-reference-number hide-primary-button hide-secondary-button hide-record-created-confirmation prefill-fields --> <script type="module"> import { getEmbeddables, setEvents, setProperties } from 'https://demo.servicenow.com/uxasset/externals/sn_embeddable_core/index.jsdbx'; const snEmbedxPlaybookIntake = document.querySelector('sn-embedx-playbook-intake'); /* Uncomment this code for the default behaviour of the Playbook intake component. // Get the table, playbook title, record generator and pre-fill fields from the current URL const currentURL = new URL(window.location.href); const urlParams = new URLSearchParams(currentURL.search); const tableName = urlParams.get('emb_table'); const playbookTitle = urlParams.get('emb_playbook_title'); const recordGenerator = urlParams.get('emb_record_generator'); const prefillFields = urlParams.get('emb_prefill_fields'); // Update the properties of the componentProperties object setProperties(snEmbedxPlaybookIntake,{table: tableName,recordGenerator:recordGenerator,playbookTitle:playbookTitle,prefillFields:prefillFields}); */ getEmbeddables(["sn-embedx-playbook-intake"]); const eventHandlers = { 'SN_EMBEDX_PLAYBOOK_INTAKE#COMPONENT_READY' : (e) => { // This event is dispatched when a component is ready and usable. }, 'SN_EMBEDX_PLAYBOOK_INTAKE#COMPONENT_ERROR' : (e) => { // This event is dispatched when a property validation or internal error occurs. var {errorType, errorMessage} = e.detail.payload; console.log(errorType, errorMessage); }, 'SN_EMBEDX_PLAYBOOK_INTAKE#RECORD_CREATION_SUCCEEDED' : (e) => { // Dispatched when a record is created by a Record Generator Playbook. var {table, sysId, number, playbook_experience_id, hide_record_creation} = e.detail.payload; if(hide_record_creation){ var primaryURL = '/caseview'; // Replace with the URL of the case view page // Construct the URL for the Case View component with URL parameters const caseViewURL = primaryURL + '?emb_table=' + table + '&emb_recordid=' + sysId + (playbook_experience_id === '98e09a560f2200102920c912d4767e1a' ? '' : '&emb_playbook_experience=' + playbook_experience_id); open(caseViewURL,'_self'); // Open case record when record created confirmation is hidden } }, 'SN_EMBEDX_PLAYBOOK_INTAKE#PRIMARY_BUTTON_CLICKED' : (e) => { // This event is dispatched when primary button is clicked on the record created confirmation page. var {table, record_sys_id, playbook_experience_id} = e.detail.payload; var primaryURL = '/caseview'; // Replace with the URL of the case view page // Construct the URL for the Case View component with URL parameters const caseViewURL = primaryURL + '?emb_table=' + table + '&emb_recordid=' + record_sys_id + (playbook_experience_id === '98e09a560f2200102920c912d4767e1a' ? '' : '&emb_playbook_experience=' + playbook_experience_id); open(caseViewURL,'_self'); // Open case record when primary button is clicked }, 'SN_EMBEDX_PLAYBOOK_INTAKE#SECONDARY_BUTTON_CLICKED' : (e) => { // This event is dispatched when secondary button is clicked on the record created confirmation page. var {table, record_sys_id} = e.detail.payload; var secondaryURL = '/browse'; // Replace with the URL of the secondary page // Open the Case View component in the same tab open(secondaryURL,'_self'); } }; setEvents(snEmbedxPlaybookIntake, eventHandlers); </script>
タスクの結果
グローバルコードとコンポーネントコードをサードパーティアドミニストレーターと共有して、プレイブック取り込みコンポーネントインスタンスをサードパーティ Web サイトに埋め込む準備ができました。