記事 (1/16)
このモジュールでは、次のことを学習します。
この学習モジュールは、UI Builder でのページとコンポーネントの操作方法に精通していることを前提としています。
ページの作成の詳細については、学習モジュール「UI Builder でのページの作成」を参照してください。
記事 (2/16)
重要:この学習モジュールの内容は、Rome ServiceNow リリース用に最後に更新されました。
この学習モジュール全体で Special Occasions アプリケーションを使用して、アプリケーション作成の基礎である概念とプロセスを紹介し、実際に示します。Special Occasions アプリケーションの構築は行いません。
演習では、NeedIt アプリケーションを開発します。
演習は、次の 3 つの方法で示されます。
NeedIt アプリケーションを使用すると、ユーザーは複数の部門からのサービスを要求できます。ソースコントロールを使用して、この学習モジュールに必要なすべての NeedIt アプリケーションファイルから始めます。
演習 (3/16)
ServiceNow は GitHub を使用して、開発者サイトの学習コンテンツをコピーして使用するアプリケーションリポジトリを提供します。リポジトリには、アプリケーションファイルの固定セットであるタグが含まれているため、部分的に構築されたアプリケーションを使用して作業を開始できます。ServiceNow が提供するリポジトリを個人開発者インスタンス (PDI) にコピーしてインポートすることで、モジュール内の実践的な演習に必要なすべてのファイルを取得できます。
注意:ServiceNow が開発者プログラムの学習コンテンツで GitHub を使用する方法の詳細と、リポジトリをフォークしてアプリケーションをインポートする方法に関するビデオを見るには、『GitHub ガイド』を参照してください。
この演習では、次のことを行います。
重要:リポジトリを既にフォークしてインポートしている場合は、次の演習に進み、タグから分岐を作成して、アプリケーションファイルを PDI にロードできます。モジュールを完了するには、NeedIt アプリケーションファイルが必要です。
演習のこのセクションでは、開発者サイトの学習コンテンツで使用するアプリケーションリポジトリのパーソナルフォークを作成します。
演習のこのセクションでは、アプリケーションリポジトリを ServiceNow にインポートします。プロセスの一環として、まず GitHub アカウントの資格情報レコードを作成してから、Studio を使用してアプリケーションリポジトリを PDI にインポートします。
演習 (4/16)
この演習では、「ページ作成」モジュール (モジュールで使用するアプリケーションファイルを含む) 用に NeedIt アプリケーションの分岐を作成します。
注意:この演習を開始する前に、「演習:「ページ作成」モジュール用のリポジトリのフォークとアプリケーションのインポート」の説明に従って、NeedIt リポジトリをフォークしてインポートする必要があります。
リポジトリに LoadForUIBEventsModule タグがない場合にのみ、演習のこのセクションを完了してください。NeedIt アプリケーションを準備するには、既存のタグから分岐を作成し、更新セットをダウンロードして適用して、インスタンスでのアプリケーションの準備を完了します。
記事 (5/16)
イベントは、ユーザーが実行するアクション、またはページ上で発生する事象です。各コンポーネントには、固有のイベントが関連付けられています。イベントには、次のものが含まれます。
イベントハンドラーは、イベントが発生したときに実行されるアクションです。イベントハンドラーをイベントにマッピングすることで、イベントが発生したときに実行する 1 つ以上のアクションを指定します。例を次に示します。
ページまたはコンポーネントのイベントは、イベントが 1 つ以上のイベントハンドラーにマッピングされていない限り、何も実行しません。
記事 (6/16)
イベントハンドラーとイベントをマッピングするには、[構成] パネルの [イベント] タブを使用します。
イベントを展開し、[新しいイベントハンドラーを追加] リンクをクリックして、[イベントハンドラープレビュー] フライアウトを開きます。そのフライアウトで、イベントにマッピングするイベントハンドラーを選択して構成します。この例では、[宛先にリンク] イベントハンドラーが、データの表示方法コンポーネントの [[表示方法] がクリックされました] イベントにマッピングされています。
複数のイベントハンドラーを単一のイベントにマッピングできます。イベントハンドラーは特定の順序で実行されることがなく、同時に実行することもできます。相互に依存するイベントハンドラーを追加しないでください。
イベントハンドラーを編集するには、イベントハンドラーの [編集] アイコン () をクリックします。
イベントハンドラーを削除するには、削除アイコン () をクリックします。
イベントはコンポーネントごとに異なります。たとえば、データの表示方法コンポーネントには 1 つのイベント [[表示方法] がクリックされました] があります。[リスト - 簡易] コンポーネントには、行または [すべて表示] リンクのクリックとデータのフェッチに関連するイベントがあります。[カレンダー] コンポーネントには、使用可能なイベントが多数あります。[定型化されたテキスト] や [イメージ] などの一部のコンポーネントには、イベントがありません。
コンポーネントのイベントの詳細については、ドキュメントを参照してください。コンポーネントのドキュメントを開くには、コンポーネントの [構成] パネルで [情報] アイコン () をクリックします。フライアウトの [詳細] リンクをクリックします。
または、開発者サイトの Now Experience Components の参照情報からコンポーネントの詳細を検索します。
イベントのドキュメントは、「UIB Setup (UIB のセットアップ)」ページにあります。
ドキュメントの「UIB Setup (UIB のセットアップ)」ページの「Events (イベント)」セクションには、イベントのテーブルと説明があります。この例は、[リスト - 簡易] コンポーネントのイベントを示しています。イベント名は、イベントをトリガーするものを示しますが、ドキュメントでイベントの動作を確認してください。たとえば、[行がクリックされました] イベントの説明は、ユーザーが行の任意の位置ではなく、行の最初のリンクをクリックしたことを示します。
演習 (7/16)
レコードを使用すると、Web エクスペリエンスの表示がより興味深いものになります。この演習では、エクスペリエンスに表示する NeedIt テーブル用のランダムレコードを作成します。
[NeedIt の [必要な場合] フィールドの日付 (NeedIt When needed field date)] ビジネスルールがあると、過去の [必要な場合] フィールド値で [NeedIt] レコードが作成できません。演習のこのパートでは、[NeedIt の [必要な場合] フィールドの日付 (NeedIt When needed field date)] ビジネスルールを非アクティブにするため、過去と将来の両方の [必要な場合] フィールド値を持つ NeedIt レコードを作成できます。
演習 (8/16)
NeedIt Experience には、ホームページと [簡易リスト] ページの 2 つのページがあります。ホームページには、期限切れの NeedIt レコードと、今月が期限の NeedIt レコードの数を表示するデータの表示方法があります。この演習では、[期限切れの NeedIt] スコアデータの表示方法がクリックされたときに [簡易リスト] ページを開くイベントマッピングを作成します。テストするために他のユーザーの代理操作を行う必要がないように、Sys Admin home バリアントに更新を適用します。
注意:スコアと色は、環境の NeedIt レコードによって異なります。
演習のこのセクションでは、ホームページを開いて、イベントハンドラーがマッピングされていないデータの表示方法コンポーネントの動作をテストします。
演習のこのセクションでは、イベントハンドラーを [[表示方法] がクリックされました] イベントにマッピングします。イベントハンドラーにより、[簡易リスト] ページが開きます。
記事 (9/16)
前の演習では、データの表示方法コンポーネントのイベントで静的な値を使用して、[簡易リスト] ページを開きました。静的な値には制限があります。
データリソースは、ページのコンポーネント用にフェッチするデータを動的に定義します。フィールドのデータバインディングを使用してデータリソースにアクセスします。フィールドで静的な値の代わりにデータバインディングを使用するには、フィールドに @ を入力するか、[動的なデータバインディング] アイコン () をクリックします。
データバインディングはデータリソースオブジェクトにアクセスします。フィールドにバインドするデータリソースオブジェクトを入力するか、選択します。イベントに使用される最も一般的なデータリソースオブジェクトは payload オブジェクトです。payload オブジェクトには、イベントのコンポーネントのプロパティが含まれています。たとえば、データの表示方法コンポーネントのテーブルを使用するには、payload.params.table プロパティをバインドします。
イベントに使用されるその他のデータリソースは次のとおりです。
注意:データリソースの詳細については、学習モジュール「UI Builder のデータリソース」を参照してください。
演習 (10/16)
この演習では、データの表示方法の値への動的なデータバインディングを使用して、[簡易リスト] ページを開きます。
演習のこのセクションでは、イベントハンドラーを円グラフの [[表示方法] がクリックされました] イベントにマッピングします。イベントハンドラーにより、[簡易リスト] ページが開きます。開くリストを、クリックした円グラフのスライスに基づいてフィルタリングする必要があります。たとえば、ユーザーが [施設] スライスをクリックした場合、リストにはアクティブな施設の NeedIt レコードが表示される必要があります。
演習のこのセクションでは、レコードを表示するページを作成します。
演習のこのセクションでは学習した内容を適用して、ホームページ の [すべてのアクティブな NeedIt のリスト (All Active NeedIts List)] コンポーネントの行の第 1 列の値をユーザーがクリックしたときに、[レコード] ページが開くようにします。必ずホームページの Sys Admin home バリアントでの作業を完了してください。
要件:
ソリューション:
記事 (11/16)
データバインディングを使用すると、開発者はコンポーネントとイベントを動的に設定できますが、データを使用する前にデータの検証または結合が必要な場合はどうなるでしょうか。データバインディングでは、フォーム内での連結や操作ができません。複数のデータバインディングオブジェクトがフィールドに追加されている場合、データバインディングはランタイムで解決されません。
デフォルトでは、フォームを使用してイベントハンドラーを構成しますが、代わりにスクリプトを使用してイベントハンドラーを構成することもできます。
フォームの代わりにスクリプトが必要な場合をよりよく理解するために、Special Occasions アプリケーションの円グラフを考えます。円グラフには、今月発生する行事が、行事タイプ別にグループ化されて表示されます。データバインディングを使用して、開くデータのリストを動的にフィルタリングできますが、データバインディングではリストタイトルを更新してクエリに一致させることができません。円グラフのスライスをクリックすると、円グラフと同じタイトルを持つリストが開きますが、リストは円グラフのスライスと一致するようにフィルタリングされます。ユーザーはフィルターを調べて、どのようなレコードが表示されているのかを判断する必要があります。この例では、ユーザーが勤続記念日 (Work Anniversary) の円グラフのスライスをクリックしてその月の勤続記念日 (Work Anniversary) の行事リストを開くと、今月の行事 (This Month's Occasions) というタイトルが表示されます。
リストのフィルタリングに使用されたクエリに関する詳細を含むように、リストのタイトルを更新するには、スクリプティングが必要です。イベントハンドラーの構成のスクリプティングには、[イベントハンドラープレビュー] フライアウトの [モード] を [スクリプト] に変更します。
スクリプトエディターが開きます。[スクリプト] フィールドには、イベントハンドラーに固有のテンプレートがあります。return ステートメントのプロパティは、イベントハンドラーがフォームで構成されている場合に使用可能なフィールドに対応しています。宛先にリンクイベントハンドラーの場合、選択された [ルート] の必須パラメーターとオプションのパラメーターは、それぞれ fields プロパティと params プロパティにオブジェクトとして渡されます。スクリプトによって返されるオブジェクトは、イベントハンドラーごとに異なります。
スクリプト化されたイベントハンドラーをイベントが実行すると、evaluateEvent 関数が実行されます。スクリプトの evaluateEvent 関数の return ステートメントの前に、ロジックを追加します。
API オブジェクトと event オブジェクトが evaluateEvent 関数に渡されます。フォームモードで使用される payload オブジェクトは、event オブジェクトに含まれています。event.payload を使用して、スクリプト内の payload オブジェクトのプロパティにアクセスします。オブジェクト名の入力を開始して、提案された値を取得します。
return ステートメントのオブジェクトの値を更新して、イベントハンドラーを設定します。この例のスクリプトでは、次のロジックを使用しています。
宛先にリンクイベントハンドラーのスクリプトの場合、[ルート] ページの必須パラメーターがオブジェクトとして fields プロパティに渡されます。[ルート] ページのオプションのパラメーターは、オブジェクトとして params プロパティに渡されます。
これで、ユーザーが円グラフのスライスをクリックしたときに、一致するタイトルを持つリストが開くようになります。
開発者向けのヒント:スクリプトを読みやすくするには、スクリプトエディターの [コードをフォーマット] ボタンと [ワードラップを有効にする] 設定を使用します。
[コードをフォーマット] ボタン (
) は、[スクリプト] フィールドのコードにフォーマットを適用します。
横方向のスクロールを避けるためにコードを折り返すには、[その他のオプション] メニュー (
) を開き、[ワードラップを有効にする] 設定をオンに切り替えます。
演習 (12/16)
この演習では、[すべてのアクティブな NeedIt のリスト (All Active NeedIts List)] コンポーネントのデータがフェッチされたときのアラートイベントハンドラーをページに追加します。基本的なアラートから始めます。次に、スクリプティングを使用してデータがフェッチされた際に使用されたクエリの詳細を含めるように、イベントハンドラーを更新します。
演習のこのセクションでは、[すべてのアクティブな NeedIt のリスト (All Active NeedIts List)] コンポーネントのデータがフェッチされたときのアラートイベントハンドラーを追加します。
演習のこのセクションでは、ユーザーが手動でアラートを解除できるようにアラート通知の追加イベントハンドラーを更新します。アラート通知の追加イベントハンドラーは、アラートコンポーネントを使用します。まず、アラートコンポーネントの構成オプションを調べます。
リストデータのフェッチに使用したクエリを含めるように、アラート通知を設定するとします。フォームにクエリを含めるアラートは設定できません。演習のこのセクションでは、スクリプトを使用するようにアラート通知の追加イベントハンドラーを構成します。このスクリプトを使用して、アラートメッセージテキストにクエリを含めます。
混乱を避けるために、現在のデータフェッチのアラートを追加する前に、前のフェッチのアラートをクリアする必要があります。学習した内容を使用して、データのフェッチに成功しましたイベントが発生する前に、既存のアラートを削除してください。
ソリューション:
回答:データフェッチが要求されましたイベントを使用して、ユーザーが新しいデータフェッチを要求したときにアラートをクリアします。データフェッチが要求されたときにアラートをクリアするために、アラート通知をクリアイベントハンドラーを追加します。
演習 (13/16)
この演習では、学習した内容を他のホームページバリアントに適用します。
NeedIt User home バリアントには、[リスト - 簡易] コンポーネントがあります。学習した内容を使用して、次の操作を行います。
バリアントをテストするには、次のことを行います。
NeedIt Admin home バリアントには、[データの表示方法] コンポーネントが 3 つ、[リスト - 簡易] コンポーネントが 1 つあります。学習した内容を使用して、次の操作を行います。
バリアントをテストするには、次のことを行います。
演習 (14/16)
開発者は、GitHub のようなソースコントロールアプリケーションを使用して、個人開発者インスタンス (PDI) の外部で変更をコミット (完了した作業を保存) できます。アプリケーションに対する変更内容をコミットして、作業をソースコントロールに保存します。
この演習では、このモジュールで完了した作業を GitHub リポジトリに保存します。
注意:ServiceNow が開発者プログラムの学習コンテンツで GitHub を使用する方法の詳細と、作業を保存する方法に関するビデオを見るには、『GitHub ガイド』を参照してください。
記事 (15/16)
「UI Builder のイベント」の理解度をを確認しましょう。自分の進行状況を評価するには、次の質問が役立ちます。質問ごとに回答を決定し、質問の任意の場所をクリックして回答を表示します。
質問:UI Builder のイベントとは何かを最も的確に説明している文は次のどれですか?
回答:正解は 4 です。選択肢はすべて「イベント」のタイプですが、UI Builder のイベントは選択肢 4 のみです。イベントは、ユーザーが実行するアクション、またはページ上で発生する事象です。
質問:検索結果コンポーネントのイベントは次のどれですか?コンポーネントのドキュメントを参照してから、回答してください。複数の回答が正解の場合があります。
回答:正解は 1、3、5 です。
質問:正誤問題?コンポーネントには、イベントハンドラーにマッピングされていないイベントが含まれていてもかまいません。
回答:正解は正しいです。イベントがイベントハンドラーにマッピングされていない場合、そのイベントが発生しても何も起こりません。
質問:UI Builder でイベントハンドラーをイベントにマッピングする方法を最も的確に説明している文は次のどれですか?
回答:正解は 5 です。[構成] パネルの [イベント] タブでイベントを選択し、[新しいイベントハンドラーを追加] リンクをクリックして、イベントハンドラーを選択して構成します。
質問:イベントハンドラーを動的に設定するために使用されるものは次のどれですか?
回答:正解は 2 です。データリソースにアクセスするには、動的なデータバインディングを使用します。
質問:ユーザーが操作するコンポーネントからの情報を含むオブジェクトは次のどれですか?
回答:正解は 1 です。context オブジェクトには、ページとセッションに関する情報が含まれます。event オブジェクトには、イベント関連の情報が含まれます。data オブジェクトはデータリソースインスタンスにアクセスします。state オブジェクトは、クライアントステータスパラメーターにアクセスします。
質問:インスタンスで、[イベントハンドラー] ダイアログを開きます。デフォルトのイベントハンドラーは次のどれですか?複数の回答が正解の場合があります。
回答:正解は 1、2、4 です。[表示方法] がクリックされましたおよび行がクリックされましたはイベントであり、イベントハンドラーではありません。
記事 (16/16)
コアコンセプト: