記事 (1/21)
このモジュールでは、次のことを学習します。
記事 (2/21)
重要:この学習モジュールの内容は、Quebec ServiceNow リリース用に最後に更新されたもので、Rome リリースでは更新されていません。Rome リリースとこの学習モジュールのコンテンツとの間に違いが見られる場合があります。
Employee Special Days アプリケーションは、アプリケーション作成の背後にある概念とプロセスを紹介し、デモンストレーションするために、この学習モジュール全体で使用されます。Employee Special Days アプリケーションは構築しません。
演習では、NeedIt アプリケーションを開発します。
演習は、次の 3 つの方法で示されます。
NeedIt アプリケーションを使用すると、ユーザーは複数の部門からのサービスを要求できます。ソースコントロールを使用して、この学習モジュールに必要なすべての NeedIt アプリケーションファイルから始めます。
演習 (3/21)
ServiceNow は GitHub を使用して、開発者サイトの学習コンテンツをコピーして使用するアプリケーションリポジトリを提供します。リポジトリには、アプリケーションファイルの固定セットであるタグが含まれているため、部分的に構築されたアプリケーションを使用して作業を開始できます。ServiceNow が提供するリポジトリを個人開発者インスタンス (PDI) にコピーしてインポートすることで、モジュール内の実践的な演習に必要なすべてのファイルを取得できます。
注意:ServiceNow が開発者プログラムの学習コンテンツで GitHub を使用する方法の詳細と、リポジトリをフォークしてアプリケーションをインポートする方法に関するビデオを見るには、『GitHub ガイド』を参照してください。
この演習では、次のことを行います。
重要:リポジトリを既にフォークしてインポートしている場合は、次の演習に進み、タグから分岐を作成して、アプリケーションファイルを PDI にロードできます。モジュールを完了するには、NeedIt アプリケーションファイルが必要です。
演習のこのセクションでは、開発者サイトの学習コンテンツで使用するアプリケーションリポジトリのパーソナルフォークを作成します。
演習のこのセクションでは、アプリケーションリポジトリを ServiceNow にインポートします。プロセスの一環として、まず GitHub アカウントの資格情報レコードを作成してから、Studio を使用してアプリケーションリポジトリを PDI にインポートします。
演習 (4/21)
この演習では、モジュールで使用するアプリケーションファイルを含むデータのインポートモジュールのために、NeedIt アプリケーションの分岐を作成します。
注意:この演習を開始する前に、「演習:データのインポートモジュールのためにリポジトリをフォークしてアプリケーションをインポートする」で説明したように、NeedIt リポジトリをフォークしてインポートしておく必要があります。
記事 (5/21)
ServiceNow にデータをインポートする前に、次の作業を実行することをお勧めします。
不要なデータを削除することは、事前に計画を立てることよりもはるかに困難です。
この例では、従業員の誕生日と就業日がスプレッドシートでトラッキングされています。比較的新しい従業員の場合、特別な機会は Employee Special Days アプリケーションで追跡されます。データ用に 2 つの場所を維持する代わりに、履歴データを Employee Special Days アプリケーションにインポートして、データを一か所に保存します。重複レコードと不完全なレコードが検出され、ソースファイルから削除されてから、インポートが行われます。
ソースファイルの列をターゲットテーブルの列にマッピングする計画を作成します。この例では、スプレッドシートの列を [機会] テーブルのフィールドにマッピングします。フォームフィールドの吹き出しは、スプレッドシートの列を指します。たとえば、スプレッドシートの列 B は、ターゲットテーブルの [特別行事 (Special occasion)] フィールドにマッピングされます。
記事 (6/21)
データソースは、インポートするデータを定義するものです。データソースを作成できるのは管理者ユーザーのみです。このモジュールでは、データソースは Microsoft Excel スプレッドシートです。その他のデータソースとしては、次のようなものが考えられます。
Studio で、スコープ対象のアプリケーションのデータソースを作成します。データソース構成の例を見るには、ServiceNow ブラウザーのメインウィンドウで Application Navigator を使用して、[システムインポートセット] > [管理] > [データソース] を開きます。MySQL データベースにデータ連携するための JDBC データソースの例は、次のようになります。
データソースの構成フィールドは、データソースのタイプによって異なります。JDBC を 使用して MySQL データベースに接続するには、[データベース名]、[ユーザー名]、[パスワード]、[サーバー]、[データベースポート]、[クエリ]、および [テーブル名] が必要です。[クエリ] フィールドの値が SQL ステートメントの場合、SQL フィールドが表示されるため、有効な SQL ステートメントを指定する必要があります。
記事 (7/21)
データは、データソースからターゲットテーブルに直接インポートされません。データをインポートする手順は次のとおりです。
Studio を使用して、データソースと変換マップを作成します。他のデータインポート操作はすべて ServiceNow ブラウザーのメインウィンドウで行われ、スコープ対象のアプリケーションの一部としてキャプチャされることはありません。
記事 (8/21)
ステージングテーブルにデータソースからデータをロードするには、ServiceNow ブラウザーのメインウィンドウで、Application Navigator を使用して [システムインポートセット] > [データのロード] を開きます。設定オプションは、データソースによって異なります。この例では、データソースは Excel ファイルです。ステージングテーブル x_snc_employee_spe_occasions_staging は動的に作成されます。
[送信] ボタンをクリックして、Excel ファイルからステージングテーブルにデータをロードします。
レコードがステージングテーブルにインポートされると、[進行状況] ページが表示されます。
データがロードされたら、[次のステップ...] セクションの [変換マップを作成] リンクをクリックして、ステージングテーブルからターゲットテーブルにデータをマッピングします。
記事 (9/21)
変換マップは、ステージングテーブルの列をターゲットテーブルの列と照合します。すべてのインポート操作には、少なくとも 1 つの変換が必要です。
テーブル変換マップを設定します。
ServiceNow の [一致フィールドの自動マップ] 関連リンクをクリックして、ステージングテーブルの列を、列名に基づいてターゲットテーブルの列と照合します。自動マッピングされたフィールドが [フィールドマップ] セクション (タブ) に表示されます。
ステージングテーブルからターゲットテーブルへのフィールドへの自動マッピングが常に可能であるとは限りません。フィールドを手動でマッピングするには、[マッピング支援] 関連リンクをクリックします。
ステージングテーブルのフィールドをマップに追加し、ターゲットテーブルのフィールドとペアリングします。マップでフィールドを追加または削除するには、フィールドをクリックして強調表示し、[追加] または [削除] ボタンをクリックします。マップ内でフィールドを移動するには、クリックしたままドラッグします。
[データビューアー] セクションまでスクロールして、マップが適用されたときにステージングテーブルのレコードがどのように表示されるかを確認します。マッピングされたステージングテーブルのレコードをターゲットテーブルのレコードと比較して、フィールド値と書式設定が正しいかどうかを確認します。
すべてのフィールドをマッピングする必要はありません。ターゲットテーブルにインポートしないフィールドがソースデータに含まれている可能性があります。この例では、ソースデータの [日付] フィールドがまだマッピングされていません。
マッピングが完了したら、[保存] ボタンをクリックします。
記事 (10/21)
変換マップを実行すると、ステージングテーブルからターゲットテーブルにデータが移動します。変換マップを実行するには、テーブル変換マップレコードの [変換] 関連リンクをクリックします。
[インポートセットと変換マップを指定] フォームで、実行する変換マップが [選択したマップ、順番に実行] スラッシュバケットにあることを確認します。[変換] ボタンをクリックします。
[進行状況] ページに、変換の [ステータス] と [完了コード] が表示されます。[完了コード] の値が [成功] でも、レコードが正しくインポートされたという意味ではありません。[完了コード] は、変換が正常に実行されかどうかを示すものであり、レコードのデータの完全性を示すものではありません。
[インポートログ] リンクをクリックして、データにエラーがあったかどうかを確認します。この例では、変換とインポートが成功しました。8 つのレコードが変換され、挿入されました。
この例では、変換は正常に完了しましたが、インポートでエラーが発生しました。レコードが挿入されませんでした。
記事 (11/21)
データのインポートの最後のステップは、予想されるデータが予想される形式でレコードに含まれていることを確認することです。最初に確認するのはインポートセットです。[次のステップ...] で、[ISET001XXXX] リンクをクリックします。
[インポートセット] レコードで、[インポートセット実行] セクション (タブ) までスクロールします。予想される数のレコードが挿入されたことを確認します。レコードが無視またはスキップされた場合、その理由を特定するための調査が必要となります。
[インポートセット行] セクション (タブ) に切り替えます。[プレビュー] アイコン () にカーソルを合わせると、インポートされたデータが表示されます。[プレビュー] アイコンには完全なレコードは表示されません。インポートされたデータのみが表示されます。レコード全体を表示するには、[レコードを開く] ボタンをクリックします。
インポートされた [機会] レコードでは、必須の [行事の日付 (Occasion date)] フィールドにデータがありません。ユーザーがフォームでレコードを開く際に、必須フィールドに値を入力してからレコードを保存する必要があります。インポート時に必須フィールドの値を必須にするには、変換マップの設定時に [必須項目を強制] の値を [すべてのフィールド] または [マッピングされたフィールドのみ] に設定します。
演習 (12/21)
このモジュールでは、NeedItImportData.csv ファイルからレコードと次の 4 つのフィールドをインポートします。
インポート中のエラーは、[NeedIt 必要な場合フィールドの日付] ビジネスルールが原因で発生します。このビジネスルールでは、過去または当日の [必要な場合 (When needed)] フィールド値を使用して NeedIt 要求を送信できません。しかし、日付フィールドをマップしておらず、フィールドに値がないためにエラーが発生しています。インポートを処理するには、ビジネスルールを一時的に非アクティブにします。これを行うと過去および当日の NeedIt 要求を送信できますが、これは望ましい動作ではありません。代わりに、[変換マップ] の設定を変更してください。
記事 (13/21)
日付を含むフィールドでは、データソースの日付形式と ServiceNow が想定する日付形式の形式が一致しないため、インポート時にエラーが発生することがよくあります。
形式の不一致を修正するには、編集のため変換マップを開きます。[フィールドマップ] 関連リストまでスクロールし、[ソースフィールド] 列で日付フィールドのリンクをクリックします。
[日付形式] フィールドを使用して、ステージングテーブルのデータのフィールドの日付と時刻の形式を指定します。ServiceNow で、日付がターゲットフィールドが想定する形式に変換されます。
[更新] ボタンをクリックしてフィールドマップを保存し、データ変換を実行します。
記事 (14/21)
ServiceNow では、インポートセットによってテーブルのすべての必須項目に値を入力しなければならないわけではありません。変換マップの [必須項目を強制] オプションで、データをインポートするときに必須項目に値を入力する必要があるかどうかを決定します。
スプレッドシートから Employee Special Days アプリケーションにレコードをインポートする直前に、アプリケーション開発者が必須項目の [従業員メール] を [機会] フォームに追加しました。このスプレッドシートのデータをインポートしても、必須項目には値が表示されません。
ソースデータには、[従業員メール] フィールドにマッピングできる列がありません。ひとつの解決策として、アプリケーションのすべての必須項目に列が存在するようにソースデータを変更することがあります。レコードが多数あると、ソースの変更に時間がかかり、作業が煩雑になる可能性があります。もうひとつの解決策は、ターゲットフィールドの値を設定するスクリプトを作成することです。
変換マップを開き、[スクリプトを実行] 設定オプションを選択します。[従業員メール] フィールドに入力するサーバーのスクリプトを記述します。
この例では、会社のメールアドレスの形式は firstname.lastname@example.com です。ステージングテーブルの [従業員] 列の値を使用して、スクリプトが [従業員メール] のターゲットフィールドのメールアドレスを作成します。
source オブジェクトは自動的にインスタンス化されます。source オブジェクトのプロパティはステージングテーブルのフィールドです。source のプロパティ値はソースデータの値です。
target オブジェクトは自動的にインスタンス化されます。target オブジェクトのプロパティはターゲットテーブルのフィールドです。target のプロパティ値は、スクリプトの値と [フィールドマップ] の値です。
開発者向けのヒント:[フィールドマップ] は [変換マップ] のスクリプトよりも優先されます。
開発者向けのヒント:ソースデータやスクリプトでは文字列「NULL」を使用しないでください。「NULL」は予約語です。「Null」と「null」は使用できますが、「NULL」は使用できません。
記事 (15/21)
データをインポートする前に、ソースデータとターゲットテーブルの間の衝突をどのように処理するかを計画します。
[変換マップ] の [フィールドマップ] にある [結合] オプションを使用して、ステージングテーブルの行がターゲットテーブルのレコードと一致するかどうかを判断します。[結合] オプションを使用すると、フィールドがレコードの一意のキーになります。衝突のチェックにフィールドを使用するには [結合] の値を [true] に設定します。
結合は、レコードを一意に識別できるよう、十分な数のフィールドで行います。この例では、1 人の従業員に複数の [機会] レコード ([誕生日] と [勤続記念日 (Work Anniversary)]) がある可能性があるため、[u_employee] フィールドでの結合だけではレコードを一意に識別するには不十分です。複数のフィールドで結合する際、衝突が発生するためにはすべての結合フィールドが一致する必要があります。一部の結合フィールドが一致するがすべてが一致しない場合、一致は発生しません。
記事 (16/21)
変換イベントは、インポートセットテーブルをターゲットテーブルに変換するプロセス中に発生します。変換イベントスクリプトは、変換プロセスのさまざまなポイントで変換動作を変更します。
変換イベントスクリプトを作成するには、変換マップの [変換スクリプト] 関連リストに切り替えて、[新規] ボタンをクリックします。
変換スクリプトのトリガーの [時期] オプションでは、変換プロセスのどのタイミングでスクリプトを実行するかを指定します。
[時期] フィールドの選択肢は次のとおりです。
たとえば、結合の際に、一致するレコードのみを更新して新しいレコードを挿入しないという要件が考えられます。レコードのみを更新するという要件を満たすには、onBefore の変換スクリプトが必要です。onBefore スクリプトは、ServiceNow がターゲットテーブルに一致するレコードがあるかどうかを判断した後、挿入が行われる前に実行されます。
action の文字列変数が自動的に作成されます。考えられる値は insert と update の 2 つです。結合によって一致する (update) か一致しない (insert) かが判断された後に、アクションの変数が設定されます。
ignore の Boolean 変数が自動的に作成されます。true の場合、ignore 変数によってソースデータ行の変換プロセスが停止されます。
ServiceNow のサイト docs.servicenow.com に、変換スクリプトの全変数のリストが記載されています。変換イベントスクリプトの変数 (Transformation Event Scripts Variables)
演習 (17/21)
このモジュールでは、NeedItImportData.csv ファイルの変換マップを変更します。手順は次のとおりです。
質問:[必要な場合 (When needed)] フィールドのタイムスタンプが 00:00:00 であるのはなぜですか?
ソリューション:ソースデータには日付値がありますが、時刻値はありません。[必要な場合 (When needed)] フィールドは、日付/時刻データタイプを使用します。時刻が指定されていない場合、ServiceNow の時間はデフォルトで 00:00:00 に設定されます。
質問:2 つのレコードの [簡単な説明] フィールドの値が変更されたのはなぜですか?
回答:変換マップは、[簡単な説明] を除くインポートフィールドで結合されます。データが変換されたときに、ServiceNow がデータソース (.csv ファイル) の 2 つの行を NeedIt テーブルの 2 つのレコードと照合してレコードを更新しました。
演習 (18/21)
開発者は、GitHub のようなソースコントロールアプリケーションを使用して、個人開発者インスタンス (PDI) の外部で変更をコミット (完了した作業を保存) できます。アプリケーションに対する変更内容をコミットして、作業をソースコントロールに保存します。
この演習では、このモジュールで完了した作業を GitHub リポジトリに保存します。
注意:ServiceNow が開発者プログラムの学習コンテンツで GitHub を使用する方法の詳細と、作業を保存する方法に関するビデオを見るには、『GitHub ガイド』を参照してください。
記事 (19/21)
ServiceNow へのデータのインポートに関する理解を確認したいときがあるかもしれません。自分の進行状況を評価するには、次の質問が役立ちます。質問ごとに回答を決定し、質問の任意の場所をクリックして回答を表示します。
質問:ServiceNow にデータをインポートする前にすべきことは、次のうちのどれですか?複数の回答が正解の場合があります。
回答:正解は 1、3、4 です。データをインポートする前にインポートの戦略を定義しておくと、時間と労力を節約できます。インポート後に不要なレコードを削除したり修正したりすると、手間と時間がかかる場合があります。飼い犬と遊ぶ時間を取ることはお勧めしますが、データのインポートの戦略を計画するために時間をかける必要はありません。
質問:正誤問題?データをインポートする際に重複したレコードを作成したくない場合は、インポートする前にすべての重複レコードをインポートソースから削除する必要がある。
回答:誤りです。インポートデータセットに正確な情報が入っているのは良いことですが、重複レコードを取り扱う計画がある場合は、データセットから重複レコードを削除しなくてはならないわけではありません。たとえば、結合したり、変換スクリプトを使用して重複レコードの取り扱いを決めたりすることも可能です。
質問:ServiceNow にデータをインポートする際に使用できるデータソースは、次のうちのどれですか?複数の回答が正解の場合があります。
回答:正解は 1、3、4、5 です。TXT (テキスト) ファイルは、データソースとして使用できるファイルタイプではありません。
質問:データインポートのプロセスについて最も的確に説明しているのは次のうちのどれですか?
回答:回答 4 が正解です。インポートプロセスのステップをスキップしたり、ステップの順序を変更したりすることはできません。
質問:変換マップについて最も的確に説明しているのは次のうちのどれですか?
回答:回答 5 が正解です。変換マップは、ステージングテーブルの列をターゲットテーブルの列にマッピングします。変換マップはデータソースとはやり取りしません。変換マップで日付形式の問題を修正することはできますが、それが主な目的ではありません。
質問:必須のターゲットテーブルのフィールドの列や値がデータソースにない場合に当てはまるものは、次のうちのどれですか?複数の回答が正解の場合があります。
回答:すべての回答が正解です。必須フィールドに値がない場合にインポート中に何が起こるかは、変換マップの [必須項目を強制] 設定オプションによって異なります。レコードは、[必須項目を強制] オプションの条件が満たされるとインポートされます。その条件とは、必須フィールドの値が要求されない、マッピングされたフィールド値が必須である、すべての必須フィールドに値が必要であるのいずれかです。[必須項目を強制] オプションの条件が満たされていない場合、レコードはインポートされません。
質問:ServiceNow へのデータのインポートについて正しいのは、次のうちのどれですか?
回答:回答 2 が正解です。重複レコードがターゲットテーブルに挿入される可能性があり、重複が望ましくないインポートの場合は、変換前に結合することをお勧めします。結合は絶対に必要なわけではありません。ステージングテーブルは再利用が可能です。すべてのアプリケーションにインポートされたデータがあるわけではないため、一部のアプリケーションにはステージングテーブルがない場合があります。日付フィールドと他のすべてのデータタイプのフィールドをマッピングする必要はありません。 開発者はステージングテーブルからすべての列をインポートする必要はありません。
質問:ステージングテーブルのレコードとターゲットテーブルのレコードの一致が結合によって検出された場合、考えられる結論は次のうちのどれですか?
回答:正解は 3 と 4 です。変換マップの実行が開始されると、すべてのステージングテーブルレコードがターゲットテーブルで挿入、更新、無視、またはスキップされるまで、インポートの実行が継続されます。インポートの途中で停止してユーザーに操作を要求したり、以前にインポートしたレコードを削除したりすることはありません。
質問:変換イベントスクリプトでは、サーバー側のスクリプトを使用して変換の動作を変更します。変換イベントスクリプトのロジックはいつ実行されますか?複数の回答が正解の場合があります。
回答:回答 4 と 5 が正解です。実行される可能性のある変換イベントスクリプトのタイプは、onStart、onAfter、onBefore、onChoiceCreate、onComplete、onForeignInsert、および onReject です。
記事 (20/21)
コアコンセプト:
記事 (20/21)
「データのインポート」モジュールの完了おめでとうございます。データのインポートへの関心に基づいて、さらに次のことも学んでいただけます。