第5章 インテグレーションの作成
計画と準備が完了したら、インテグレーションを作成します。Fuse Online の Web インターフェースでは、Create Integrationをクリックすると、手順にしたがってインテグレーションを作成できます。
前提条件
- インテグレーションの計画に関する注意点
作成するインテグレーションの種類に応じて、以下を行います。
インテグレーションを作成するための情報および手順は以下を参照してください。
5.1. インテグレーション作成の準備
インテグレーション作成の準備を開始するには、「インテグレーションの計画に関する注意点」に記載されている質問への回答を参照します。インテグレーションを計画したら、インテグレーションの作成前に以下を行う必要があります。
接続するアプリケーションが OAuth プロトコルを使用するかどうかを判別します。OAuth を使用する各アプリケーションでは、Fuse Online をそのアプリケーションへのアクセスが許可されるクライアントとして登録します。OAuth プロトコルを使用するアプリケーションには以下が含まれます。
- Dropbox
- Google アプリケーション (Gmail、カレンダー、およびスプレッドシート)
- Salesforce
- SAP Concur
- 接続するアプリケーションが HTTP Basic 認証を使用するかどうかを判別します。HTTP Basic 認証を使用する各アプリケーションにアクセスするためのユーザー名およびパスワードを特定します。コネクションを作成する際に、この情報を提供する必要があります。
- 統合するアプリケーションごとにコネクションを作成します。
5.2. インテグレーション実行トリガーの代替
インテグレーションの作成時、インテグレーションの実行をトリガーする方法はインテグレーションの最初のステップによって決定されます。インテグレーションの最初のステップは以下のいずれかになります。
アプリケーションまたはサービスへのコネクション。特定のアプリケーションやサービスのコネクションを設定します。以下に例を示します。
- Twitter へのコネクションはツイートを監視でき、ツイートに指定のテキストが含まれている場合にシンプルなインテグレーションの実行をトリガーできます。
- Salesforce へのコネクションは、新しいリードが作成されたときにシンプルなインテグレーションの実行をトリガーできます。
- AWS S3 へのコネクションは、特定のバケットを定期的にポーリングでき、バケットにファイルが含まれる場合にシンプルなインテグレーションの実行をトリガーできます。
-
タイマー。Fuse Online は、シンプルなインテグレーションの実行を指定した間隔でトリガーします。これは、簡単なタイマーまたは
cron
ジョブになります。 -
Webhook。クライアントは、HTTP
GET
またはPOST
リクエストを Fuse Online が公開する HTTP エンドポイントに送信できます。リクエストはシンプルなインテグレーションの実行をトリガーします。 - API プロバイダー。API プロバイダーインテグレーションは、REST API サービスから開始します。この REST API サービスは、API プロバイダーインテグレーションの作成時に提供する OpenAPI 2.0 ドキュメントによって定義されます。API プロバイダーインテグレーションをパブリッシュした後、Fuse Online は REST API サービスを OpenShift にデプロイします。インテグレーションエンドポイントにネットワークアクセスできるクライアントは、インテグレーションの実行をトリガーできます。
5.3. シンプルなインテグレーションを作成する手順
Fuse Online では手順にしたがってシンプルなインテグレーションを作成できます。最初のコネクション、最後のコネクション、途中のコネクション (任意)、およびその他のステップを選択するよう促されます。インテグレーションが完了したら、パブリッシュして稼働するか、保存して後でパブリッシュすることができます。
API プロバイダーインテグレーションを作成する手順の詳細は、「API プロバイダーインテグレーションの作成」 を参照してください。
前提条件
- インテグレーションのステップが計画済みである必要があります。
- このインテグレーションで接続する各アプリケーションまたはサービスへのコネクションが作成済みである必要があります。
手順
- Fuse Online の左パネルで Integrationsをクリックします。
- 右上の Create Integration をクリックします。
最初のコネクションを追加および設定します。
- Choose a connection ページで、インテグレーションを開始するために使用するコネクションをクリックします。このインテグレーションの稼働時に、Fuse Online はこのアプリケーションに接続し、インテグレーションが操作するデータを取得します。
- Choose an action ページで、このコネクションが実行するアクションを選択します。使用できるアクションはコネクションごとに異なります。
- アクションを設定するページで、フィールドに値を入力します。
- 任意で、コネクションにデータタイプの指定が必要な場合は、Next をクリックしてアクションの出入力タイプを指定するよう要求されます。
- Next をクリックして、最初のコネクションを追加します。
アプリケーションに接続する代わりに、指定した間隔でインテグレーションの実行をトリガーするタイマーや、HTTP リクエストを許可する Webhook を最初のコネクションとすることが可能です。
最初のコネクションの選択および設定後、Fuse Online は最後のコネクションを選択するよう要求します。
最後のコネクションを選択および設定します。
- Choose a connection ページで、インテグレーションを完了するために使用するコネクションをクリックします。このインテグレーションの稼働中に、Fuse Online はインテグレーションが操作するデータでこのアプリケーションに接続します。
- Choose an action ページで、このコネクションが実行するアクションを選択します。使用できるアクションはコネクションごとに異なります。
- アクションを設定するページで、フィールドに値を入力します。
- 任意で、コネクションにデータタイプの指定が必要な場合は、Next をクリックしてアクションの出入力タイプを指定するよう要求されます。
- Next をクリックして、最後のコネクションを追加します。
アプリケーションに接続する代わりに、最後のコネクションはインテグレーションが処理したメッセージに関する情報をインテグレーションのログに送信できます。これには、Fuse Online が最後のコネクションの選択を要求したときに Log を選択します。
- 必要に応じて、最初のコネクションと最後のコネクションとの間に 1 つ以上のコネクションを追加します。コネクションごとにアクションを選択し、必要な設定詳細を入力します。
- 必要に応じて、コネクション間のインテグレーションデータで操作する 1 つ以上のステップを追加します。「コネクション間のステップの追加」を参照してください。
-
インテグレーションビジュアライゼーションで、
アイコンを見つけます。この警告は、このコネクションの前にデータマッパーステップが必要なことを示しています。必要なデータマッパーステップを追加します。
- インテグレーションに必要なステップがすべて含まれている場合は、インテグレーションの実行を開始するかどうかに応じて Save または Publish をクリックします。
- Name フィールドに、このインテグレーションを別のインテグレーションと区別する名前を入力します。
- 必要に応じて、: Description フィールドに説明を入力します。たとえば、このインテグレーションが実行することを説明できます。
インテグレーションの実行を開始する準備ができたら、Save and publish をクリックします。
Fuse Online にはインテグレーションの概要が表示されます。Fuse Online がパブリッシュの処理中であることが分かります。インテグレーションの状態が Runningになるまでに多少時間がかかる可能性があります。
インテグレーションをパブリッシュしない場合は、Save クリックします。Fuse Online はインテグレーションを保存し、フロービジュアライゼーションを表示します。編集を続行できます。または、ページの上部のパンくずリストで Integrations をクリックし、インテグレーションの一覧を表示します。保存してもインテグレーションがパブリッシュされない場合は、Stopped がインテグレーションのエントリーに表示されます。
5.4. インテグレーションの実行をトリガーするためタイマーコネクションを追加
指定のスケジュールに応じてシンプルなインテグレーションの実行をトリガーするには、タイマーコネクションをシンプルなインテグレーションの最初のコネクションとして追加します。タイマーコネクションをフローの途中やフローの最後に追加することはできません。
手順
- Fuse Online で左側にある Integrations をクリックします。
- 右上の Create Integration をクリックします。
Choose a connection ページで Timer をクリックします。
Fuse Online は Timer コネクションを提供するため、タイマーコネクションを作成する必要はありません。
Choose an action ページで Cron または Simple を選択します。
-
cron
タイマーには、インテグレーションの実行をトリガーするスケジュールを指定するcron
式が必要です。 -
期間とその時間単位の指定を要求されます (例:
5 seconds
、1 hour
)。使用可能な単位はミリ秒 (milliseconds)、秒 (seconds)、分 (minutes)、時間 (hours)、および日 (days) です。
-
-
追加するタイマーのタイプに応じて、
cron
式または選択した時間単位の期間を入力します。 - Next をクリックして Timer コネクションをインテグレーションの最初のコネクションとして追加します。
5.5. フローでコレクションを処理する方法
コネクションは、すべて同じタイプの複数の値が含まれるコレクションを返すことがあります。コネクションがコレクションを返すと、フローは以下を含む複数の方法でコレクションで操作できます。
- 各ステップを 1 度、コレクションに実行します。
- 各ステップを 1 度、コレクションの各要素に実行します。
- 一部のステップを 1 度、コレクションに実行し、他のステップを 1 度、コレクションの各要素に実行します。
フローのコレクションでの操作方法を決定するには、フローが接続するアプリケーション、それらのアプリケーションがコレクションに対応できるかどうか、およびフローが達成することを知っている必要があります。その後、以下の情報を使用して、コレクションを処理するフローにステップを追加できます。
5.5.1. コレクションの処理
フローがコレクションを処理する最も簡単な方法は、データマッパーを使用してソースコレクションにあるフィールドをターゲットコレクションにあるフィールドにマップすることです。多くのフローでは、これだけが必要になります。たとえば、フローはデータベースから社員のレコードのコレクションを取得し、それらのレコードをスプレッドシートに挿入します。データマッパーステップは、データベースコネクションと Google スプレッドシートコネクションの間でデータベースフィールドを Google スプレッドシートフィールドにマップします。ソースとターゲットはコレクションであるため、Fuse Online がフローを実行すると、Google スプレッドシートコネクションを 1 度呼び出します。この呼び出しで、Fuse Online はレコードを繰り返し処理し、スプレッドシートが適切に入力されます。
フローによっては、コレクションを個別のオブジェクトに分割する必要がある場合があります。たとえば、データベースに接続し、特定の日付までに割り当てられた休暇を取らないと休暇が失効してしまう社員のコレクションを取得する場合など考えられます。その後、フローはこれらの各社員にメール通知を送信する必要があります。このフローでは、データベースコネクションの後に分割ステップ (split step) を追加します。その後、社員のレコードのソースフィールドを、メッセージを送信する Gmail コネクションのターゲットフィールドにマップする、データマッパーステップを追加します。Fuse Online がフローを実行すると、データマッパーステップと Gmail コネクションを社員ごとに 1 度実行します。
場合によっては、フローのコレクションを分割し、フローがコレクションの各要素に一部のステップを 1 度実行した後、フローをコレクションで再度操作したいことがあります。前述の例について考えてみましょう。Gmail コネクションでメッセージを各従業員に送信した後に、通知済みの従業員一覧をスプレッドシートに追加すると仮定します。このシナリオでは、Gmail コネクションの後に、集約の手順を追加して、従業員名のコレクションを作成します。次に、ソースコレクションのフィールドをターゲット Google スプレッドシートコネクションのフィールドにマップするデータマッパーステップを追加します。Fuse Online がフローを実行すると、新しいデータマッパーステップと Google スプレッドシートコネクションをコレクションに 1 度実行します。
これが、フローのコレクションを処理する最も一般的なシナリオになります。ただし、より複雑な処理も可能です。たとえば、コレクションの要素自体がコレクションである場合、分割および集約ステップを他の分割および集約ステップ内で入れ子にすることができます。
5.5.2. データマッパーを使用したコレクションの処理
フローでは、ステップがコレクションを出力し、フローの後続のコネクションはコレクションを入力として想定する場合、データマッパーを使用してフローがどのようにコレクションを処理するかを指定できます。
ステップがコレクションを出力すると、フロービジュアライゼーションはステップの詳細で Collection を表示します。以下に例を示します。
データマッパーステップを、コレクションを提供するステップの後およびマッピングを必要とするステップの前に追加します。フローでこのデータマッパーステップが必要な場所は、フローの他のステップによって異なります。以下のイメージは、ソースコレクションフィールドからターゲットコレクションフィールドへのマッピングを示しています。
ソースおよびターゲットパネルで、データマッパーは
を表示し、コレクションを示します。ソースコレクションまたはターゲットコレクションにプリミティブタイプのみが含まれる場合、データマッパーはコレクションフィールドを表示する必要がないため表示しません。コレクション自体をマップ元またはマップ先としてマップすることができます。
コレクションに複数のプリミティブタイプが含まれる場合や、複雑なタイプが 1 つ以上含まれている場合、データマッパーはコレクションの子フィールドを表示します。各フィールドをマップ元またはマップ先とすることができます。しかし、入れ子のコレクションをマップ元またはマップ先とすることはできません。
Fuse Online がフローを実行すると、ソースコレクション要素を繰り返し処理し、ターゲットコレクション要素が入力されます。1 つ以上のソースコレクションフィールドをターゲットコレクションまたはターゲットコレクションフィールドにマップする場合、ターゲットコレクション要素にはマップされたフィールドのみの値が含まれます。
ソースコレクションまたはソースコレクションのフィールドをコレクションではないターゲットフィールドにマップする場合、Fuse Online がフローを実行するときにソースコレクションの最後の要素のみから値を割り当てます。コレクションの他の要素は、そのマッピングステップで無視されます。しかし、後続のマッピングステップはソースコレクションのすべての要素にアクセスできます。
コネクションが JSON または Java ドキュメントに定義されたコレクションを返すと、データマッパーは通常コレクションとしてソースドキュメントを処理できます。
5.5.3. 分割ステップの追加
フローの実行中に、コネクションがオブジェクトのコレクションを返すと、Fuse Online はコレクションに後続のステップを 1 度実行します。コレクションにある各オブジェクトに後続のステップを 1 度実行する場合は、分割ステップを追加します。たとえば、Google スプレッドシートコネクションは行オブジェクトのコレクションを返します。行ごとに後続のステップを 1 度実行するには、Google スプレッドシートコネクションの後に分割ステップを追加します。
分割ステップへの入力が常にコレクションであるようにしてください。分割ステップが、コレクションタイプではないソースドキュメントを取得する場合、ステップは空白文字で入力を分割します。たとえば、Fuse Online は「Hello world!」の入力を「Hello」と「world!」という 2 つの要素に分割し、これらの要素をフローの次のステップに渡します。特に XML データはコレクションタイプではありません。
前提条件
- フローを作成または編集することになります。
- フローに必要なコネクションがすべて存在する必要があります。
- フロービジュアライゼーションでは、ソースデータを取得するコネクションはデータが (Collection) であると示します。
手順
-
フロービジュアライゼーションの分割ステップを追加する場所で
をクリックします。
- Split をクリックします。このステップに設定は必要ありません。
- Next をクリックします。
関連情報
通常、データマッパーステップを追加する前に、分割ステップと集約ステップを追加します。これは、データがコレクションまたは個々のオブジェクトであるかがマッピングに影響するためです。データマッパーステップを追加して分割ステップを追加する場合、通常はマッピングをやり直す必要があります。同様に、分割または集約ステップを削除する場合もマッピングをやり直す必要があります。
5.5.4. 集約ステップの追加
フローに、Fuse Online が個別のオブジェクトからコレクションを作成する、集約ステップを追加します。実行中、Fuse Online は集約ステップの後に各オブジェクトに対して後続のステップを 1 度実行せずに、コレクションに対して後続のステップを 1 度実行します。
集約ステップをフローに追加するかどうかを決定する場合は、フローのコネクションを考慮してください。分割ステップの後、Fuse Online は後続の各コネクションに対して、フローのデータの各要素のために 1 度アプリケーションに接続します。コネクションによっては、複数回接続するよりも 1 度接続した方が望ましいことがあります。
前提条件
- フローを作成または編集することになります。
- フローに必要なコネクションがすべて存在する必要があります。
- 前の手順でコレクションを個別のオブジェクトに分割している必要があります。
手順
-
フロービジュアライゼーションの、集約ステップをフローに追加する場所で
をクリックします。
- Aggregate をクリックします。このステップに設定は必要ありません。
- Next をクリックします。
関連情報
通常、データマッパーステップを追加する前に、分割および集約ステップを追加します。これは、データがコレクションまたは個々のオブジェクトであるかがマッピングに影響するためです。データマッパーステップを追加して集約ステップを追加する場合、通常はマッピングをやり直す必要があります。同様に、集約ステップを削除する場合もマッピングをやり直す必要があります。
5.5.5. フローでコレクションを処理する例
このシンプルなインテグレーションは、Fuse Online によって提供されるサンプルデータベースからタスクのコレクションを取得します。フローはコレクションを個別のタスクオブジェクトに分割し、これらのオブジェクトをフィルターして実行されたタスクを見つけます。その後、フローは完了したタスクをコレクションで集約し、そのコレクションのフィールドをスプレッドシートのフィールドにマップします。完了したタスクのリストをスプレッドシートに追加して終了します。
以下の手順は、このシンプルなインテグレーションを作成する方法を説明します。
前提条件
- Google スプレッドシートコネクションが作成済みである必要があります。
- Google スプレッドシートコネクションがアクセスするアカウントに、データベースレコードを受信するスプレッドシートがある必要があります。
手順
- Create Integration をクリックします。
最初のコネクションを追加します。
- Choose a connection ページで PostgresDB をクリックします。
- Choose an action ページで Periodic SQL Invocation を選択します。
-
SQL Statement フィールドに
select * from todo
を入力し、Next をクリックします。
このコネクションは、タスクオブジェクトのコレクションを返します。
最後のコネクションを追加します。
- Choose a connection ページで、Google スプレッドシートコネクションをクリックします。
- Choose an action ページで Append values to a sheet を選択します。
- SpreadsheetId フィールドにスプレッドシートの ID を入力し、タスクの一覧を追加します。
-
Range フィールドに
A:B
を値を追加するターゲット列として入力します。最初のコラムである A はタスク ID のコラムです。次のコラムである B は、タスク名のコラムです。 - Major Dimension と Value Input Option のデフォルト値を受け入れ、Next をクリックします。
Google スプレッドシートコネクションは、コレクションの各要素をスプレッドシートに追加してフローを終了します。
フローに分割ステップを追加します。
- フロービジュアライゼーションで、プラス記号をクリックします。
- Split をクリックします。
フローが分割ステップを実行した後、結果は個別のタスクオブジェクトのセットになります。Fuse Online は、各タスクオブジェクトに対してフローの後続ステップを 1 度実行します。
フィルターステップをフローに追加します。
- フロービジュアライゼーションにて、分割ステップの後でプラスマークをクリックします。
Basic Filter をクリックし、以下のようにフィルターを設定します。
-
最初のフィールドをクリックし、評価するデータが含まれるフィールドの名前である
completed
を選択します。 - 2 つ目のフィールドに、completed フィールドの値が満たさなければならない条件として equals を選択します。
-
3 番目のフィールドに、completed フィールドになければならない値として
1
を指定します。1
は、タスクが完了したことを示します。
-
最初のフィールドをクリックし、評価するデータが含まれるフィールドの名前である
- Next をクリックします。
実行中、フローは各タスクオブジェクトに対してフィルターステップを 1 度実行します。結果は、個別の完了したタスクオブジェクトのセットになります。
集約ステップをフローに追加します。
- フロービジュアライゼーションにて、フィルターステップの後でプラス記号をクリックします。
- Aggregate をクリックします。
結果セットには、完了したタスクごとに要素が含まれるコレクションが含まれるようになりました。
データマッパーステップをフローに追加します。
- フロービジュアライゼーションにて、集約ステップの後でプラスマークをクリックします。
Data Mapper をクリックし、以下のフィールドを SQL 結果ソースのコレクションから Google スプレッドシートのターゲットコレクションにマップします。
- id から A
- task から B
- Done をクリックします。
- Publish をクリックします。
結果
インテグレーションの実行時に、毎分サンプルデータベースからタスクを取得し、完了したタスクをスプレッドシートの最初のシートに追加します。インテグレーションは、タスク ID を最初の列である A にマップし、タスク名を 2 番目の列である B にマップします。
5.6. コネクション間のステップの追加
必須ではありませんが、必要なコネクションをすべてプライマリーフローに追加してから、フローが実行するプロセスにしたがって、コネクションの間に追加ステップを追加することが推奨されます。フローでは、各ステップは以前のコネクションおよび以前のステップから取得したデータで操作します。結果となるデータは、フローの次のステップで利用できます。
多くの場合、コネクションから受け取ったデータフィールドを、フローの次のコネクションが操作できるデータフィールドにマップする必要があります。すべてのコネクションをフローに追加したら、フロービジュアライゼーションを確認します。入力データで操作する前にデータマッピングを必要とする各コネクションに対し、Fuse Online は
を表示します。このアイコンをクリックして、Data Type Mismatch: Add a data mapper step before this connection to resolve the difference. を表示します。
メッセージのリンクをクリックして、データマッパーステップを追加および指定する Configure Mapper ページを表示します。しかし、必要な他のステップを追加してから、データマッパーステップを最後に追加することが推奨されます。
5.7. 条件付き実行フローの追加
統合開発中、Conditional Flows (条件付きフロー) ステップをフローに追加して 1 つ以上の条件を追加できます。条件ごとに、ステップをその条件のみに関連する条件付きフローに追加します。インテグレーションの実行中、前のインテグレーションステップが Conditional Flows ステップに渡す各メッセージに対して、Conditional Flows ステップは、Fuse Online ページで定義する Conditional Flows ステップの追加順序でメッセージコンテンツを指定の条件に対して評価します。
条件付き実行フローの追加は、テクノロジープレビュー機能です。テクノロジープレビューの機能は、Red Hat の本番環境のサービスレベルアグリーメント (SLA) ではサポートされず、機能的に完全ではないことがあるため、Red Hat は本番環境での使用は推奨しません。Red Hat では、これらについて実稼働環境での使用を推奨していません。テクノロジープレビューの機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストやフィードバックの提供を可能にするために提供されます。Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、「https://access.redhat.com/ja/support/offerings/techpreview」を参照してください。
true に評価される最初の式では、インテグレーションは式に関連する条件付きフローを実行します。条件が true に評価されず、デフォルトの条件付きフローがある場合は、インテグレーションはそのフローを実行します。条件が true に評価されず、デフォルトの条件付きフローがない場合、インテグレーションは条件付きフローを実行しません。
条件付きフローの実行後、または true に評価される式とデフォルトの条件フローがない場合は、インテグレーションはプライマリーフローの次のステップを実行します。
たとえば、SQL データベースに接続し、社員の有給休暇 (PTO、Paid Time Off) データを取得するインテグレーションについて考えてみましょう。返されたデータは以下を示します。
- 特定日までに PTO を消化しないと失効する可能性がある社員。
- 付与分を超える PTO を使用した社員。
- 時間の制限なく PTO を使える残りの社員。
Conditional Flows ステップでは、このインテグレーションの例は条件ごとに 2 つの条件と 1 つの条件付き実行フローを定義できます。
- PTO が特定の数を超えた場合、特定日までに消化しないと失効する可能性がある PTO があることを意味します。インテグレーションは、該当する社員にメールを送信するフローを実行します。メールには、消化する必要がある PTO の時間数または日数と、失効日が含まれます。
- PTO が負の値の場合、付与分を超える PTO が使用されたこと意味します。インテグレーションは、該当する社員にメールを送信するフローを実行します。メールには、社員が取得した過剰分の PTO が含まれ、PTO の付与が再開される日付が指定されます。
さらに、このインテグレーションには、これらの条件を 1 つも満たさない入力に対してインテグレーションが実行するデフォルトの条件付きフローを追加することができます。このインテグレーションの例は、PTO が負の値ではなく、指定の数を超えない社員にデフォルトの条件付きフローを実行します。このフローは、社員が使用できる PTO の時間数または日数を示すステートメントを該当する社員にメールで送信します。
前提条件
- プライマリーフローを作成または編集することになります。これがシンプルなインテグレーションである場合、最初と最後のコネクションが追加されている必要があります。Conditional Flows ステップを条件付きフローに追加することはできません。
- Conditional Flows ステップへの入力は、個別のメッセージである必要があります。インテグレーションビジュアリゼーションで、前のステップの Data Type が (Collection) である場合、分割 ステップを追加します。
- 追加する Conditional Flows ステップにインテグレーションが渡すメッセージに含まれるフィールドを熟知している必要があります。
- Camel Simple Expression 言語を熟知するか、評価する条件の式が提供されている必要があります。
- 条件付きフローに追加する各コネクションが作成されている必要があります。
手順
-
インテグレーションビジュアライゼーションの、Conditional Flows ステップを追加する場所で
をクリックします。
- Conditional Flows をクリックします。
Configure Conditional Flows ページで、以下の条件を 1 つまたは複数定義します。
最初の When フィールドに Camel Simple Expression を入力します。たとえば以下の式は、メッセージの本文に
160
を超えるpto
フィールドが含まれている場合に true に評価します。${body.pto} > 160
この式が true に評価されると、インテグレーションはこの条件で作成および関連付けする条件付きフローを実行します。
注記条件付きフローステップが以下のようなフローの 1 つにある場合は、式に追加のプロパティーを指定する必要があります。
- API プロバイダーインテグレーションのオペレーションフロー。
- Webhook コネクションで始まるシンプルなインテグレーション。
- カスタム REST API コネクションで始まるシンプルなインテグレーション。
これらのフローでは、Fuse Online は
body
プロパティー内で実際のメッセージコンテンツをラッピングします。これは、Conditional Flows ステップへの入力にbody
プロパティーが含まれ、このプロパティーに実際のメッセージコンテンツが含まれる別のbody
プロパティーが含まれることを意味します。そのため、このようなフローの 1 つにある条件付きフローステップの式に、body
のインスタンスを 2 つを指定する必要があります。たとえば、入力メッセージのpto
フィールドにあるコンテンツを評価するとします。この場合、以下のように式を指定します。${body.body.pto} > 160
- 必要に応じて、Add another condition をクリックし、前のステップを繰り返します。定義する追加条件ごとに、この作業を行います。
- 必要に応じて、条件フィールドの右にある上矢印または下矢印をクリックして、定義された条件をインテグレーションで評価する順序を変更します。
必要に応じて、デフォルトの条件付きフローとする場合は Use a default flow をクリックします。
実行中に Use a default flow を選択した場合、指定した条件に true となるものがなければ、インテグレーションはデフォルトの条件付きフローを実行します。実行中に Use a default flow を選択しなかった場合、指定した条件に true となるものがなければ、この Conditional Flows ステップに続くステップで、インテグレーションの実行が継続されます。
- Apply をクリックし、定義した条件の一覧を表示します。
- Done をクリックして、新しい Flows ナビゲーション制御があるプライマリーフローを上部に表示します。
条件ごとにフローを定義します。
インテグレーションビジュアライゼーションで、フローを定義する条件に対して Open Flow をクリックします。
Fuse Online は、ページ上部付近にその条件を表示します。条件付きフロービジュアライゼーションは、すべての条件付きフローにある Flow Start ステップおよび Flow End ステップを表示します。
-
フロービジュアライゼーションの、この条件付きフローにステップを追加する箇所で
をクリックします。
追加するステップをクリックします。プライマリーフローに追加できるコネクションまたはステップを追加できます。
Flow Start ステップからの出力は、この Conditional Flows ステップの前にあるプライマリーフローステップからの出力と常に同じです。たとえば、フィルターステップまたはデータマッパーステップをこの条件付きフローに追加する場合、利用可能なフィールドはプライマリーフローで利用可能なフィールドと同じになります。
- 必要に応じて手順を設定します。
- この条件付きフローに追加するステップごとに、前述の 3 つの手順を繰り返します。
- ページ上部の Flow フィールドで、下矢印をクリックし、Back to primary flow をクリックします。これにより、条件付きフローが保存され、プライマリーフローが表示されます。
- ステップ 4 の最初に戻り、作成する条件付きフローごとにステップ 4 の手順を繰り返します。
結果
プライマリーフローには、Conditional Flows ステップで定義した条件ごとに条件付きフローが存在します。Use a default flow オプションを選択した場合、プライマリーフローにはデフォルトの条件付きフローも存在します。
実行中、Conditional Flows ステップは true となる最初の条件に関連する条件付きフローを実行します。その後、インテグレーションによって Conditional Flows ステップに続くステップが実行されます。
true となる条件がない場合、Conditional Flows ステップはデフォルトの条件付きフローを実行します。その後、インテグレーションによって Conditional Flows ステップに続くステップが実行されます。
以下の条件を両方満たすとします。
- true となる条件がない
- デフォルトの条件付きフローがない
この場合、インテグレーションは Conditional Flows ステップに続くステップを実行します。
5.8. データマッパーステップの追加
ほぼすべてのインテグレーションにはデータマッピングが必要になります。データマッパーステップは、前のコネクションおよびその他のステップのデータフィールドからフローの次のコネクションが操作できるデータフィールドにマップします。たとえば、インテグレーションデータに Name
フィールドが含まれ、フローの次のコネクションに CustomerName
フィールドがある場合、ソースの Name
フィールドをターゲットの CustomerName
フィールドにマップする必要があります。
前提条件
フローを作成または編集することになります。
手順
-
フロービジュアライゼーションの、データマッパーステップを追加する箇所で
をクリックします。
- Data Mapper をクリックして、データマッパーキャンバスにソースおよびターゲットフィールドを表示します。
次のステップ
「インテグレーションデータを次のコネクションのフィールドにマッピング」を参照してください。
5.9. 基本のフィルターステップの追加
ステップのフローを追加して、フローが操作するデータをフィルターできます。フィルターステップでは、Fuse Online はデータを検査し、コンテンツが定義した基準を満たしている場合にのみ継続されます。たとえば、Twitter からデータを取得するフローでは、「Red Hat」が含まれるツイートのみ操作して、実行の継続を指定できます。
前提条件
- フローには必要なコネクションがすべて含まれている必要があります。
- フローを作成または編集することになります。
手順
-
フロービジュアライゼーションの、フィルターステップを追加する箇所で
をクリックします。
- Basic Filter をクリックします。
Configure Basic Filter Step ページの Continue only if incoming data match フィールドで以下を行います。
- 定義されたすべてのルールを満たす必要があるデフォルトを使用します。
- あるいは、ANY of the following を選択して、1 つのルールのみを満たす必要があることを示します。
フィルタールールを定義します。
The data you want to evaluate: フィルターが評価する内容が含まれるフィールドの名前を入力します。たとえば、ステップに送信されるデータがご自分の Twitter ハンドルをメンションするツイートで構成されるとします。また、ツイートに特定の内容が含まれる場合のみ実行を継続するとします。ツイートは
text
という名前のフィールドにあるためtext
を最初のフィールドの値として入力または選択します。フィールドの値は以下の方法で定義できます。
- 入力を開始します。data name フィールドには、ポップアップボックスに補完の候補が表示される自動補完機能があります。ボックスから適切な候補を選択します。
- フィールドをクリックします。ドロップダウンボックスが表示され、利用可能なフィールドのリストが表示されます。リストから対象のフィールドを選択します。
- Must meet this condition: ドロップダウンボックスから条件を選択します。デフォルト設定は Contains です。実行を継続するには、このフィールドで選択する条件が、3 つ目のフィールドに入力する値に対して true である必要があります。
- For this value: フィルターする値を入力します。たとえば、Twitter フィードからの特定製品のメンションを操作する場合は、ここに製品名を入力します。
必要に応じて、+ Add another rule クリックして、別のルールを定義します。
エントリーの横にあるごみ箱アイコンをクリックすると、ルールを削除できます。
- フィルターステップが完了したら、Done をクリックしてフローに追加します。
その他のリソース
基本のフィルターステップに必要なフィルターを定義できない場合は、「高度なフィルターステップの追加」を参照してください。
5.10. 高度なフィルターステップの追加
フィルターステップでは、Fuse Online はデータを検査し、コンテンツが定義した基準を満たしている場合にのみフローの実行を継続します。基本のフィルターステップでは必要なフィルターを定義できない場合は、高度なフィルターステップを追加します。
前提条件
- フローには必要なコネクションがすべて含まれている必要があります。
- フローを作成または編集することになります。
- Camel Simple Expression 言語を熟知するか、フィルター言語が提供されている必要があります。
手順
-
フロービジュアライゼーションの上級なフィルターステップを追加する場所で
をクリックします。
- Advanced Filter をクリックします。
編集ボックスで Camel Simple Expression 言語を使用してフィルター式を指定します。たとえば、メッセージヘッダーの
type
フィールドがwidget
に設定されている場合、以下の式は true に評価されます。${in.header.type} == 'widget'
以下の例では、メッセージのボディーに
title
フィールドが含まれる場合に式が true に評価されます。${in.body.title}
- Next をクリックして、高度なフィルターステップをフローに追加します。
フローでの追加プロパティーの指定
式では、高度なフィルターステップが以下のようなフローの場合、追加のプロパティーを指定する必要があります。
- API プロバイダーインテグレーションのオペレーションフロー。
- Webhook コネクションで始まるシンプルなインテグレーション。
- カスタム REST API コネクションで始まるシンプルなインテグレーション。
これらのフローでは、Fuse Online は body
プロパティー内で実際のメッセージコンテンツをラッピングします。これは、高度なフィルターへの入力に body
プロパティーが含まれ、このプロパティーには実際のメッセージコンテンツが含まれる別の body
プロパティーが含まれることを意味します。そのため、このようなフローの 1 つにある高度なフィルター式に、body
のインスタンスを 2 つを指定する必要があります。たとえば、入力メッセージの completed
フィールドにあるコンテンツを評価するとします。この場合、以下のように式を指定します。
${body.body.completed} = 1
5.11. テンプレートステップの追加
フローでは、テンプレートステップはソースからデータを取得し、Fuse Online にアップロードするテンプレートで定義された形式に挿入します。テンプレートステップの利点は、指定した一貫性のある形式でデータの出力を提供できることです。
テンプレートでは、プレースホルダーを定義して静的テキストを指定します。フローの作成時に、テンプレートステップを追加してソースフィールドをテンプレートプレースホルダーにマップし、テンプレートコンテンツをフローの次のステップにマップします。Fuse Online がフローを実行するとき、マップされたソースフィールドにある値がテンプレートのインスタンスに挿入されるため、フローの次のステップで利用できるようになります。
フローにテンプレートステップが含まれる場合、そのフローの唯一のテンプレートステップとなる可能性が高くなります。ただし、フローに複数のテンプレートステップを含めることも可能です。
Fuse Online は、Freemarker、Mustache、および Velocity のテンプレートをサポートします。
前提条件
- フローを作成または編集する必要があります。
- シンプルなインテグレーションを作成する場合は、すでに最初と最後のコネクションがある必要があります。
手順
-
フロービジュアライゼーションのテンプレートステップを追加する場所で
をクリックします。
- Template をクリックします。Upload Template ページが開きます。
- Freemarker、Mustache、または Velocity をテンプレートタイプとして指定します。
テンプレートを定義するには、以下のいずれかを行います。
- テンプレートファイルまたはテンプレートを作成するために編集するテキストが含まれるファイルを、テンプレートエディターにドラグアンドドロップします。
- browse to upload をクリックしてファイルを選択し、アップロードします。
- テンプレートエディターで、テンプレートを定義します。
-
テンプレートエディターでは、テンプレートが Fuse Online で使用できるようにしてください。有効なテンプレートの例は、この手順の後に記載されています。Fuse Online では、構文エラーが含まれる行の左側に
が表示されます。構文エラーインジケーターにマウスオーバーすると、エラーを解決するためのヒントが表示されます。
Done をクリックして、フローにテンプレートステップを追加します。
Done ボタンが有効でない場合は、修正する必要のある構文エラーが 1 つ以上存在します。
テンプレートステップへの入力は、JSON オブジェクトの形式である必要があります。そのため、データマッピングステップをテンプレートステップの前に追加する必要があります。
テンプレートステップの前にデータマッパーステップを追加するには、以下を行います。
-
フロービジュアライゼーションで、先ほど追加したテンプレートステップの直前にある
をクリックします。
- Data Mapper をクリックします。
データマッパーで、ソースフィールドを各テンプレートプレースホルダーフィールドにマップします。
たとえば、この手順の後に記載されているテンプレート例を使用して、ソースフィールドを以下のテンプレートフィールドにマップします。
-
time
-
name
-
text
-
- 右上の Done をクリックし、データマッパーステップをフローに追加します。
テンプレートステップからの出力は常に JSON オブジェクトになります。そのため、テンプレートステップの後にデータマッパーステップを追加する必要があります。
-
フロービジュアライゼーションで、先ほど追加したテンプレートステップの直前にある
テンプレートステップの後にデータマッパーステップを追加するには、以下を行います。
-
フロービジュアライゼーションで、先ほど追加したテンプレートステップの直後にある
をクリックします。
- Data Mapper をクリックします。
- データマッパーで、テンプレートの message フィールドをターゲットフィールドにマップします。message フィールドには常にソースフィールドをテンプレートに挿入した結果が含まれます。たとえば、フローの次のコネクションが Gmail コネクションで、テンプレートステップの結果を Gmail メッセージの内容として送信するとします。これには、message ソースフィールドを text ターゲットフィールドにマップします。
- 右上の Done をクリックします。
-
フロービジュアライゼーションで、先ほど追加したテンプレートステップの直後にある
テンプレートの例
Mustache テンプレートの例:
At {{time}}, {{name}} tweeted: {{text}}
Freemarker および Velocity では、以下のテンプレート例がサポートされます。
At ${time}, ${name} tweeted: ${text}
Velocity では、以下の例のようにかっこを使用しない構文もサポートされます。
At $time, $name tweeted: $text
プレースホルダーに .
(ピリオド) を使用することはできません。
その他のリソース
フィールドのマッピングに関する詳細は、「インテグレーションデータを次のコネクションのフィールドにマッピング」を参照してください。
5.12. カスタムステップの追加
Fuse Online がフローで必要なステップを提供しない場合、開発者はエクステンションでカスタムステップを 1 つ以上定義できます。カスタムステップは、フローのコネクション間のデータで操作します。
カスタムステップは、組み込みのステップを追加するのと同じ方法でフローに追加します。シンプルなインテグレーションでは、最初と最後のコネクションを選択し、必要に応じて他のコネクションを追加した後、追加のステップを追加します。API プロバイダーインテグレーションでは、フローがカスタムステップを実行するオペレーションを選択し、必要に応じてコネクションをフローに追加した後、他のステップを追加します。ステップを追加すると、Fuse Online はフローの前のステップから受信するデータで操作します。
前提条件
- Fuse Online にカスタムステップのエクステンションがアップロードされている必要があります。「カスタム機能の使用」を参照してください。
- フローを作成または編集することになります。
- フローに必要なコネクションがすべて存在する必要があります。
手順
-
フロービジュアライゼーションのカスタムステップを追加する場所で
をクリックします。
追加するカスタムステップをクリックします。
使用できるステップには、Fuse Online 環境にアップロードされたエクステンションで定義されたカスタムステップが含まれます。
- ステップの実行に必要な情報のプロンプトに応答します。この情報はカスタムステップごとに異なります。