記事 (1/23)
このモジュールでは、次のことを学習します。
この学習モジュールは、UI Builder を使用したページとイベントの操作方法に精通していることを前提としています。
ページの作成の詳細については、学習モジュール「UI Builder でのページの作成」を参照してください。
イベントとイベントハンドラーの詳細については、学習モジュール「UI Builder のイベント」を参照してください。
記事 (2/23)
重要:この学習モジュールの内容は、Rome ServiceNow リリース用に最後に更新されました。
この学習モジュール全体で Special Occasions アプリケーションを使用して、アプリケーション作成の基礎である概念とプロセスを紹介し、実際に示します。Special Occasions アプリケーションの構築は行いません。
演習では、NeedIt アプリケーションを開発します。
演習は、次の 3 つの方法で示されます。
NeedIt アプリケーションを使用すると、ユーザーは複数の部門からのサービスを要求できます。ソースコントロールを使用して、この学習モジュールに必要なすべての NeedIt アプリケーションファイルから始めます。
演習 (3/23)
ServiceNow は GitHub を使用して、開発者サイトの学習コンテンツをコピーして使用するアプリケーションリポジトリを提供します。リポジトリには、アプリケーションファイルの固定セットであるタグが含まれているため、部分的に構築されたアプリケーションを使用して作業を開始できます。ServiceNow が提供するリポジトリを個人開発者インスタンス (PDI) にコピーしてインポートすることで、モジュール内の実践的な演習に必要なすべてのファイルを取得できます。
注意:ServiceNow が開発者プログラムの学習コンテンツで GitHub を使用する方法の詳細と、リポジトリをフォークしてアプリケーションをインポートする方法に関するビデオを見るには、『GitHub ガイド』を参照してください。
この演習では、次のことを行います。
重要:リポジトリを既にフォークしてインポートしている場合は、次の演習に進み、タグから分岐を作成して、アプリケーションファイルを PDI にロードできます。モジュールを完了するには、NeedIt アプリケーションファイルが必要です。
演習のこのセクションでは、開発者サイトの学習コンテンツで使用するアプリケーションリポジトリのパーソナルフォークを作成します。
演習のこのセクションでは、アプリケーションリポジトリを ServiceNow にインポートします。プロセスの一環として、まず GitHub アカウントの資格情報レコードを作成してから、Studio を使用してアプリケーションリポジトリを PDI にインポートします。
演習 (4/23)
この演習では、「クライアント側インタラクション」モジュール (モジュールで使用するアプリケーションファイルを含む) 用に NeedIt アプリケーションの分岐を作成します。
注意:この演習を開始する前に、「 演習:「クライアント側インタラクション」モジュール用のリポジトリのフォークとアプリケーションのインポート」の説明に従って、NeedIt リポジトリをフォークしてインポートしておく必要があります。
リポジトリに LoadForUIBCSIModule タグがない場合にのみ、演習のこのセクションを完了してください。NeedIt アプリケーションを準備するには、既存のタグから分岐を作成し、更新セットをダウンロードして適用して、インスタンスでのアプリケーションの準備を完了します。
記事 (5/23)
Web ベースのアプリケーションでは、ブラウザーで行われる処理はすべてクライアント側で実行されます。クライアント側インタラクションは、ユーザーがクリックしてエクスペリエンスコンポーネントを操作するときに発生します。クライアント側インタラクションの例は次のとおりです。
ユーザーは、他のページに移動するためにページを操作することがあります。他には、ユーザーはページのコンテンツ、外観、またはデータを更新することがあります。クライアント側インタラクションでは、ページ全体が更新されるのではなく、ページの影響を受ける部分のみ更新されます。
たとえば、ユーザーは列ヘッダーをクリックしてリストをソートできます。ソートすると、ページ全体ではなくリストのみが再描画されます。
UI Builder のクライアント側インタラクションを作成するのに必要なものは次のとおりです。
注意:この学習モジュールは、イベント、イベントハンドラー、およびイベントハンドラーをイベントにマッピングする方法について理解していることを前提としています。UI Builder のイベントの詳細については、学習モジュール「UI Builder のイベント」を参照してください。
記事 (6/23)
クライアントステータスパラメーターはページ変数です。クライアントステータスパラメーターを定義して構成し、値を使用してコンポーネントを構成します。クライアントステータスパラメーターは、ページコンポーネントの構成値の管理を一元化します。
例として、ページに colorというクライアントステータスパラメーターがあるとします。3 つのコンポーネントのうち 2 つは、color クライアントステータスパラメーターを使用するように構成されています。color が orange に設定されている場合、コンポーネントはオレンジ色になります。color が purple に設定されている場合、コンポーネントは紫色になります。color が green に設定されている場合、コンポーネントは緑色になります。クライアントステータスパラメーターは、ページの共通の値を管理する単一の場所です。クライアントステータスパラメーターがないと、値を使用する各コンポーネントは、その値が変更された場合に個別に更新する必要があります。
たとえば、Web エクスペリエンスでは、コンポーネントによって使用されるプライマリ色が color クライアントステータスパラメーターに保存されます。コンポーネントがクライアントステータスパラメーターを使用するように構成されている場合、クライアントステータスパラメーターの値を変更すると、コンポーネントが新しい値に更新されます。
エクスペリエンスにボタンを追加して、ユーザーがページコンポーネントの色を選択できるようにすることができます。ユーザーは 1 回のクリックで、ページ上のすべてのコンポーネントの色を同時に変更できます。ユーザーの色の選択をクライアントステータスパラメーターに保存してから、クライアントステータスパラメーターを使用してページのコンポーネントを構成します。ユーザーのインタラクションによってクライアントステータスパラメーターの値が変更されると、ページのコンポーネントがリアルタイムで更新されます。
記事 (7/23)
デフォルトでは、[クライアントステータス] パネルは折りたたまれています。アイコンバーの [クライアントステータス] アイコン () をクリックして、[クライアントステータス] パネルを開きます。
[クライアントステータス] パネルには、次の 2 つのセクションがあります。
記事 (8/23)
クライアントステータスパラメーターをページに追加するには、[クライアントステータスパラメーター] セクションの [+ 追加] ボタンをクリックします。
クライアントステータスパラメーターには、3 つの構成フィールドがあります。
この例では、[クライアントステータス] パネルに 2 つのクライアントステータスパラメーターがあります。
記事 (9/23)
クライアントステータスパラメーターを作成したら、それを使用して何ができるのでしょうか。クライアントステータスパラメーターを使用するには、まずクライアントステータスパラメーターの値をコンポーネント構成にバインドします。クライアントステータスパラメーターの値が変更されると、コンポーネントは新しい値を使用するように更新されます。クライアントステータスパラメーターの値を変更する 1 つの方法として、イベントハンドラーがあります。
「クライアントステータスパラメーターの作成」ページの例では、2 つのクライアントステータスパラメーター (occasionTypeQuery と occasionListTitle) を Special Occasions アプリケーションに追加しました。occasionTypeQuery パラメーターにはデフォルトでは値がなく、occasionListTitle のデフォルト値は All Special Occasions です。これらのクライアントステータスパラメーターは、[行事リスト (Occasion List)] コンポーネントに適用され、リストのタイトルとフィルターを設定します。ボタンを使用してこれらのクライアントステータスパラメーターの値が更新され、リストが動的に更新されます。
クライアントステータスパラメーターの値は、ページコンテキスト、ペイロード、およびデータリソースと同じ方法でコンポーネント構成フィールドにバインドできます。コンポーネントを構成するときには、フィールドにカーソルを合わせて [動的なデータバインディング] ボタン () を選択し、クライアントステータスパラメーターをフィールド値にバインドします。この例では、[動的なデータバインディング] ボタンが、[行事リスト (Occasion List)] コンポーネントの [フィルター] フィールドで強調表示されています。
文字 @ はデータバインディングを示しており、state オブジェクトにはクライアントステータスパラメーターが含まれています。選択リストからクライアントステータスパラメーターを選択します。次の例は、occasionTypeQuery クライアントステータスパラメーターを選択しているところを示しています。occasionTypeQuery クライアントステータスパラメーターのデフォルト値は空であるため、デフォルトではフィルターは適用されません。
コンポーネントのタイトルも同様の方法で設定できます。[タイトル] フィールドで [動的なデータバインディング] ボタンを選択するか、「@」と入力して、選択リストから state.occasionListTitle クライアントステータスパラメーターを選択します。occasionListTitle クライアントステータスパラメーターのデフォルト値は、All Special Occasions です。次の例は、[タイトル] と [フィルター] の両方がクライアントステータスパラメーターを使用するように構成されていることを示しています。
どちらにもクライアントステータスパラメーターが適用されている場合、リストにフィルターは適用されず、タイトルは All Special Occasions になります。
occasionTypeQuery および occasionListTitle クライアントステータスパラメーターの値は、ユーザーがクライアントステータスパラメーターの値を変更するコンポーネントを操作するまで変更されません。
ランタイムのクライアントステータスパラメーターの値を変更するには、[クライアントステータスパラメーターを更新] イベントハンドラーを使用します。[クライアントステータスパラメーターを更新] イベントハンドラーには、更新するクライアントステータスパラメーターと、クライアントステータスパラメーターに使用する新しい値の 2 つのプロパティがあります。
例として、Special Occasions アプリケーションの [行事リスト (Occasion List)] コンポーネントの上に [誕生日] ボタンが追加されています。このボタンの目的は、リストの [タイトル] を [すべての誕生日 (All Birthdays)] に変更し、誕生日のみが表示されるようにリストのフィルターを調整することです。この目的を達成するため、2 つのイベントハンドラーがボタンの [クリックしたボタン] イベントにマッピングされます。1 つは occasionTypeQuery クライアントステータスパラメーターを変更し、もう 1 つは occasionListTitle クライアントステータスパラメーターを変更します。次の図は、[クライアントステータスパラメーターを更新] イベントハンドラーが、occasionTypeQuery クライアントステータスパラメーターを special_occasion=birthday に設定するよう構成されていることを示しています。この場合、リストがフィルタリングされ、誕生日のみが表示されます。
[クリックしたボタン] イベントが、occasionTypeQuery および occasionListTitle クライアントステータスパラメーターの両方を更新するイベントハンドラーにマッピングされている場合、ボタンをクリックするとクライアントステータスパラメーターが更新され、 [行事リスト (Occasion List)] コンポーネントが新しい値で自動的に更新されます。
演習 (10/23)
レコードを使用すると、Web エクスペリエンスの表示がより興味深いものになります。この演習では、エクスペリエンスに表示する NeedIt テーブル用のランダムレコードを作成します。
注意:完了した他の学習モジュールによっては、既に NeedIt レコードを生成している可能性があります。開いている NeedIt レコードのリストを表示するには、Application Navigator を使用して [NeedIt] > [すべて] を開きます。ステータス値と要求タイプが異なる NeedIt レコードが少なくとも 50 件ある場合は、この演習をスキップできます。
[NeedIt の [必要な場合] フィールドの日付 (NeedIt When needed field date)] ビジネスルールがあると、過去の [必要な場合] フィールド値で [NeedIt] レコードが作成できません。演習のこのパートでは、[NeedIt の [必要な場合] フィールドの日付 (NeedIt When needed field date)] ビジネスルールを非アクティブにするため、過去と将来の両方の [必要な場合] フィールド値を持つ NeedIt レコードを作成できます。
演習 (11/23)
この演習では、クライアントステータスパラメーターとイベントハンドラーを使用して、 ホームページの Sys Admin home バリアントにある [すべてのアクティブな NeedIt (All Active NeedIts)] リストをインタラクティブにフィルタリングします。
演習のこのセクションでは、リストフィルターを格納する折りたたみ可能なコンテナーを追加して構成します。
演習のこのセクションでは、リストフィルターとリストタイトルのクライアントステータスパラメーターを作成します。次に、[すべてのアクティブな NeedIt (All Active NeedIts)] リストコンポーネント構成のデータバインディングを更新して、クライアントステータスパラメーターを参照します。[すべてのアクティブな NeedIt (All Active NeedIts)] リストコンポーネントのラベルと ID も変更します。選択したフィルターに応じて異なる NeedIt レコードがリストに表示されるためです。
注意:この学習モジュールの演習では、アラートを使用して、[すべてのアクティブな NeedIt (All Active NeedIts)] リスト コンポーネントがデータをフェッチするたびにレコードの取得に使用されるクエリを表示します。[リスト - 簡易] コンポーネントには、レコードのリストに適用されたフィルターが表示されないため、アラートはクエリを表示するのに便利な方法です。アラートの作成方法の詳細については、「UI Builder のイベント」学習モジュールの「演習:スクリプトイベントハンドラー」を参照してください。
演習のこのセクションでは、クライアントステータスパラメーターを更新するボタンを作成します。クライアントステータスパラメーターが更新されると、リストも更新されます。作成したボタンをクリックすると、承認待ちの NeedIt レコードがリストに表示されます。
演習のこのセクションでは、NeedIt リストコンポーネントにアクティブな NeedIt (Active NeedIts) (NeedIt リストコンポーネントのデフォルト) を表示するボタンを作成します。
このセクションでは、学習した内容を活かしてクローズ済み NeedIt (Closed NeedIt) レコードを表示するボタンを作成します。ボタンを作成したら、ページ上に水平に表示されるようにボタンのレイアウトを調整します。
記事 (12/23)
処理されるイベントは、カスタムイベントハンドラーを作成するために使用されるラッパーです。処理されるイベントを作成すると、処理されるイベントは、イベントハンドラーをマッピングできるページイベントになります。
処理されるイベントは、どのように使用するのでしょうか?処理されるイベントは、イベントハンドラーとしてコンポーネントイベントにマッピングできます。
処理されるイベントのペイロードフィールドを使用して、イベントから、処理されるイベントにマッピングされたイベントハンドラーに値を渡します。この例では、処理されるイベントに 2 つのペイロードフィールドがあります。処理されるイベントの 1 つのインスタンスのペイロード値は緑と紫であり、処理されるイベントにマッピングされたイベントハンドラーはこれらの値を使用します。処理されるイベントの他のインスタンスのペイロード値はオレンジと黄色です。この場合も、処理されるイベントにマッピングされたイベントハンドラーはペイロード値を使用します。
処理されるイベントは、1 つのイベントに対して複数のアクションを実行する場合に便利です。たとえば、前の演習では、複数のイベントハンドラーを各ボタンの [クリックしたボタン] イベントにマッピングしました。処理されるイベントでは、単一のイベントハンドラーを使用して、複数のクライアントステータスパラメーターを更新できます。処理されるイベントのペイロードフィールドを使用して、処理されるイベントにマッピングされたイベントハンドラーに値を渡すことができます。次の図では、クリックしたボタンイベントは元々 2 つのイベントハンドラーにマッピングされていました。処理されるイベントフォルダーを使用すると、各クリックしたボタンイベントが処理されるイベントにマッピングされます。処理されるイベントに渡された値は、マッピングされたイベントハンドラーに伝播されます。
追加のメリットとして、処理されるイベントによって実行されたアクションを更新する必要がある場合、処理されるイベントにマッピングされたすべてのイベントが自動的に更新されます。たとえば、処理されるイベントによって 2 つのイベントハンドラーが実行され、開発者が 3 つ目のイベントハンドラーを追加する場合、処理されるイベントに追加のイベントハンドラーをマッピングできます。新しいイベントハンドラーにコンポーネントイベントからの入力が必要な場合を除き、処理されるイベントイベントハンドラーにマッピングされたイベントを変更する必要はありません。
記事 (13/23)
ページ Body の [構成] パネルの [イベント] タブを使用して、処理されるイベントを作成および設定します。
処理されるイベントを作成するには、[イベント] タブの [処理されるイベント] セクションで [+ 追加] ボタンをクリックします。
[イベントを作成] ダイアログで、処理されるイベントを構成します。
記事 (14/23)
処理されるイベントを使用する方法は、次のとおりです。
イベントハンドラーを処理されるイベントにマッピングし、処理されるイベントが呼び出されるときにアクションを実行します。
処理されるイベントは、Body 分岐の [構成] パネルの [イベント] タブにある [ページイベントマッピング] セクションに表示されます。
[新しいイベントハンドラーを追加] リンクをクリックして、他のタイプのイベントと同様に、処理されるイベントにイベントハンドラーを追加します。
payload オブジェクトを使用して、処理されるイベントのペイロードフィールドをイベントハンドラーに渡します。この例では、処理されるイベントの newQuery ペイロードフィールドが occasionTypeQuery クライアントステータスパラメーターに渡されます。
処理されるイベントは、イベントハンドラーとしてイベントにマッピングすることによって呼び出されます。
処理されるイベントがイベントハンドラーとして選択されている場合、ペイロードフィールドを使用してイベントハンドラーが構成されます。
ユーザーが [勤続記念日] ボタンをクリックすると、ペイロード値が処理されるイベントに渡された後、クライアントステータスパラメーターを更新するイベントハンドラーにペイロード値が渡されます。結果は、2 つの別々のイベントハンドラーがある場合と同じですが、必要なイベントハンドラーは 1 つだけです。
演習 (15/23)
たとえば、前の演習では、2 つのイベントハンドラーを各ボタンの [クリックしたボタン] イベントにマッピングしました。この演習では、処理されるイベントを作成します。その後、処理されるイベントを単一のイベントハンドラーとして構成し、両方のクライアントステータスパラメーターを更新します。
演習のこのセクションでは、処理されるイベントを作成し、複数のクライアントステータスパラメーターの更新を単一のイベントハンドラーに結合します。
演習のこのセクションでは、この学習モジュールの前の手順でマッピングしたボタンイベントハンドラーを新しい処理されるイベントに置き換えます。
記事 (16/23)
クライアントステータスパラメーターと処理されるイベントにより、開発者はページ上のクライアントエクスペリエンスを制御できるようになりますが、一部のインタラクションには追加のロジックが必要です。解決策はクライアントスクリプトです。クライアントスクリプトは、イベントを通じてクライアントステータスを更新するために使用される JavaScript です。
クライアントスクリプトを使用すると、値を使用する前にイベントペイロードまたはクライアントステータスパラメーター値を調整できます。たとえば、ラジオボタンを使用してリストをフィルタリングするようにページが構成されているとします。ラジオボタンの値は、[誕生日]、[勤続記念日]、および [すべて] です。クライアントスクリプトは、これらの値をクエリに追加してから、
ユーザーがリスト上のフィルターを変更するラジオボタンをオンにした場合、ラジオボタンの値は、リストのクエリ全体ではなく、ユーザーが選択した特定の値を渡します。クライアントステータスパラメーターを直接更新する代わりに、ラジオボタンの値がスクリプトに渡され、値がクエリに追加されます。その後、スクリプトはクエリのクライアントステータスパラメーターを更新してリストを更新します。
クライアントスクリプトの別のユースケースとして、特定の順序で複数のロジックステップを実行できます。イベントに複数のイベントハンドラーがある場合、イベントハンドラーは特定の順序で実行されることがなく、同時に実行することもできます。イベントハンドラーのロジックが、別のイベントハンドラーの完了に依存することはありません。クライアントスクリプトは、複数のイベントハンドラーを、特定の順序で実行する必要があるロジックに置き換えることができます。
記事 (17/23)
デフォルトでは、[クライアントスクリプト] パネルは折りたたまれています。アイコンバーの [クライアントステータス] アイコン () をクリックして、[クライアントスクリプト] パネルを開きます。
[クライアントスクリプト] パネルには、次の 3 つのセクションがあります。
記事 (18/23)
クライアントスクリプトをページに追加するには、[ページスクリプト] セクションの [+ 追加] ボタンをクリックします。
スクリプトに名前を付け、handler 関数にコードを追加します。handler 関数は、クライアントスクリプトがイベントハンドラーとして呼び出されたときに実行されます。
スクリプトインクルードおよび関連コンポーネントは、この学習モジュールの対象範囲外となる高度なトピックです。
クライアントスクリプトで使用される最も一般的なプロパティは、クライアントステータスパラメーター、ページコンテキスト値、およびイベントペイロードの詳細を取得します。
クライアントスクリプトで使用される最も一般的なメソッドは、クライアントステータスパラメーター値を設定します。
クライアントスクリプトで使用可能なプロパティとメソッドの詳細なリストについては、UI Builder API のドキュメントを参照してください。
この例では、行事のフィルタークライアントスクリプトは、イベントペイロードから value 値を取得し、その値を使用してクエリを更新します。値が all の場合、フィルターは不要であるため、スクリプトは occasionTypeQuery クライアントステータスパラメーターを空白値に設定します。その他の値の場合、スクリプトは値を文字列 special_occasion= に追加して完全なクエリを作成し、occasionTypeQuery クライアントステータスパラメーターをクエリ値に設定します。
記事 (19/23)
クライアントスクリプトは、イベントハンドラーとしてイベントにマッピングすることによって呼び出されます。クライアントスクリプトには構成フィールドがありません。スクリプトにより使用されるすべての値は、スクリプト自体に含められます。
ユーザーが [勤続記念日] ラジオボタンをクリックすると、行事のフィルタースクリプトが実行され、occasionTypeQuery クライアントステータスパラメーターとリストが更新されます。
演習 (20/23)
この演習では、折りたたみ可能なコンテナーにラジオボタンコンポーネントを追加して、ユーザーが要求タイプでフィルター処理できるようにします。次に、クライアントスクリプトを作成して、ページ上のリストのクエリとタイトルを更新します。
演習のこのセクションでは、折りたたみ可能なコンテナーにラジオボタンコンポーネントを追加して、ユーザーが要求タイプ値を選択してリストに表示できるようにします。また、ラジオボタンコンポーネントによって返されるペイロードを確認するクライアントスクリプトも作成します。
演習のこのセクションでは、ページ上のリストのクエリとタイトルを動的に構成するクライアントスクリプトを作成します。このスクリプトは、リストオプションコンテナー内のボタンとラジオボタンの両方で機能します。スクリプトでは、リストクエリとタイトルの更新イベントのペイロードフィールドを使用します。次に、スクリプトをリストクエリとタイトルの更新イベントのイベントハンドラーとしてマッピングします。
リストとラジオボタンの混同を避けるために、ユーザーがボタンをクリックしてリストクエリとタイトルを更新するときに、選択した要求タイプを適用したままにします。このフィルターを永続化するには、クライアントステータスパラメーターを作成し、クライアントステータスパラメーターが使用されるようにクライアントスクリプトを更新します。このスクリプトを機能させるには、ユーザーが別のラジオボタンを選択したときに reqType クライアントステータスパラメーターを更新し、ボタンを押したときにパラメーターをクエリに適用する必要があります。
演習 (21/23)
開発者は、GitHub のようなソースコントロールアプリケーションを使用して、個人開発者インスタンス (PDI) の外部で変更をコミット (完了した作業を保存) できます。アプリケーションに対する変更内容をコミットして、作業をソースコントロールに保存します。
この演習では、このモジュールで完了した作業を GitHub リポジトリに保存します。
注意:ServiceNow が開発者プログラムの学習コンテンツで GitHub を使用する方法の詳細と、作業を保存する方法に関するビデオを見るには、『GitHub ガイド』を参照してください。
記事 (22/23)
「UI Builder のクライアント側インタラクション」の理解度を確認しましょう。自分の進行状況を評価するには、次の質問が役立ちます。質問ごとに回答を決定し、質問の任意の場所をクリックして回答を表示します。
質問:クライアント側インタラクションを作成するために使用されるのは次のうちどれですか?複数の回答が正解の場合があります。
回答:正解は 1、3、5 です。クライアントステータスパラメーター、イベント、およびクライアントスクリプトは、動的なユーザーエクスペリエンスを作成するために使用されます。GlideRecord はサーバー側の API であり、ページパラメーターは便利ですが、クライアント側インタラクションの作成に使用されるツールではありません。
質問:クライアントステータスパラメーターの作成と構成に使用されるパネルはどれですか?
回答:正解は 4 です。
質問:正誤問題?ページに作成されたクライアントステータスパラメーターは、エクスペリエンス内の他のすべてのページで使用できます。
回答:正解は誤りです。クライアントステータスパラメーターは、それらが作成されるページのバリアントに固有です。
質問:処理されるイベントの使用方法を説明する文は次のどれですか?
回答:正解は 2 です。処理されるイベントは、実行するイベントハンドラーとしてコンポーネントイベントにマッピングされます。
質問:処理されるイベントを使用するメリットは次のうちどれですか?
回答:正解は 1 と 4 です。特定の順序で実行する必要があるロジックを実行するには、スクリプトが必要です。
質問:スクリプトで myCSP と呼ばれるクライアントステータスパラメーターの値にアクセスするために使用されるプロパティとメソッドは次のうちどれですか?
回答:正解は 3 です。クライアントステータスパラメーターには、api.state でアクセスします。
記事 (23/23)
コアコンセプト: