バージョン:Rome
REST データ連携

データストリームアクション

記事 (1/32)

データストリームアクションの目的

このモジュールでは、次のことを学習します。

  • データストリームアクションを定義する

  • ページネーションされた Web サービスを処理するデータストリームアクションを作成する

  • データストリームアクションのセクションを構成する

    • 入力
    • アクションの前処理
    • 要求
    • 解析中
    • 出力
  • データストリームアクションをテストする

  • フローでデータストリームアクションを使用する

前提条件:このモジュールは、Flow Designer、カスタムアクション、送信 REST 要求、および IntegrationHub のトピックに精通していることを前提としています。

  • フロー
  • アクション
  • フローロジック
  • フロー実行
  • フローテスト
  • カスタムアクションの作成と使用
  • 送信 REST 要求
  • IntegrationHub スポーク

Flow Designer の基本については、「Flow Designer の使用」モジュール、「Flow Designer の開発」モジュールでのカスタムアクションの作成と使用、「送信 REST データ連携」モジュールでの送信 REST 要求、「IntegrationHub の REST」モジュールでの IntegrationHub について学ぶことができます。

記事 (2/32)

この学習モジュールについて

重要:この学習モジュールの内容は、Quebec ServiceNow リリース用に最後に更新されたもので、Rome リリースでは更新されていません。Rome リリースとこの学習モジュールのコンテンツとの間に違いが見られる場合があります。

Rebrickable Spoke アプリケーションは、アプリケーション作成の基になる概念とプロセスを紹介し、デモンストレーションするために、この学習モジュール全体で使用されます。受講者は Rebrickable Spoke アプリケーションを構築しません。

実習では、World Glaciers Spoke アプリケーションを開発します。

演習は、次の 3 つの方法で示されます。

  • ナビゲーションペインの [演習] アイコン。
  • ページ上部の [演習] アイコンと「演習」という単語。
  • ページタイトルの「演習」または「課題」という単語。

ナビゲーションとページタイトルに、強調表示された演習ページのアイコンと演習プリフィックスが表示された、演習ページの上部。

World Glaciers Spoke アプリケーションでは、ユーザーが World Glaciers Web サービスを使用して氷河に関する情報を取得できます。

記事 (3/32)

IntegrationHub Enterprise Pack の有効化

IntegrationHub には、次の 4 つのサブスクリプションレベルがあります。

  • スターターパック
  • 標準パック
  • プロフェッショナルパック
  • エンタープライズパック

サブスクリプションのレベルごとに、追加のスポークと機能が入っています。IntegrationHub サブスクリプションパックには IntegrationHub サブスクリプションが必要です。サブスクリプションパックは ServiceNow 担当者が有効化する必要があります。IntegrationHub サブスクリプションパックには、関連するプラグインがまだ有効になっていない場合のデモデータとアクティベーションが入っています。会社のインスタンスで IntegrationHub を要求する方法については、ドキュメントを参照してください。各サブスクリプションレベルに付属する機能について、ドキュメントに詳しく記載されています。

注意:IntegrationHub を本番インスタンスで使用するには、サブスクリプションが必要です。IntegrationHub を非本番および個人の開発者インスタンスで有効化すれば、サブスクリプションなしでデータ連携を構築およびテストすることは可能です。この学習モジュールでは、エンタープライズパックを使用します

個人の開発者インスタンスで IntegrationHub を有効化する

開発者サイトの [自分のインスタンス (My Instance)] セクションから、Personal Developer Instance (PDI) の ServiceNow IntegrationHub Enterprise Pack Installer プラグインを有効化します。開発者サイトの任意のページから、[アカウント] メニューをクリックし、[プラグインの有効化] インスタンスアクションを選択します。ServiceNow IntegrationHub Enterprise Pack Installer[有効化] ボタンをクリックして、すべての IntegrationHub プラグインを有効化します。

個人の開発者インスタンスのプラグイン選択リスト。

ServiceNow IntegrationHub Enterprise Pack Installer プラグインでは IntegrationHub 関連の複数のプラグインを有効化するため、完了までに 10 分ほどかかります。プラグインの有効化が完了すると、開発者サイトからメールが送信されます。

演習 (4/32)

演習:IntegrationHub プラグインを有効にする

この演習では、Personal Developer Instance (PDI) で ServiceNow IntegrationHub Enterprise Pack Installer プラグインを有効化します。

IntegrationHub プラグインを有効にする

  1. PDI を管理するには、開発者サイトにサインインします。

    1. 開発者サイトを開きます。
    2. サインインしていない場合は、開発者サイトにサインインします。
      1. ページヘッダーの [サインイン] リンクをクリックします。
      2. メールアドレスを入力してください。
      3. [次へ] をクリックします。
      4. [パスワード] を入力します。
      5. [サインイン] ボタンをクリックします。
  2. ServiceNow IntegrationHub Enterprise Pack Installer プラグインを有効化します。

    1. [アカウント] メニューを開き、[プラグインの有効化] インスタンスアクションを選択します。

      [アカウント] メニューから [プラグインを有効にする] インスタンスアクションをクリックします。

    2. [あなたのインスタンスアクション (Your instance actions)] ダイアログで、[プラグインのフィルター条件を入力 (Type to Filter Plugins)] フィールドを使用して IntegrationHub プラグインを検索します。

      [プラグインのフィルター条件を入力 (Type to Filter Plugins)] フィールドは、[あなたのインスタンスアクション (Your Instance Action)] ダイアログのコンテンツフレームの上部にあります。

    3. ServiceNow IntegrationHub Enterprise Pack Installer[有効化] ボタンをクリックします。

      個人の開発者インスタンスのプラグイン選択リストに ServiceNow IntegrationHub Enterprise Pack Installer プラグインと [有効化] ボタンが表示されているところ。

  3. しばらくすると、開発者サイトからプラグインがアクティブであることを示すメールが届きます。

    プラグインの有効化が完了したことを示すメール。

演習 (5/32)

演習:World Glaciers Web サービスを探索する

この演習では、World Glaciers Web サービスについて詳しく見ていきます。

World Glaciers Web サービスとは?

World Glaciers Web サービスは、無料で公開されているソースのデータを使用して、地球上の氷河に関する情報を提供します。この Web サービスは、JSON 形式のページネーションされたデータを返します。World Graciers Web サービスは、ServiceNow インスタンスで実行される Scripted REST API です。

World Glaciers Web サービスのドキュメントを探索する

  1. Web ブラウザーで、World Glaciers Web サービスのドキュメントを開きます。ドキュメントを使用して、次の質問に回答してください。

    質問World Graciers Web サービスは認証を必要としますか?
    回答World Graciers Web サービスは認証を必要としません。

    質問World Graciers Web サービスユーザーは、Glacier レコードを作成または更新できますか?
    回答World Glaciers Web サービスには、GET メソッドのみが含まれています。Web サービスは読み取り専用です。

    質問:必要なクエリパラメーターはいくつありますか?
    回答first_recnum_recs_per_page の 2 つの必須パラメーターがあります。

    質問:結果のページごとに返されるレコードの最大数はいくつですか?
    回答:結果のページごとに返されるレコードの最大数は 10 です。num_recs_per_page クエリパラメーターで許可される値は 1 〜 10 です。

    質問:どの World Graciers Web サービス REST メソッドが、氷河の緯度と経度を返すのですか?
    回答:2 つの World Graciers Web サービス REST メソッドが、氷河の緯度と経度を返します。

    • get_glaciers
    • get_glaciers_latlong

      質問:無効なクエリパラメーター値が World Graciers Web サービス要求で渡された場合、どの応答コードが送信されますか?
      ソリューション:無効なクエリパラメーターが World Glaciers Web サービス要求に渡された場合、エラーコード 442 が返されます。

    • 後で参照できるように、World Glaciers Web サービスのドキュメントウィンドウやタブは開いたままにしておきます。

World Glaciers Web サービスの応答を調べる

  1. Web ブラウザーで次のページを開きます。https://sndevapiserver.service-now.com/api/x_snc_world_glacie/v1/world_glaciers/getglaciers/latlong?num_recs_per_page=3&first_rec=1908

    質問:URL を調べます。World Graciers Web サービスは、いくつの氷河レコードを返しますか?
    回答num_recs_per_page クエリパラメーターは、返される氷河レコードの数を指定します。ステップ 1 の URL の値では、氷河レコードは 3 つ返されます。

    質問:最初に取得する氷河レコードの順序番号は何ですか?
    回答first_rec クエリパラメーターは、取得する最初の氷河レコードの順序番号を指定します。ステップ 1 の URL の値では、最初に取得するレコードは 1908 です。

  2. World Glaciers Web サービスの応答をよく見ます。応答の構造に注目してください。

    質問:応答の一部として返された氷河レコードはいくつですか?氷河の名前は何ですか?
    回答:予想通り、3 つの氷河レコードが返されました。氷河の名前は、ドムジョ A、ドムジョ B、ドムジョ C です。3 つの氷河はすべてアルゼンチンにあります。

    質問:レコードの 2 ページ目が要求された場合、2 ページで取得する最初のレコードの順序番号はいくつですか?
    回答:Web サービス応答の [nextRec] タグは、結果の次のページで取得する最初のレコードの順序番号を指定します。この演習の URL を使用すると、結果の 2 ページ目は順序番号 1911 で始まります。

  3. 手順 1 の URL で、num_recs_per_page クエリパラメーターの値を 14 に変更します。

    質問World Glaciers Web サービスは、レコードが 14 個あるページを返しますか?何が起こったのか説明してください。
    回答World Glaciers Web サービスでは、num_recs_per_page の値を 1 から 10 までにする必要があります。num_recs_per_page クエリパラメーターに 14 という値を渡したことで、Web サービスからステータス 442 のエラーが返されました。エラーのステータス番号を確認するには、場合によりブラウザーのコンソールを確認する必要があります。

  4. num_recs_per_page クエリパラメーターの値を有効な値に変更し、要求を再実行します。

  5. 結果を調べて、予期した氷河のレコードが返されたことを確認します。

  6. Web サービスの応答ウィンドウ/タブを閉じます。

記事 (6/32)

データストリームアクションとは?

データストリームアクションは、REST または SOAP 要求を Flow Designer から次のような API に送信します。

  • 10 MB を超える応答を返す
  • ページネーションされた応答を返す

データストリームアクションにより、[For Each] フローロジックを使用してデータストリーム内の各オブジェクトを処理することで、フローが大きな要求を処理できます。

この画像は、REST または SOAP API から Flow Designer に入力される情報のページを示しています。フローに示されているデータストリームアクションは、受信データからプロパティと値を抽出します。

記事 (7/32)

データストリームアクションの作成

Flow Designer のランディングページの任意のタブからデータストリームアクションを作成するには、[新規] ボタンをクリックして [データストリーム] メニューアイテムを選択します。

[新規] ボタンは、ランディングページの右上にあります。そのボタンをクリックし、[データストリーム] を選択します。

または、[フロー、サブフロー、またはアクションの作成] ボタン ([フローまたはアクションの作成] ボタン) をクリックし、[データストリーム] メニューアイテムを選択します。

ランディングページ以外の Flow Designer のタブからデータストリームアクションを作成するためのボタンは、タブの右側に白いプラス記号が付いた灰色のボタンです。

[アクションプロパティ] ダイアログが開きます。

アクションプロパティの構成

以下のようにアクションプロパティを構成します。

[フロープロパティ] ダイアログが表示され、新しいフローの基本プロパティを設定できます。

  • アクション名:アクションの一意の名前。
  • アプリケーション:アクションのアプリケーションスコープ。
  • アクセス可能: アクションを利用可能にする対象を、すべてのアプリケーションスコープにするか、アクションが作成されたスコープのみにするかを選択するオプション。
  • 保護:アクションを読み取り専用にするオプション。
  • カテゴリ:アクションをグループ化するカテゴリ。アプリケーションで使用できるカテゴリがない場合は、[レコードをルックアップ (Lookup records)] ボタン ([レコードをルックアップ (Lookup records)] ボタンは、[カテゴリ] フィールドの右側にあります。) をクリックし、[新規] ボタンをクリックしてカテゴリを作成します。
  • 説明:アクションの実行内容を記述するフィールド。(A field to document what the action does.)
  • アクション注釈:アクションのデフォルトの注釈テキスト。(The default annotation text for the action.)

開発者向けのヒント:アクション名にはスペースを使用できます。アクションには分かりやすい名前を使用します。

記事 (8/32)

データストリームアクションのセクション

データストリームアクションは、5 つのセクションで構成される固定の構造になっています。

新しいデータストリームアクションのステップパネルには、入力、アクション前処理、要求、解析、出力の 5 つのステップがあります。

  • 入力:変数をアクションステップと出力に渡します。アクション入力は、Flow Designer でのアクションの構成オプションです。
  • アクション前処理:アクションが最初の API 要求を送信する前の前処理スクリプトを実行します。
  • 要求:アクションが API 要求を送信する方法を設定します。
  • 解析:アクションでデータストリーム要素を複雑なデータオブジェクトに分離する方法を設定します。
  • 出力:アクション内で使用される変数をフローで使用できるようにします。アクション出力はフロー内のデータピルです。

データストリームアクションのセクションへのステップの追加

[アクションアウトライン] セクションを選択して、データストリームアクションを構成します。[アクションアウトライン] の [アクション前処理][要求]、および [解析] セクションでは、特定の構成オプションを選択するとアクションにステップが追加されます。たとえば、[解析中] セクションで、[各レコードをどのように識別しますか] フィールドの値が JSON/XML スプリッターである場合、[解析中] セクションに「分割」ステップ が追加されます。

[解析] セクションで、[各レコードをどのように識別しますか] フィールドで [JSON/XML スプリッター] を選択したため、スプリッターステップが追加されています。

開発者は構成オプションを使用してデータストリームアクションにステップを追加できますが、それ以外のステップを追加することはできません。開発者がデータストリームアクションにステップを追加できるのは、[アクションアウトライン] の [アクション前処理][要求]、および [解析] セクションのオプションを構成した場合のみです。

演習 (9/32)

演習:IntegrationHub スポークとデータストリームアクションを作成する

この演習では、World Glaciers のスポークとデータストリームアクション入力を作成します。

注意:PDI が自動的に App Engine Studio を開く場合は、PDI にアクセスするために使用するユーザーロールを変更する必要があります。演習を完了するには、[管理者] ユーザーロールに切り替えます

World Glaciers Spoke を作成する

  1. Studio でアプリケーションを作成します。

    1. Application Navigator を使用して [システムアプリケーション] > [Studio] を開きます。

    2. [アプリケーションを作成] ボタンをクリックします。

      注意:Microsoft Edge または Internet Explorer を使用している場合は、従来のアプリケーションクリエーターでしか作業できない可能性があります。Safari を使用している場合、Guided App Creator を使用するにはバージョン 12 以降が必要です。Guided App Creator で作業するには、別のブラウザーを使用してください。

  2. アプリケーションを構成します。

      名前 World Glaciers Spoke
      説明 World Glaciers Web サービスを使用して氷河の情報を取得する
      スコープ (この値は、自動的に入力されます)
  3. [作成] ボタンをクリックします。

  4. [Studio で続行 (詳細)] リンクをクリックします。

  5. Studio のタブを閉じます。

World Glaciers のデータストリームアクションを作成する

  1. ServiceNow ブラウザーのメインウィンドウ (Studio ではない) で、Application Navigator を使用して [プロセス自動化] > [Flow Designer] を開きます。

  2. [新規] ボタンをクリックし、[データストリーム] メニューアイテムを選択して、データストリームアクションを作成します。

    [新規] ボタンは、ランディングページの右上にあります。そのボタンをクリックし、[データストリーム] を選択します。

  3. 以下のようにアクションプロパティを構成します。

      アクション名 World Glaciers - LatLong
      説明 このデータストリームアクションは World Glaciers Web サービスとやり取りして、氷河に関する緯度と経度の情報を取得します。(This Data Stream Action interacts with the World Glaciers web service to get latitude and longitude information about glaciers.)
      アクションの注釈 World Glaciers のデータストリームアクションの演習 (World Glaciers Data Stream Action exercises)

    このステップの設定を示す [アクションプロパティ] ダイアログ。

  4. [送信] ボタンをクリックします。

記事 (10/32)

アクションの入力と出力

データストリームアクションでのアクションの入力と出力は、Flow Designer や IntegrationHub のアクションの場合と同じように動作します。アクションの入力と出力の詳細については、「Flow Designer の開発」トレーニングモジュールを参照してください。

アクションの入力

アクションの入力では、変数をアクションステップと出力に渡します。アクションの入力は、Flow Designer でのアクションの構成オプションです。

この例では、フロー内のアクションを設定するフィールドへのアクション入力のマッピングを示します。

アクションの出力

アクション出力を使用して、アクション内で使用される変数をフローで使用できるようにします。アクション出力はフロー内のデータピルです。

アクション出力はフロー内のデータピルです。

演習 (11/32)

演習:アクション入力を作成する

この演習では、World Graciers API の次のようなアクション入力を作成します。

  • 最初の氷河レコード
  • 1 ページあたりの氷河レコード数
  • 取得するページ数

クエリパラメーターに対するアクション入力

World Glacier Web サービスには、first_recnum_recs_per_pageという 2 つの必須のクエリパラメーターがあります。演習のこのセクションでは、Web サービスのクエリパラメータのアクション入力を作成します。

  1. [アクションアウトライン] で、[入力] セクションが選択されていることを確認します。
  2. first_rec クエリパラメーターのアクション入力を作成します。
    1. [+ 入力の作成] ボタンをクリックします。
    2. アクション入力を構成します。
        ラベル 最初の氷河 (First glacier)
        名前 first_glacier
        タイプ 文字列
        必須 選択済み
  3. num_recs_per_page クエリパラメーターのアクション入力を作成および構成します。
      ラベル 1 ページあたりの氷河数 (Glaciers per page)
      名前 glaciers_per_page
      タイプ 文字列
      必須 選択済み

この画像は、演習の指示に従って構成された 2 つのアクション入力を示しています。

  1. [保存] ボタンをクリックします。

課題:アクション入力を取得するページ

データストリームアクションでは、取得する氷河のレコードのページ数を把握する必要があります。ここでの課題は、取得するページ数のアクション入力を作成することです。「 取得するページ数 (Pages to get)」というラベルを使用します。すでに作成したアクション入力を手本にして、「取得するページ数 (Pages to get)」のアクション入力の残りの部分を構成します。

この画像は「取得するページ (Pages to get)」アクション入力の構成を示しています。ラベル:取得するページ、名前:pages_to_get、タイプ:文字列、必須:選択済み。

記事 (12/32)

[アクション前処理] セクション

[アクション前処理] セクションは、データストリームアクション 1 回につき 1 回実行されます。アクション前処理は、最初の API 要求の前に行われます。

アクション入力は、フロー内のアクションを構成するために使用するフィールドになります。

データストリームアクションにステップを追加するように [アクション前処理] セクションを構成します。

[前処理スクリプトを有効化] を選択し、[アクション前処理] セクションに [スクリプト] のステップを追加します。

  • 前処理スクリプトを有効化[アクション前処理] セクションにスクリプトのステップを追加する際に選択します

記事 (13/32)

アクション前処理:スクリプトステップ

データストリームを実行する前に入力を検証したり、デフォルト値を設定したり、要求ペイロードを準備したり、その他の必要なタスクを実行したりするには、アクション前処理スクリプトのステップを使用します。

アクション前処理スクリプトでは、inputsoutputs オブジェクトの両方にアクセスできます。[入力変数] セクションで inputs オブジェクトのプロパティを定義し、[スクリプトステップ] フォームの [出力変数] セクションで outputs オブジェクトのプロパティを定義します。

入力オブジェクトは [入力変数] セクションによって入力されます。出力オブジェクトは [出力変数] セクションによって入力されます。

[必須ランタイム] フィールド

[必須ランタイム] フィールドは、スクリプトの実行場所を決定します。

この例では、[必須ランタイム] フィールドの選択肢を示しています。 [インスタンス] が選択されています。

  • インスタンス:インスタンスからスクリプトを実行します。スクリプトが ServiceNow API またはインスタンスデータにアクセスする必要がある場合は、このオプションを選択します。
  • MID:MID Server からスクリプトを実行します。スクリプトが MID Server スクリプトファイルと API にアクセスする必要がある場合は、このオプションを選択します。このオプションを選択すると、[使用する MID Server を選択] フィールドが表示されます。
  • Vanilla (Core Javascript):インスタンスと MID Server のいずれかからスクリプトを実行します。このオプションは、スクリプトがコア JavaScript API のみを必要としており、ServiceNow API またはインスタンスデータは不要な場合に選択します。

注意:MID Server については、このトレーニングモジュールでは扱いません。

入力変数

入力変数を追加するには、[入力変数] セクションの [+ 変数の作成] ボタンをクリックします。

入力変数は 3 つあります。最初の入力変数は、名前が how_many_pages、値が「取得するページ数」アクションデータピルです。2 番目の入力変数は、名前が page_size、値が「結果数/ページ」アクションデータピルです。3 番目の入力変数は、名前が get_first、値が「最初に取得するページ」アクションデータピルです。

入力変数を設定します。

名前inputs オブジェクトの [入力変数] のプロパティ名。

:入力変数の初期値。値は、ハードコーディングされたもの、データピル、またはハードコーディングされたものとデータピルの組み合わせです。

この例では、入力変数の値はアクション入力によって設定されます。

出力変数

出力変数を追加するには、[出力変数] セクションの [+ 変数の作成] ボタンをクリックします。

出力変数構成には 3 つの変数があります。最初の出力変数は、[ラベル] が [この数のページを取得 (Get this many pages)] 、[名前] が [get_this_many_pages]、[タイプ] が [文字列]、[必須] が [選択済み] です。2 番目の出力変数は、[ラベル] が [ページサイズ]、[名前] が [page_size]、[タイプ] が [文字列]、[必須] が [選択済み] です。3 番目の出力変数は、[ラベル] が [最初に取得 (First to get)]、[名前] が [first_to_get]、[タイプ] が [文字列]、[必須] が [選択済み] です。

出力変数を設定します。

ラベル:人間が判読できるラベル。変数を参照するデータピルで使用します。

名前outputs オブジェクトの [出力変数] のプロパティ名。

タイプoutputsオブジェクトの [出力変数] プロパティのデータタイプ。

必須:処理を続行するために、[出力変数] に [データストリームアクション (Data Steam Action)] の値が必要な場合に選択します。

スクリプト

アクション前処理スクリプトの目的は、outputs オブジェクトプロパティの値を設定することです。データピルを介して、後続のすべてのデータストリームアクションが outputs オブジェクトプロパティにアクセスできます。このスクリプト例では、inputs オブジェクトのプロパティ値が、アクションを呼び出すフローまたはユーザーによってアクションに渡された入力に基づいて設定されます。3 つの inputs オブジェクトのプロパティ値がゼロまたはゼロ未満の場合、outputs のプロパティ値は文字列の値 1 に設定されます。inputs オブジェクトのプロパティがゼロより大きい場合、outputs プロパティ値は inputs オブジェクトのプロパティの中から対応する値に設定されます。

3 つの inputs オブジェクト変数を使用してデータ検証を行うサンプルスクリプト。スクリプトの実行後、outputs オブジェクトのプロパティはすべて 1 または inputs オブジェクトの値になります。

演習 (14/32)

演習:アクション前処理

この演習では、アクション入力の値を検証する次のアクション前処理スクリプトを作成します。

  • first_glacier
  • glaciers_per_page
  • pages_to_get

アクション前処理のスクリプトステップを有効化する

  1. [アクションアウトライン] で、[アクション前処理] セクションを選択します。

    この図では [アクションアウトライン] で [アクション前処理] セクションが選択されたところを示しています。

  2. [アクション前処理] フォームで、[前処理スクリプトを有効化] を選択 (オン) します。

  3. [アクションアウトライン] で、[アクション前処理] セクションの [スクリプトステップ] を選択します。

    この図は [スクリプトステップ] が選択されたところを示しています。

  4. [スクリプトステップ] フォームヘッダーで、「スクリプトステップ」というテキストが編集モードになっています。テキストを「データ検証 (Data Validation)」に変更します。

    フォームとアクションアウトラインの両方で、タイトルが「スクリプトステップ」から「データ検証 (Data Validation)」に変更されました。

スクリプトステップの入力を作成する

演習のこのセクションでは、スクリプトステップの入力変数を作成し、アクション入力をスクリプトステップの入力変数にマッピングします。

  1. first_glacier 入力変数を作成します。

    1. [データ検証] ステップフォームの [入力変数] セクションで、[+ 変数の作成] リンクをクリックします。
    2. first_glacier 入力変数を設定します。
        名前 first_glacier
    3. アクション入力の first_glacier 変数を、[データ検証] ステップの first_glacier 入力変数にマッピングします。
      1. first_glacier [値] フィールドの [データピルピッカー] ボタン ([データピルピッカー] ボタンは、[入力変数] セクションの [値] フィールドの右側にあります。) をクリックします。
      2. [データピルピッカー] フライアウトで、[入力] を選択します。
      3. 2 列目で、[最初の氷河 (First glacier)] を選択します。
        マッピングは [アクション] > [最初の氷河 (First glacier)] です。
  2. glaciers_per_page 入力変数を作成します。

    1. [+ 変数の作成] リンクをクリックします。
    2. 入力変数を設定します。
        名前 glaciers_per_page
        アクション -> 1 ページあたりの氷河数 (Glaciers per page)
  3. pages_to_get 入力変数を作成します。

      名前 pages_to_get
    1. アクション ➞ 取得するページ数 (Pages to get)
      この図は、演習の指示に従って構成された 3 つのデータ検証ステップの入力変数を示しています。
  4. [保存] ボタンをクリックします。

スクリプトステップの出力を作成する

演習のこのパートでは、出力変数を作成します。まだ記述されていないスクリプトでは、出力変数に値が追加されます。

  1. [最初に取得する氷河] 入力変数を作成します。

    1. [データ検証] ステップフォームの [出力変数] セクションで、[+ 変数の作成] リンクをクリックします。
    2. first_glacier 出力変数を設定します。
        ラベル 最初に取得する氷河 (First glacier to get)
        名前 first_glacier_to_get
        タイプ 文字列
        必須 有効
  2. [1 ページあたりの氷河数 (Glaciers per page)] 出力変数を作成します。

    1. [+ 変数の作成] リンクをクリックします。
    2. 出力変数を設定します。
        ラベル 1 ページあたりの氷河数 (Glaciers per page)
        名前 glaciers_per_page
        タイプ 文字列
        必須 有効
  3. [ページ数 (Number of pages)] 出力変数を作成します。

      ラベル ページ数 (Number of pages)
      名前 number_of _pages
      タイプ 文字列
    1. 必須有効
      この図は、演習の指示に従って構成された 3 つのデータ検証ステップの出力変数を示しています。
  4. [保存] ボタンをクリックします。

データを検証するスクリプトを追加する

演習のこのセクションでは、ユーザーが入力したデータを検証するスクリプトを追加します。このスクリプトでは、ユーザー指定の値からマッピングされた input オブジェクトのプロパティを使用して outputs オブジェクトのプロパティ値を設定します。

  1. [スクリプト] フィールドの内容を次のスクリプトに置き換えます。

    (function execute(inputs, outputs) { // If the ordinal number of pages to get (inputs.first_glacier) value // is zero or less than zero, or if the ordinal number is greater than // the number of glacier records in the database, set // outputs.first_glacer_to_get to the string value 1. If not, set the // value of first_glacer_to_get to inputs.first_glacier. if (parseInt(inputs.first_glacier) <= 0 || parseInt(inputs.first_glacier) > 132890) { outputs.first_glacier_to_get = "1"; } else { outputs.first_glacier_to_get = inputs.first_glacier; } // The World Glaciers web service returns a 442 error if the page // size is not between 1 and 10 inclusive. To avoid receiving an // error, check the value of the page size (inputs.glaciers_per_page). // If the value is outside of the allowed range, set // outputs.glaciers_per_page to the string value 1. Otherwise, // set outputs.glaciers_per_page to inputs.glaciers_per_page. if (parseInt(inputs.glaciers_per_page) <= 0 || parseInt(inputs.glaciers_per_page) > 10) { outputs.glaciers_per_page = "1"; } else { outputs.glaciers_per_page = inputs.glaciers_per_page; } // If the number of pages to get (inputs.pages_to_get) value is zero // or less than zero, set outputs.number_of_pages to the string // value 1. If not, set the value of outputs.number_of_pages to // inputs.pages_to_get. if (parseInt(inputs.pages_to_get) <= 0) { outputs.number_of_pages = "1"; } else { outputs.number_of_pages = inputs.pages_to_get; } })(inputs, outputs);
  2. スクリプトを調べて、何をするスクリプトかを理解します。

  3. [保存] ボタンをクリックします。

記事 (15/32)

[要求] セクション

[要求] セクションでは、データストリームアクションが API 要求を送信する方法を構成します。[要求] セクションは、結果のページごとに 1 回実行されます。

アクション入力は、フロー内のアクションを構成するために使用するフィールドになります。

データストリームアクションにステップを追加するように [要求] セクションを構成します。

[要求] セクションを構成すると、[要求] セクションにステップが追加されます。

  • データを取得する方法:データ連携タイプを選択します。
    • REST ステップ[要求] セクションに REST ステップを追加します。
    • SOAP ステップ[要求] セクションに SOAP ステップを追加します。
    • JDBC ステップ[要求] セクションに JDBC ステップを追加します。
  • ページネーションを有効化:ページネーションされた API の場合に選択します。
  • 各要求の前にスクリプトを実行[要求] セクションにスクリプトステップを追加する場合に選択します。

記事 (16/32)

要求:ページネーションセットアップのステップ

ページネーション設定ステップを使用すると、API 要求の中で動的に決定される部分の値を指定できます。たとえば、ページネーションされたデータを返す API への要求では、通常、送信するデータのページを指定する必要があります。

ページネーション変数

ページネーションされた API は、一度に 1 ページずつデータを送信します。ページネーション変数を使用すると、API に必要なオプションの値を設定できます。

getNextPage 変数は読み取り専用で、すべてのページネーション設定ステップに含まれています。getNextPage 変数は、API から別のページを要求するかどうかを決定します。無限ループを回避するため、getNextPage 変数のデフォルト値は false になっています。getNextPage 変数値が true の場合、データストリームアクションは引き続き API 要求を行います。

開発者は、[テンプレートを表示] ボタンをクリックして、limitoffset などの一般的に使用される変数を挿入するページネーション変数テンプレートを適用できます。ページネーション変数を作成するには、[追加] ボタン ([作成] ボタンは、ページネーション変数テーブルの右端の列ヘッダーにあります。) をクリックします。

入力オブジェクトは [入力変数] セクションによって入力されます。出力オブジェクトは [出力変数] セクションによって入力されます。

ページネーション変数を構成します。

  • 名前variables オブジェクトの変数のプロパティ名。
  • 初期値:API 要求が最初に行われたときの variables オブジェクトのプロパティの値。値は、ハードコーディングされたもの、データピル、またはハードコーディングされたものとデータピルの組み合わせです。
  • 次の値取得元[スクリプト] または [応答本文] を選択します。
    • スクリプト:ページネーション変数スクリプトによって、次回 API 要求が行われたときに設定されるプロパティ値が決まります。
    • 応答本文: 最後の API 要求の応答本文から解析された値によって、次回 API 要求が行われたときに設定されるプロパティ値が決まります。

ページネーション変数スクリプト

ページネーション変数スクリプトは、各 API 呼び出しの後にスクリプトロジックが実行されるサーバーサイドスクリプトです。ページネーション変数スクリプトの目的は次のとおりです。

  • [次の値取得元] の値が [スクリプト] である任意のページネーション変数の値を設定する
  • 要求するページがこれ以上ない場合に getNextPage ページネーション変数の値を false に設定する

ページネーション変数スクリプトは、次の 2 つのオブジェクトを渡します。

  • variables:プロパティはページネーション変数。
  • pageResponse:前回の API 呼び出しからの応答本文。

このサンプルスクリプトでは、次に取得するページを追跡するためのカウンターを設定します。フローまたはユーザーが取得するように指定したページ数と variables.pagesToGet が等しくなるまで、ページの取得を続行します。

開発者向けのヒント:ページネーション変数、および pageResponse から解析されるものは、すべて文字列です。ページネーション変数スクリプトでは、数学演算またはその他の演算に対して正しいデータタイプを確保するために型キャストが必要になる場合があります。

記事 (17/32)

要求:スクリプトステップ

[要求] セクションでは、結果の次のページに対するすべての要求の前に、スクリプトステップがスクリプトを実行します。ページネーションされた API を呼び出すときは、データの検証と変換にスクリプトステップを使用します。たとえば、次のページの要求に対して JSON ペイロードを生成する場合などです。スクリプトステップはオプションです。

スクリプトステップの構成方法については、このトレーニングモジュールの「アクション前処理:スクリプトステップ」のページを参照してください。

この例では、[要求] セクションのスクリプトステップを使用していません。

演習 (18/32)

演習:要求 - ページネーション設定のステップ

この演習では、[World Glaciers - LatLong] データストリームアクションの [要求] セクションを構成します。[ページネーション設定ステップ] も設定します。

要求を構成する

  1. [アクションアウトライン] で、[要求] セクションを選択します。

    この図では [アクションアウトライン] で [要求] セクションが選択されたところを示しています。

  2. [要求] フォームを構成します。

      データを取得する方法 REST ステップ
      ページネーションを有効化 選択済み (オン)
  3. [アクションアウトライン] で、[要求] セクションの新しいステップを確認します。

    この図は、[要求] セクションの [ページネーションセットアップステップ] と [REST ステップ] を示しています。

ページネーションの構成 - ページネーション変数

演習のこのセクションでは、ページネーション変数スクリプトで使用するページネーション変数を作成します。

  1. [アクションアウトライン] の [要求] セクションで、[ページネーション設定ステップ] をクリックします。

  2. [ページネーション設定ステップ] フォームの [ページネーション変数] セクションを確認します。

    質問getNextPage ページネーション変数はどこから来たのですか?
    回答:getNextPage ページネーション変数は、データストリームアクションに必要であり、[ページネーション設定ステップ] に自動的に挿入されます。

    質問getNextPage 変数の [初期値] が読み取り専用になるのはなぜですか?
    回答getNextPage 変数は、データストリームアクションが Web サービスから別のページのデータを要求するかどうかを決定します。データストリームアクションと Web サービスの間の無限ループを防ぐため、getNextPage 変数の [初期値] は false になります。

    質問getNextPage 変数を削除することはできますか?なぜですか、それともなぜそうではそうではないのですか?
    回答getNextPage ページネーション変数はデータストリームアクションに必要であり、削除することはできません。getNextPage 変数がないと、データストリームアクションが Web サービスへの要求を停止するタイミングが分からなくなります。

  3. glacier_number ページネーション変数を作成します。

    1. ページネーション変数を作成するには、 [追加] ボタン ([追加] アイコンは列ヘッダーの右側にあります。) をクリックします。

      [追加] ボタンの位置は、[次の値取得元] 列ヘッダーの右側です。

    2. 変数の設定を開始します。

        名前 glcier_number
        初期値 [最初に取得する氷河 (First glacier to get)] データピルを [データ] パネルの [データ検証 (Data Validation)] セクションからドラッグアンドドロップする

      [データパネル] は [ページネーション変数] の左側にあります。データピルは、[データパネル] の [データ検証 (Data Validation)] セクションにあります。

    3. 氷河レコードのページが World Glaciers Web サービスによって返されると、次に取得する氷河の値が応答の一部になります。World Glaciers Web サービスのドキュメントページで、World Glaciers Web サービスのドキュメント応答例を確認します。

      質問:結果の次のページが要求されたときに、World Glaciers Web サービス応答のどのプロパティが、最初に取得する氷河レコードの順序番号を指定しますか?
      回答result.nextRec プロパティは、結果の次のページが要求されたときに、取得する氷河レコードの順序番号を指定します。

    4. glacier_number 変数の設定を終了します。

        次の値取得元 応答本文
        値の抽出に使用 JSON
        $.result.nextRec
  4. [保存] ボタンをクリックします。

  5. glaciers_per_page ページネーション変数を作成します。

    1. [追加] ボタンをクリックします。
    2. 変数を設定します。
        名前 glaciers_per_page
        初期値 [1 ページあたりの氷河数 (Glaciers per page)] データピルを [データ] パネルの [データ検証 (Data Validation)] セクションからドラッグアンドドロップする
        次の値の差出人 スクリプト
  6. num_pages ページネーション変数を作成します。

      名前 num_pages
      初期値 [ページ数 (Number of pages)] データピルを [データ] パネルの [データ検証 (Data Validation)] セクションからドラッグアンドドロップする
      次の値の差出人 スクリプト
  7. start_with ページネーション変数を作成します。

      名前 start_with
      初期値 [最初に取得する氷河 (First glacier to get)] データピルを [データ] パネルの [データ検証 (Data Validation)] セクションからドラッグアンドドロップする
      次の値の差出人 スクリプト
  8. [保存] ボタンをクリックします。

この図は、演習の指示に従って構成されたページネーション変数を示しています。

ページネーション変数スクリプトを追加する

  1. [ページネーション変数スクリプト] のスクリプトを置き換えます。

    (function paginate(variables, pageResponse) { // The script determines whether to retrieve another // page of glacier records from the web service. // Calculate how many records to retrieve then determine // the ordinal number of the last glacier to get var totalRecs = parseInt(variables.glaciers_per_page) * parseInt(variables.num_pages); var lastRec = parseInt(variables.start_with) + totalRecs; // If the value of variables.glacier_number is less than the // ordinal of the last record to get, get another page. // If not, set variables.getNextPage to false. if (parseInt(variables.glacier_number) < lastRec) { variables.getNextPage = true; } else { variables.getNextPage = false; } })(variables, pageResponse);
  2. スクリプトを調べて、何をするスクリプトかを理解します。

  3. [保存] ボタンをクリックします。

記事 (19/32)

要求:REST ステップ

[要求] セクションの構成に応じて、データストリームアクションに REST、SOAP、JDBC ステップのいずれかが含まれます。[データをどのように取得しますか] フィールドによって、挿入するステップが決まります。

このトレーニングモジュールでは、REST ステップを使用します。

REST ステップの構成

REST ステップで、API に接続して情報を要求する方法を指定します。この例では、Rebrickable API を使用して LEGO の色に関する情報を取得します。

この例は Rebrickable API 向けに構成されています。接続:ユーザー接続エイリアス、接続エイリアス:x_265424_rebricab.Rebrickable_Alias、ベース URL:https://rebrickable.com/api/v3、要求の構築 (Build Request):手動、リソースパス:leg/colors/page=step>Pagination Setup ste > nextPgae&page_size=step>Script step - Data Validation > Pge size、HTTP メソッド:GET、クエリパラメーター:(なし)、ヘッダー:承認ステップ > REST ステップ > 資格情報値。

  • 接続:使用する接続のタイプとして [接続エイリアスを使用] または [インラインで接続を定義] を選択します。[接続エイリアスを使用] では、接続エイリアステーブルを使用して接続情報を定義します。[インラインで接続を定義] では、アクションステップ内の接続情報を定義します。
  • 接続エイリアス:接続エイリアスを選択します。
  • ベース URL:Web サービスエンドポイントのベース URL を入力します。詳細については、Web サービスのドキュメントを参照してください。
  • 要求の構築 (Build Request):要求の構築方法として [手動] または [OpenAPI 仕様から] を選択します。
  • リソースパス:完全な Web サービスエンドポイントへのパスを入力します。
  • HTTP メソッドGETPOSTPUTPATCHDELETE のいずれかを選択します。最も一般的に使用されるオプションは GETPOST です。
  • クエリパラメーター:渡す各クエリパラメーターの名前と値を入力します。クエリパラメーターは、実行時にエンドポイントの URL の ? の後に追加されます。
  • ヘッダー:要求とともに送信する各ヘッダーの名前と値を入力します。

注意:REST ステップの設定の詳細については、IntegrationHub の REST トレーニングモジュールを参照してください。

演習 (20/32)

演習:要求 - REST ステップ

この演習では、[World Glaciers - LatLong] データストリームアクションの REST ステップを構成します。

準備 - Web サービスの構文を調べる

REST ステップでは、 World Graciers Web サービスへの要求の詳細を設定します。get_glassers_latlong GET メソッドを使用します。World Glaciers Web サービスのドキュメントを使用して、次の質問に回答してください。

質問:すべての World Graciers Web サービス要求のベース URL は何ですか?
回答:ベース URL は https://sndevapiserver.service-now.com です。

質問get_glassers_latlong GET メソッドのリソースパス (クエリパラメーターを含まない URL) は何ですか?
回答: リソースパスは /api/x_snc_world_glacie/v1/world_glaciers/getglaciers/latlong です。

質問get_galciers_latlong GET メソッドにはいくつのクエリパラメーターが必要ですか?それらは何ですか?
回答get_glaciers_latlong メソッドには、first_recnum_recs_per_page の 2 つのクエリパラメーターが必要です。

ページネーションを構成する - REST ステップ

  1. [アクションアウトライン] の [要求] セクションで、[REST ステップ] をクリックします。

  2. [接続の詳細] セクションを構成します。

      接続 インラインで接続を定義
  3. [要求の詳細] セクションを構成します。

      リソースパス /api/x_snc_world_glacie/v1/world_glaciers/getglaciers/latlong
      HTTP メソッド GET
  4. first_rec クエリパラメーターを追加します。

    1. [クエリパラメーター] フィールドで、[追加] ボタン ([追加] アイコンは列ヘッダーの右側にあります。) をクリックします。
    2. クエリパラメーターを設定します。
        名前 first_rec
        [glacier_number] データピルを [データ] パネルの [ページネーション設定ステップ] セクションからドラッグアンドドロップする
  5. num_recs_per_page クエリパラメーターを追加します。

      名前 num_recs_per_page
      [1 ページあたりの氷河数 (Glaciers per page)] データピルを [データ] パネルの [データ検証 (Data Validation)] セクションからドラッグアンドドロップする

    この画像は、演習の指示に従って構成された REST ステップを示しています。

  6. [保存] ボタンをクリックします。

記事 (21/32)

[解析中] セクション

[解析中] セクションでは、データストリーム要素をデータオブジェクトに分離する方法を指定します。[解析中] セクションは、ストリーム内のアイテムごとに 1 回実行されます。

アクション入力は、フロー内のアクションを構成するために使用するフィールドになります。

データストリームアクションにステップを追加するように [解析中] セクションを構成します。

[要求] セクションを構成すると、[要求] セクションにステップが追加されます。

  • 各レコードをどのように識別しますか[JSON / XML スプリッター] を選択し、スプリッターステップを追加します。
  • 各アイテムをどのように解析してオブジェクトにしますか[スクリプトパーサー] を選択し、スクリプトパーサーステップを追加します。

記事 (22/32)

解析:スプリッターステップ

スプリッターステップは、応答ストリーム内の親ノードを識別します。応答ストリームは、後で複合オブジェクトにマッピングされます。

たとえば、Rebrickable API の colors メソッドは次の JSON を返します。

{ "count": 182, "next": "https://rebrickable.com/api/v3/lego/colors/?page=2&page_size=1", "previous": null, "results": [ { "id": 0, "name": "Black", "rgb": "05131D", "is_trans": false, "external_ids": { "BrickLink": { "ext_ids": [ 11 ], "ext_descrs": [ [ "Black" ] ] }, "BrickOwl": { "ext_ids": [ 38 ], "ext_descrs": [ [ "Black" ] ] }, "LEGO": { "ext_ids": [ 26, 149, 1012 ], "ext_descrs": [ [ "Black", "BLACK" ], [ "Metallic Black", "MET.BLACK" ], [ "CONDUCT. BLACK" ] ] }, "Peeron": { "ext_ids": [ null ], "ext_descrs": [ [ "black" ] ] }, "LDraw": { "ext_ids": [ 0, 256 ], "ext_descrs": [ [ "Black" ], [ "Rubber_Black" ] ] } } } ] }

色の値 namergb は、返される JSON の results プロパティの一部であることに注意してください。目的が色の値 namergb を取得することである場合は、results プロパティで返された JSON を分割して、results プロパティを親ノードにします。[アイテムパス] フィールドで、JSONPath 表記を使用して分割する場所を指定します。この例では、アイテムパス$.results です。

分割によって作成された応答ストリームは、スクリプトパーサーステップに渡されます。

スプリッターの JSONPath is $.results です

注意:ソース形式が XML の場合は、XPath 表記を使用して分割する場所を指定します。

記事 (23/32)

解析:スクリプトパーサーステップ

スクリプトパーサーステップは、サーバーサイドスクリプトを使用して、スプリッターステップから受信した応答ストリームからプロパティ値を抽出し、複合オブジェクトに設定します。スクリプトパーサースクリプトの一般的な戦略は次のとおりです。

  1. スプリッターステップから渡されたストリームから JavaScript オブジェクトを構築します。
  2. outputs.targetObject オブジェクトにプロパティを追加します。

スクリプトステップの [スクリプトパーサースクリプト] フィールドのコメントで、必要な処理について説明し、XML と JSON 両方の例を示します。

(function parse(inputs, outputs) { // Source item string is available in inputs.sourceItem. // Generate output by setting fields of outputs.targetObject. // // The structure of outputs.targetObject corresponds to the // structure defined in the Data Stream Action output. // // Optionally skip an item in the stream by setting // outputs.state = 'SKIP' // // JSON Example: // var item = JSON.parse(inputs.sourceItem); // outputs.targetObject.ffName = item.firstName; // outputs.targetObject.llName = item.lastName; // outputs.targetObject.address.home.city = item.address.home.city; // // XML Example: // var xmlDoc = new XMLDocument2(); // xmlDoc.parseXML(inputs.sourceItem); // var root = xmlDoc.getDocumentElement(); // if (root.getNodeName() != 'user') { // outputs.state = 'SKIP'; // return; // } // outputs.targetObject.id = xmlDoc.getNodeText('/user/id'); // outputs.targetObject.fname = xmlDoc.getNodeText('/user/person/first_name'); // outputs.targetObject.lname = xmlDoc.getNodeText('/user/person/last_name'); })(inputs, outputs)

inputs オブジェクトは自動的にスクリプトに渡されます。inputs.sourceItem プロパティには、スプリッターステップからのストリームが含まれています。

コメントに示されているように、JSON の場合は JSON.parse() メソッドを使用して inputs.sourceItem から JavaScript オブジェクトを構築します。XML の場合は XMLDocument2 クラスからオブジェクトを作成し、続けて parseXML() メソッドを使用して inputs.sourceItem から JavaScript オブジェクトを構築します。この例では、item JavaScript オブジェクトが inputs.sourceItem から作成されています。

出力オブジェクトは自動的にスクリプトに渡されます。このスクリプトの目的は、outputs.targetObject にプロパティとプロパティ値を追加することです。通常、プロパティ値はストリームから解析されますが、ハードコードされた値や、ハードコードされた値と解析済みの値の組み合わせなど、任意の値にすることができます。この例では、outputs.targetObject.color_nameoutputs.targetObject.color_rgb に、item オブジェクトの対応するプロパティの値が設定されています。

サンプルスクリプトでは、item オブジェクトの値を使用して outputs.targetOjbect に値を設定しています。

演習 (24/32)

演習:Web サービスの応答の解析

この演習では、データストリームアクションの [解析] セクションを構成します。

  • スプリッターステップ
  • スクリプトパーサーステップ

解析セクションを構成する

  1. [アクションアウトライン] で、[解析] セクションを選択します。

    この図では [アクションアウトライン] で [解析] セクションが選択されたところを示しています。

  2. [解析] フォームを構成します。

      各レコードをどのように識別しますか JSON/XML スプリッター
      各アイテムをどのように解析してオブジェクトにしますか スクリプトパーサー
  3. [アクションアウトライン] で、[解析] セクションの新しいステップを確認します。

    この図は、[アクションアウトライン] 内の [スプリッターステップ] と [スクリプトパーサーステップ] を示しています。

スプリッターステップを構成する

  1. [アクションアウトライン] の [解析] セクションで、[スプリッターステップ] をクリックします。

質問セパレーターステップの目的は何ですか?
回答スプリッターステップ の目的は、Web サービス応答からレコードまたはデータを抽出することです。

  1. World Glaciers Web サービスの応答の形式をよく見てください。応答を、返された氷河レコードそれぞれのオブジェクトに分割する方法はありますか?ヒント:この応答例では、3 つの氷河のデータが返されています。

    { "result": { "nextRec": "1911", "glaciers": [ { "glacier_id": "AR1I0111B001", "name": "DOMUYO A", "country": "Argentina", "latitude": "-36.636", "longitude": "-70.493" }, { "glacier_id": "AR1I0111B002", "name": "DOMUYO B", "country": "Argentina", "latitude": "-36.636", "longitude": "-70.493" }, { "glacier_id": "AR1I0111B003", "name": "DOMUYO C", "country": "Argentina", "latitude": "-36.653", "longitude": "-70.47" } ] } }
  2. スプリッターステップを設定します。

      ソース形式 JSON
      アイテムパス: $.result.glaciers
  3. [保存] ボタンをクリックします。

スクリプトパーサーステップを構成する

演習のこのセクションでは、スクリプトを使用して、Web サービスの応答から個々の氷河に関するデータを抽出します。スクリプトを使用して次のデータを抽出します。

  • 氷河の一意の ID
  • 氷河の名前
  • 氷河が存在する国
  • 氷河の緯度
  • 氷河の経度

注意:すべての氷河について、すべての情報を入手できるわけではありません。たとえば、多くの氷河には、氷河 ID があっても名前がありません。

  1. [アクションアウトライン] の [解析] セクションで、[スクリプトパーサーステップ] をクリックします。

  2. [スクリプトパーサースクリプト] フィールドの内容を次のスクリプトに置き換えます。

    (function parse(inputs, outputs) { // Source item string is available in inputs.sourceItem. // Generate output by setting fields of outputs.targetObject. // // The structure of outputs.targetObject corresponds to the // structure defined in the Data Stream Action output. // Parse glacier record properties into the outputs.targetObject // that is passed to the Data Stream Action Outputs. var glacier_rec = JSON.parse(inputs.sourceItem); outputs.targetObject.id = glacier_rec.glacier_id; outputs.targetObject.name = glacier_rec.name; outputs.targetObject.country = glacier_rec.country; })(inputs, outputs);
  3. [保存] ボタンをクリックします。

課題 - 緯度と経度を返す

スクリプトから outputs.targetObject というオブジェクトが返されます。既存のスクリプトを使用すると、outputs.targetObject オブジェクトに次の 3 つのプロパティが含まれます。

  • glacier_id
  • name
  • country

[スクリプトパーサースクリプト] にロジックを追加して、output.targetObject オブジェクトに次の 2 つのプロパティを追加します。

  • latitude
  • longitude

課題ソリューション

(function parse(inputs, outputs) { // Source item string is available in inputs.sourceItem. // Generate output by setting fields of outputs.targetObject. // // The structure of outputs.targetObject corresponds to the // structure defined in the Data Stream Action output. // Parse glacier record properties into the outputs.targetObject // that is passed to the Data Stream Action Outputs. var glacier_rec = JSON.parse(inputs.sourceItem); outputs.targetObject.id = glacier_rec.glacier_id; outputs.targetObject.name = glacier_rec.name; outputs.targetObject.country = glacier_rec.country; outputs.targetObject.latitude = glacier_rec.latitude; outputs.targetObject.longitude = glacier_rec.longitude; })(inputs, outputs);

記事 (25/32)

[出力] セクション

[出力] セクションには、[解析中] セクションで解析されたデータ変数が含まれています。これらの変数は、フロー内の他のアクションで使用できます。

[出力] セクションは最後のセクションです

[出力] セクションでは複合オブジェクトを定義します。オブジェクトとそのプロパティは、フロー内の他のアクションで使用できます。スクリプトパーサースクリプトテンプレートのコメントで説明されているように、outputs.targetObject[出力] セクションで定義された最上位のオブジェクトにマッピングされます。

// outputs.targetObject の構造はデータストリームアクション出力で定義された構造に対応しています。

出力オブジェクトの作成

[出力] セクションで、[+ 出力を作成] ボタンをクリックします。[出力の作成] ボタンがない場合は、[出力を編集] ボタンをクリックします。

[出力の作成] ボタンはフォームヘッダーの右側にあります。

Action Output オブジェクトを構成します。

この [アクションの出力] では、ラベルが「色レコード (Color record)」、名前が「color_record」、タイプが「オブジェクト (Object)」として構成されています。

  • ラベル:出力変数の人間が判読可能な名前
  • 名前:スクリプトで使用されるときの出力変数の名前
  • タイプObject
  • 必須:値が必要な場合に選択します (最上位のオブジェクトには設定できません)

スクリプトパーサースクリプトoutputs.targetObject オブジェクトは、[アクション出力] の最上位オブジェクトに自動的にマッピングされます。この例では、outputs.targetObjectcolor_record オブジェクトにマッピングされています。

最上位のオブジェクトへのプロパティの追加

Action Output オブジェクト構造は、スクリプトパーサースクリプトで定義された outputs.targetObject 構造と一致する必要があります。

(function parse(inputs, outputs) { var item = JSON.parse(inputs.sourceItem); // You must create a color_name Action Output in the Outputs // section to match the outputs.targetObject data structure // from this script outputs.targetObject.color_name = item.name; // You must create a color_rgb Action Output in the Outputs // section to match the outputs.targetObject data structure // from this script outputs.targetObject.color_rgb = item.rgb; })(inputs, outputs)

スクリプトパーサースクリプトスクリプトで定義されたオブジェクト構造と一致させるには、[アクション出力] に同じプロパティと構造を持つオブジェクトが含まれている必要があります。この例では、スクリプトパーサースクリプトスクリプトによって作成されたオブジェクト構造に 2 つのプロパティが含まれています。

var color_record = { color_name: "colorValue", color_rgb: "rgbValue" };

Color record オブジェクトにプロパティを追加するには、 [子アイテムを追加 ] アイコン ([子アイテムを追加] アイコンは、オブジェクト行の右側にあります。) をクリックします。

[子アイテムを追加] アイコンは、色オブジェクトを定義する行の右側にあります。

必要な数のプロパティを追加して、outputs.targetObject オブジェクトと同じデータ構造を [アクション出力] に作成します。[アクション出力] の名前を、[スクリプトパーサースクリプト] フィールドの outputs.targetObject オブジェクトのプロパティ名と一致させます。

この例では、プロパティの構成は「色名 (Color name)、color_name、文字列 (Object)」と「RGB、color_rgb、文字列 (Object)」です。

演習 (26/32)

演習:出力

この演習では、[解析] セクションで解析された以下のデータ変数を含む複合オブジェクトを作成します。

  • glacier_id
  • name
  • country
  • latitude
  • longitude

複合オブジェクトを作成する

  1. [アクションアウトライン] で、[出力] セクションを選択します。

    この図では [アクションアウトライン] で [解析] セクションが選択されたところを示しています。

  2. 複合的な outputs オブジェクトを作成します。

    1. [アクション出力] ヘッダーの [出力を編集] ボタンをクリックします。

    2. [アクション出力] ヘッダーの [+ 出力を作成] ボタンをクリックします。

    3. 出力を構成します。

        ラベル 氷河レコード (Glacier record)
        名前 glcier_record
        タイプ オブジェクト
        必須 オフに切り替え
    4. [氷河レコード (Glacier record)] 複合オブジェクトにプロパティを追加します。

      1. [子レコードを追加 (Add child record)] ボタン ([子レコードを追加 (Add child record)] ボタンは [アクション出力] テーブルの [氷河レコード (Glacier record)] 行の左側にあります。) をクリックします。

      [子レコードを追加 (Add child record)] ボタンは氷河レコード行にあります。

      1. 新しい [氷河レコード (Glacier record)] プロパティを設定します。

          ラベル ID
          名前 id
          タイプ 文字列
          必須 オンに切り替え
      2. 別の [氷河レコード (Glacier record)] プロパティを追加して設定します。

          ラベル 名前 (Name)
          名前 name
          タイプ 文字列
          必須 オフに切り替え
      3. 別の [氷河レコード (Glacier record)] プロパティを追加して設定します。

          ラベル 国 (Country)
          名前 country
          タイプ 文字列
        1. 必須オフに切り替え
          この図は、演習の指示に従って構成されたアクション出力を示しています。
  3. [保存] ボタンをクリックします。

課題 - 緯度と経度

Glacier record オブジェクトへ既に追加したプロパティをモデルとして、さらに 2 つのプロパティを追加します。このプロパティには、スクリプトパーサーのステップで解析された緯度経度が保存されます。この 2 つのプロパティは必須ではありません。保存後に、[展開] アイコン ([展開] アイコンは、[氷河レコード (Glacier record)] 行の左側にあります。) をクリックして、Glacier record オブジェクトのプロパティを表示する必要がある場合があります。

展開アイコンは、[アクションの出力] テーブルの氷河レコード行の左側にあります。

課題ソリューション

追加の 2 つのプロパティは、ラベルが緯度、名前が latitude、タイプが文字列、必須がオフに切り替えのプロパティと、ラベルが経度、名前が longitude、タイプが文字列、必須がオフに切り替えのプロパティです。

演習 (27/32)

演習:データストリームアクションをテストする

この演習では、[World Glaciers - LatLong] データストリームアクションをテストします。

テストを起動する

  1. Flow Designer で、[テスト] ボタンをクリックします。
  2. [アクションのテスト (Test Action)] ダイアログでテストを設定します。
      最初の氷河 1908
      1 ページあたりの氷河 3
      取得するページ数 (Pages to get) 2
  3. [テスト実行] ボタンをクリックします。

テスト結果を確認する

  1. テストが完了すると、[テストの実行が終了しました。アクション実行の詳細を表示します。] というリンクをクリックします。

  2. 実行の [進捗状況] の値が [完了] になっていることを確認します。

    [状態] は [実行の詳細 (Execution Detials)] フォームヘッダーにあります

  3. [アクション] セクションで、 [World Glaciers - LatLong] リンクをクリックします。

    1. データストリームサマリを確認します。

      質問[ページ数 (Number of pages)] フィールドの値は何ですか。この値が期待する値かどうか確認します。
      回答[ページ数 (Number of pages)] フィールドの値は 3です。テストを実行時に、[取得するページ数 (Pages to get)] の入力変数に値「2」を入力しました。[ページネーションセットアップステップ] のスクリプトによって、variables.getNextPage を false に設定するタイミングが決まりますので注意してください。ページ数で 3 ページが報告されるのは、要求された 2 ページのデータを収集するためにスクリプトが 2 回実行され、variables.getNextPage が false に設定されている場合に 1 回実行されるためです。

      質問[合計アイテム数] フィールドの値は何ですか。この値が期待する値かどうか確認します。
      回答[合計アイテム数] フィールドの値は 6 です。テストを実行時に、[1 ページあたりの氷河] 入力変数に 3 を入力し、[取得するページ数 (Pages to get)] フィールドに 2 の値を入力しました。3 レコード * 2 ページで氷河レコードの合計は 6 になります。

      質問:エラーはどこにありますか?どうすればわかりますか?
      回答:データストリームアクションが演習に従って構成されていれば、エラーは発生しないはずです。[エラー数] フィールドの値は、0である必要があります。

    2. 返されたレコードを調べます。

      1. [出力データ] セクションで OutputItems 変数の [ランタイム値] リンクをクリックします。

        この図は、[出力データ] セクションの [ランタイム値] リンクの場所を示しています。

      2. OutputItems アレイ内のレコードのリストを調べます。アレイにはレコードが 6 つあるはずです。

      3. [outputItems [オブジェクト] の表示 (Viewing outputItems [object])] ダイアログを閉じます。

    3. World Glaciers Web サービス応答の 2 ページ目で返されたレコードを特定します。

      1. [実行の詳細] ページの一番下までスクロールし、[ページの詳細] セクションの [展開] アイコン ([展開] アイコンはページの詳細の左側にあります) をクリックします。

      2. [データページ] フィールドを「2」に設定します。

      3. [ページの詳細] には、データストリームアクションの各ステップに 1 つのセクションがあることに注意してください。[ステップ 2 - REST ステップ[REST] (Step 2 - REST step [REST])] セクションを見つけます。

      4. REST ステップ[ステップ出力データ] で、[応答本文][ランタイム値] リンクをクリックします。

      5. 2 ページ目の完全な JSON 応答を調べます。

        質問result オブジェクトにはどのようなプロパティがありますか?
        回答result オブジェクトには、[nextRec] という名前の文字列プロパティと [glassers] という名前のオブジェクトのアレイプロパティの 2 つのプロパティがあります。

      6. [response_body [文字列]の表示 (Viewing response_body [string])] ダイアログを閉じます。

記事 (28/32)

フローでのデータストリームアクションの使用

データストリームアクションの公開

データストリームアクションを作成したら、アクションを公開してすべてのフローで使用できるようにします。[データストリームアクション] フォームヘッダーで [公開] ボタンをクリックします。

[公開] ボタンはデータストリームアクションフォームヘッダーの右端にあります。

フローへのデータストリームアクションの追加

他のアクションと同じプロセスを使用して、フローにデータストリームアクションを追加します。

フローで、[アクション、フローロジック、またはサブフローを追加] リンクをクリックします。

[アクション、フローロジック、またはサブフローを追加するために選択] リンクは、フローのステップ全体で使用できます。

データストリームアクションを選択します。

[アクション] ダイアログで選択された状態の Rebrickable スポークアクション。

For Each ロジックは、データストリームアクション要求によって返される応答の各レコードに適用されます。ハードコードされた値または動的な値を使用して、データストリームアクションの各フィールドを構成します。

アイテム数とページ数は、データパネルのデータピルです。このアクションは、Web サービス応答で返された各レコードを自動的に反復処理します。

演習 (29/32)

演習:World Glacier - LatLong データストリームアクションをフロー内で使用する

この演習では、フローを作成します。次に、World Glacier - LatLong データストリームアクションを公開し、それをフローに追加します。フローの実行をテストします。

World Glacier - LatLong データストリームアクションを公開する

  1. Flow Designer で編集する World Glacier - LatLong データストリームアクションがまだ開いていない場合は開きます。

  2. 未保存の変更がある場合は、[データストリームアクション] フォームヘッダーの [保存] ボタンをクリックします。

  3. [公開] ボタンをクリックします。

  4. しばらくすると [公開成功 (Publish success)] メッセージが表示されます。

    公開成功メッセージが画面の右下隅に表示されます。

フローを作成する

  1. Flow Designer で、[フロー、サブフロー、またはアクションの作成] アイコン (この例では、[フローを作成] アイコンの位置を示しています。 このアイコンは、Flow Designer ヘッダーのタブの右側にあります。) をクリックします。

    [フロー、サブフロー、またはアクションを作成] アイコンは Flow Designer ヘッダーのタブの右側にあります。

  2. メニューで、[フロー] メニューアイテムを選択します。

  3. フローを構成します。

      フロー名 Glaciers LatLong
      アプリケーション World Glaciers Spoke
      説明 データストリームアクションを使用して演習を行うためのフロー。(Flow to practice using a Data Stream Action.)
      実行方法 セッションを開始するユーザー
  4. [送信] ボタンをクリックしてフローを保存します。

Glaciers LatLong フローを構成する

  1. トリガーを Glaciers LatLong フローに追加します。

    1. [トリガー] セクションで、[トリガーを追加] リンクをクリックします。
    2. [日付]セクションで、[1 回実行] トリガーを選択します。
    3. [Run on] フィールドの値を将来の任意の日時に設定します。
  2. World Glaciers - LatLong データストリームアクションをフローに追加します。

    1. [アクション] セクションで、[アクション、フローロジック、またはサブフローを追加] リンクをクリックします。
    2. [アクション] ボタンをクリックします。
    3. [アクション] ダイアログで、[World Glaciers] スポークを選択してから [World Glaciers - LatLong] データストリームアクションを選択します。
  3. [World Glaciers - LatLong] データストリームアクションを構成します。

      最初の氷河 1900
      1 ページあたりの氷河 4
      取得するページ数 (Pages to get) 3
  4. データストリームアクションに [ログ] アクションを追加します。

    1. [World Glaciers - LatLong] データストリームアクションで、[World Glaciers - LatLong の最初で唯一の子としてアクション、フローロジック、またはサブフローを追加 (Add Action, Flow Logic, or Subflow as the first and only child of 1 - World Glaciers - LatLong)] アイコン ([子を追加] アイコンは、[データストリームアクション] フィールドの下部にあります。) をクリックします。

      sldfkj

    2. [アクション] ボタンをクリックします。

    3. [アクション] ダイアログで、[ServiceNow コア] スポークを選択し、[ログ] アクションを選択します。

  5. [ログ] アクションを構成します。

    1. [メッセージ] フィールドに、テキスト「Glacier ID =」を入力します。

    2. [データパネル、1-World Glaciers - LatLong] セクションで、[氷河レコード (Glacier record)] データピルを展開します。

    3. [ID] データピルをドラッグし、[メッセージ] フィールドの末尾にドロップします。

      この図は、[氷河の ID] データピルを [メッセージ] フィールドにドラッグする様子を示しています。

    4. , Name =」という文字列を [メッセージ] フィールドの末尾に追加します。

    5. [名前 (Name)] データピルを [メッセージ] フィールドの末尾にドラッグします。

      この図は、演習の指示に従って構成された [メッセージ] フィールドを示しています。

    6. [ログ] アクションの [完了] ボタンをクリックします。

  6. フローの [保存] ボタンをクリックします。

Glaciers LatLong フローをテストする

  1. フローの [テスト] ボタンをクリックします。

  2. [フローのテスト] ダイアログで、[テストの実行] ボタンをクリックします。

  3. フローの実行が完了すると、[テストの実行が終了しました。フロー実行の詳細を表示します。] リンクをクリックします。

  4. フローの [実行の詳細] で、フローの [進捗状況][完了] になっていることを確認します。

  5. [World Glaciers - LatLong の For Each 項目 (For Each Item in World Glaciers - LatLong)] の詳細を確認します。質問World Glaciers - Lat Long Web サービスから返されたレコードの数は?これは期待どおりの結果ですか?
    回答[Glaciers LatLong] フローでは、World Glaciers -LatLong データストリームアクションは、1 ページあたり 4 レコードの 3 ページを返すように設定されています。3 ページ x 4 レコード/ページ = 12 レコードとなります。

  6. 最初のレコードのログ値を調べます。

    1. [ログ] アクションをクリックします。
    2. [メッセージ] フィールドの [ランタイム値] を調べます。
  7. その他のログメッセージを調べます。

    1. [World Glaciers - LatLong の For Each 項目 (For Each Item in World Glaciers - LatLong)] アクションで、[1 つずつ増やす (increment by one)] 矢印をクリックして、2 番目のリターンレコードの実行の詳細を表示します。
    2. [メッセージ] フィールドの値を調べます。
    3. [1 つずつ増やす (increment by one)] 矢印を使用して、返された残りのレコードを段階的に進めます。各レコードのログメッセージを調べます。

演習 (30/32)

演習:World Glaciers のスポーク作業を保存 (オプション)

この演習では、このモジュールで行った作業を GitHub リポジトリに保存します。World Graciers Spoke アプリケーションを保存するには、GitHub にリポジトリを作成し、World Graciers Spoke を新しいリポジトリに接続します。

注意:この演習のプロセスの詳細については、または GitHub アカウントで 2 要素認証を有効にしている場合は、『GitHub ガイド』を参照してください。

World Glassiers Spoke アプリケーションのリポジトリを作成する

  1. Web ブラウザーで、github.com にアクセスします。
  2. GitHub アカウントをお持ちの場合は、サインインします。お持ちでない場合は、新しいアカウントにサインアップします。
  3. [リポジトリ] セクションで [新規] ボタンをクリックし、新しいリポジトリを作成します。
    [新規] ボタンは [リポジトリ] セクションにあります。
  4. 新しいリポジトリを構成します。
      リポジトリ名 World Glaciers Spoke
      説明 データストリームアクショントレーニングからの World Glaciers Spoke (World Glaciers Spoke from Data Stream Actions training)
  5. [リポジトリを作成 (Create repository)] ボタンをクリックします。

World Glaciers Spoke アプリケーションをソースコントロールにリンクする

演習のこのセクションでは、新しいリポジトリを表示して、World Glaciers Spoke アプリケーションを新しいリポジトリにリンクし、コミットされたファイルを含むリポジトリを表示します。

  1. リポジトリページの [コード] タブを確認します。GitHub にはリポジトリをセットアップするための指示が含まれていることに注意してください。現在、リポジトリにファイルは存在しません。

  2. [クイックセットアップ] セクションで、[URL のコピー] ボタンをクリックします。

    [URL のコピー] ボタンで、URL を git リポジトリにコピーします。

  3. GitHub 接続の資格情報レコードを作成します。

    重要:資格情報レコードを作成する必要があるのは 1 回だけです。別の学習モジュールで GitHub から資格情報レコードを既に作成している場合は、この手順をスキップしてかまいません。

    1. Application Navigator を使用して、[接続および資格情報] > [資格情報] を開きます。
    2. [新規] ボタンをクリックします。
    3. [作成する資格情報のタイプは?] リストで、[基本認証資格情報] リンクをクリックします。
    4. 資格情報レコードを設定します。
        名前 GitHub 資格情報 (GitHub Credentials) - <お使いの github.com ユーザー名>
        ユーザー名 <お使いの github.com ユーザー名>
      1. パスワード<お使いの github.com パスワードまたは 2 要素認証の個人用アクセストークン>
        基本認証資格情報の新しいレコードフォーム。
    5. [送信] ボタンをクリックします。
  4. World Graciers Spoke を World-Glaciers リポジトリにリンクします。

    1. Studio で、World Glaciers Spoke アプリケーションが現在のアプリケーションであることを確認します。World Glaciers Spoke が、Studio フッターに表示されているアプリケーション名であるはずです。

      World Glaciers Spoke が Studio フッターに表示されている様子。

    2. [ソースコントロール] メニューを開き、[ソースコントロールへのリンク] メニューアイテムを選択します。

    3. [ソースコントロールへのリンク] ダイアログで、ソースコントロールへのリンクを構成します。

        ネットワークプロトコル https
        URL <コピーしたリポジトリの URL をペースト>
        資格情報 GitHub 資格情報 (GitHub Credentials) - <お使いの github.com ユーザー名>
        分岐 マスター (master)
        コミットコメント 初期 World Glaciers Spoke アプリケーションのコミット

      ソースコントロールにリンク完了ダイアログ。

    4. [ソースコントロールへのリンク] ボタンをクリックします。

    5. [ソースコントロールへのリンク] ダイアログが成功を報告したら、[閉じる] ボタンをクリックします。

  5. Studio が World Graciers Spoke ファイルを GitHub リポジトリにコミットしたことを確認します。

  6. GitHub リポジトリページに戻ります。

  7. ブラウザーウィンドウを再ロードします。

  8. フォルダーリンクをクリックして、アプリケーションファイルを表示します。

リポジトリに xml ファイルが入り、アプリケーションがソースコントロールにリンクされたときに提供されたコミットメッセージがすべてのファイルに含まれるようになりました。

  1. リポジトリ内のファイルとコミットメッセージを確認します。

記事 (31/32)

データストリームアクションモジュールのまとめ

コアコンセプト:

  • データストリームアクションは、次のような API に使用されます。

    • ページネーションされたデータを返す
    • 10 MB を超えるデータセットを返す
  • データストリームアクションは、次の要素で構成されています。

    • 入力
    • アクションの前処理
    • 要求
    • 解析中
    • 出力
  • [データストリームアクション] セクションのアクションの出力は、後のアクションでデータピルとして使用できます

  • 入力は、データストリームアクションまたは Web サービスが正しく機能するために必要な変数です

  • ページネーション設定ステップのスクリプトは、variables.getNextPage を使用して、ページネーションされた Web サービスへの要求の送信をいつ停止するかを決定します

  • スプリッターステップでは、Web サービス応答をレコードに分割する方法を指定します

  • スクリプトパーサーステップは、Web サービス応答から情報を抽出し、outputs.targetObject オブジェクトにプロパティと値のペアを設定します

  • [出力] セクションには、スクリプトパーサーステップで抽出された情報を保存するための複合オブジェクトが含まれています

  • データストリームアクションは、テスト前に完全に構成する必要があります

  • データストリームアクションがフローに追加されると、返された各レコードに For each ロジックが適用されます

記事 (32/32)

「データストリームアクション」の完了後の参考資料

お疲れさまでした。「データストリームアクション」モジュールを完了しました。データストリームアクションへの関心に基づいて、さらに次のことも学んでいただけます。

  • 受信 REST データ連携:この開発者サイト学習モジュールでは、REST API Explorer の使用、受信 REST 要求のための ServiceNow ユーザーの作成、CORS ルールの作成、Web サービスによるテーブルへのアクセスの無効化、およびコードサンプルの作成について学習します。
  • Flow Designer の使用:この開発者サイト学習モジュールでは、Flow Designer の使用方法、フローの作成と編集、フローへのアクションとフローロジックの追加、アクションの設定、フローでの変数の使用、フローのテストとデバッグ、フローの実行の詳細を表示、およびフローを有効化について学習します。
  • Flow Designer の開発:この開発者サイト学習モジュールでは、スポークの作成、アクションの作成と編集、ドラフトアクションのテスト、アクションの公開、サブフローの作成と使用、サブフローのテストと公開について学習します。