19.2. ポーリングが OData からデータを返すときにインテグレーションをトリガー

OData サービスからデータを取得したときにインテグレーションの実行をトリガーするには、OData コネクションを最初のコネクションとしてシンプルなインテグレーションに追加します。インテグレーションの実行時、OData コネクションは指定された間隔でサービスをポーリングします。コネクション設定を満たすデータが見つかると、コネクションはそのデータをインテグレーションの次のステップに渡します。

前提条件

OData コネクションが作成されている必要があります。

手順

  1. Fuse Online パネルの左側にある Integrations をクリックします。
  2. Create Integration をクリックします。
  3. Choose a connection ページで、インテグレーションを開始するために使用する OData コネクションをクリックします。
  4. Choose an action ページで Read アクションを選択します。
  5. Read アクションを設定します。

    1. Resource Collection フィールドで、クエリーを実行する OData リソースの名前を選択します。Fuse Online は OData サービスからデータを取得し、利用可能なリソースコレクションのリストを提供します。
    2. 特定の 1 つのエンティティーを取得するには、Entity Key Predicate フィールドにキー述語を指定してそのエンティティーを特定します。たとえば、UserName='Bob'Categories(1) を指定します。複数のエンティティーを取得する場合はこのフィールドを空白のままにしておきます。
    3. Query Options フィールドに、リソースに適用するクエリーを入力します。OData 構文を使用します。たとえば、$filter=startswith(name, 'N') は、N で始まる name フィールドを持つリソースで各エンティティーのメッセージを返します。

      Entity Key PredicateQuery Options の両方を指定できます。両方を指定すると、OData サービスは指定されたエンティティーを取得し、クエリーをそのエンティティーに適用します。たとえば、Entity Key PredicateUserName='russellwhyte'/Emails に設定し、Query Options$filter=contains($it,'example') に設定した場合、コネクションは以下のようなリクエストを作成します。

      https://services.odata.org/TripPinRESTierService/People(UserName='russellwhyte')/Emails?$filter=contains($it, 'example')

      サービスは、ドメイン example が含まれる Russell Whyte のメールアドレスをすべて返します。

    4. Filter Old Results チェックボックスを選択し、特定のメッセージを一度のみ取得します。
    5. メッセージのコレクションでなく、個別のメッセージをコネクションが返すようにするには、Split Results チェックボックスを選択します。

      Fuse Online は、フローに追加できる個別の分割ステップ (split step) および集約ステップ (aggregate step) も提供します。1 つ以上のステップで個別のメッセージを処理し、メッセージをコレクションに集約する場合は、Split Results チェックボックスを選択しないでください。代わりに、このチェックボックスを空のままにし、このコネクションの後にフローに分割ステップ (split step) を追加します。フローに集約ステップ (aggregate step) を使用する場合は分割ステップ (split step) が必要になります。

    6. Interval Before Polling Starts フィールドには、デフォルトの 1 秒を使用するか、コネクションが OData サービスのポーリングを開始するまでの経過期間を入力します。
    7. Delay フィールドには、デフォルトの 30 秒を使用するか、コネクションが OData サービスをポーリングする間隔を入力します。
    8. Backoff Idle Threshold フィールドには、デフォルトの 1 を使用するか、戻りデータがなくても許容されるポーリングの連続数を示します。このポーリング数を超えると、コネクションは後続のポーリングの間隔を長くします。コネクションは、Delay の値に Backoff Multiplier の値を掛けて、ポーリングの新しい間隔を決定します。

      たとえば、ポーリングの間隔 (Delay の値) がデフォルトの 30 秒である場合、Backoff Idle Threshold は 5 に設定され、Backoff Multiplier は 12 に設定されます。ポーリングが 5 回連続でデータを返さなかった場合、コネクションは 360 秒 (30 x 12 ) 待機してからポーリングを再開します。コネクションは、ポーリングがデータを返すまで、360 秒間隔でポーリングを続行します。ポーリングがデータを返したら、コネクションはポーリング間隔を 30 秒に戻します。

    9. Backoff Multiplier フィールドには、デフォルトの 1 を使用するか、Backoff Idle Threshold に設定された値に達したときにポーリングの間隔を長くする乗数を整数で指定します。

      Backoff Multiplier にデフォルトの 1 を使用すると、連続して結果を返さなかったポーリングの数に関わらず、コネクションは指定の間隔でポーリングを続行します。

      コネクションはデータが返されないと自動的にポーリングの頻度を減らすことができるため、Backoff Idle Threshold および Backoff Multiplier に指定する値は、CPU オーバーヘッドの削減に便利です。

  6. Next をクリックします。

結果

インテグレーションに最初のコネクションが追加され、Fuse Online は最後のコネクションを選択するよう要求します。

実行中にコネクションが返すものは Entity Key Predicate および Query Options フィールドに指定した内容によって異なります。OData コネクションは以下を返すことができます。

  • エンティティーのコレクションまたはエンティティープロパティーのコレクション

    たとえば、リソースのすべての Person エンティティーであったり、すべての Person エンティティーのすべての Age プロパティーであったりします。コネクションはコレクションを 1 つのメッセージで返します。Fuse Online はコレクションに対して、フローで各後続ステップを 1 度実行します。しかし、Read アクションを設定するときに Split Results を選択すると、コネクションは独自のメッセージで各エンティティーまたは各プロパティーを返します。Fuse Online はフローで各後続ステップを一度各メッセージに対して実行します。

  • エンティティーまたはエンティティープロパティー

    たとえば、UserName プロパティーが Bob である Person エンティティーであったり、UserNameBob である Person エンティティーの Age プロパティーであったりします。コネクションは、フローの次のステップに渡すメッセージのエンティティーまたはエンティティープロパティーを返します。

次のステップ

インテグレーションの最後のコネクションと、インテグレーションに含まれるようにする他のコネクションを追加します。インテグレーションに必要なコネクションがすべて含まれ、OData コネクションがコレクションを返す場合、OData コネクションの後に分割ステップ (split step) を追加する必要があるか検討します。通常、インテグレーションは OData コネクションによって返されるデータをフローの後続のコネクションが使用できるフィールドにマップします。コレクションをマップすることもありますが、より多くの場合でターゲットフィールドにマップするためにコレクションを分割する必要があります。

OData コネクションの後、フローにデータマッパーステップを追加します。フローでの正確な場所は、フローが実行することによって異なります。たとえば、OData コネクションの後にベーシックフィルターステップを追加してから、データマッパーステップを追加することがあります。