複雑な処理を行うロジックフローを作成したい
この記事では、ユーザ定義(ユーザ定義タスク)を活用して、複雑な処理を行うロジックフローを作成する方法を紹介します。IM-LogicDesignerでは、標準で用意しているタスクでは実現できない場合、ユーザが独自に複雑な処理をタスクに定義することが可能です。実現したい処理に合わせて、ユーザ定義を作成する方法を学んでいきましょう。
ユーザ定義(ユーザ定義タスク)とは?
IM-LogicDesignerでは、フローの論理的な流れや構造を制御するために制御要素を使用し、フロー内で実行される具体的な処理を表すタスクを組み合わせてロジックフローを作成します。基本的な処理には、IM-LogicDesignerが提供している標準タスクを使用しますが、以下のような場合は、ユーザ定義(ユーザ定義タスク)を使用します。
- 必要となる処理に適したタスクが提供されていない
- 必要となる処理を実現するためには、複数のタスクを組み合わせなければならない
ユーザ定義では、標準タスクでは実現が難しい複雑な処理や独自の処理を実現することができます。目的に合ったタスクを作成し、ロジックフローに組み込んでいきましょう。
ユーザ定義の概要
ユーザ定義には、SQL・JavaScript・RESTを中心に、さまざまな処理定義方法があります。ユーザ定義を使用する目的や概要について確認しておきましょう。
ユーザ定義の作成から利用までの流れ
ここからは、実際にIM-LogicDesignerの機能を使って、ユーザ定義を作成し、ロジックフローに組み込むまでの方法について紹介していきます。
Step. 1 ユーザカテゴリを作成する
ユーザ定義を管理・分類するためユーザカテゴリを作成します。ユーザカテゴリ名は、ユーザ定義の用途や適用範囲が一目でわかるように設定すると良いでしょう。これにより、ユーザ定義を再利用する際に、必要なタスクをすぐに見つけることができます。
なお、既存のユーザカテゴリにユーザ定義を追加したい場合、新しいカテゴリを作成する必要はありません。たとえば、環境構築時にサンプルインポートを実行すると、自動的に「Sample」というユーザカテゴリが作成されます。このカテゴリには、RESTやSQL定義などのユーザ定義のサンプルが配置されます。アプリケーション開発において共有したいユーザ定義の例を作成した際に、このカテゴリを活用することをおすすめします。
ユーザカテゴリを新規作成する
ユーザカテゴリ情報には、フローカテゴリIDとフローカテゴリ名を入力します。フローカテゴリ名は多言語に対応しています。
Step. 2 ユーザ定義を作成する
実現したい処理に応じて、ユーザ定義を作成します。ユーザ定義では、以下の技術や言語などを使用した処理をタスクとして定義することが可能です。
- JavaScript:タスクの入出力値とJavaScriptの関数を紐づけた処理
- REST:タスクの入出力値とREST APIを呼び出すパラメータ・レスポンスを紐づけた処理
- SQL:タスクの入力値と2Way-SQLを組み合わせた処理
- CSV:タスクの入力値とCSVファイルを紐づけた処理
上記で取り上げた以外にも、さまざまな処理を定義できます。各ユーザ定義の詳細な作成方法については、この記事内の「ユーザ定義の種類と特徴」を参照してください。
ユーザ定義の共通設定
すべてのユーザ定義に共通する設定について確認できます。これらの設定項目や入出力値の設定は、ユーザ定義を作成する際に必ず行うため、概要を把握しておきましょう。
Step. 3 アイコンを設定する
作成したユーザカテゴリとユーザ定義にそれぞれアイコンを設定できます。アイコンを設定することによって、「ロジックフロー定義編集」画面の「パレットメニュー」から目的のユーザ定義を探しやすくなります。さらに、自分以外の人がロジックフローを確認する際にも、配置されたユーザ定義の目的が簡単に伝わりやすくなるため、便利です。
なお、アイコンの設定は必須ではありません。アイコンを設定しない場合は「 (im_arrow_270)」が表示されます。
アイコンを設定する
ユーザカテゴリの用途に合わせたアイコンを設定した後、ユーザ定義の目的に適したアイコンを設定します。それぞれのアイコンを設定した後、パレットの表示を確認してみましょう。
Step. 4 ユーザ定義を配置する
作成したユーザ定義をロジックフローに配置します。Step. 3で設定したアイコンは、タスクとタスク種別に表示されます。
ユーザ定義を配置する
作成したユーザ定義をロジックフローに配置する方法やバージョン管理について確認できます。ロジックフローにユーザ定義を配置する際、常に最新バージョンが選択されます。ユーザ定義の削除における注意事項についても押さえておきましょう。
<仕様に関する資料>
上記で説明したStep. 1~4の設定項目について、詳しくは仕様書でも確認できます。
ユーザ定義の仕様
ユーザ定義の構成要素や動作仕様について確認できます。IM-LogicDesignerが標準で用意しているアイコン以外に、オリジナルのアイコンを使用したい場合は、画像の種類やサイズなどの仕様を確認してから、画像を準備しましょう。
ユーザ定義の種類と特徴
ユーザ定義では、幅広い用途に対応するため、さまざまな技術や言語などを利用して複雑なタスクを作成できます。ここでは、用途に応じたユーザ定義の種類と特徴について紹介します。
Case 1 プログラムを実行する処理を定義したい
特定の目的を達成するため、プログラムを実行する処理を定義したい場合は、以下のユーザ定義を使用します。
ユーザ定義(JavaScript)
ユーザ定義(JavaScript)は、JavaScriptを利用してタスクの処理内容を定義したいときに使用します。
このユーザ定義では、タスクの入出力値とJavaScriptの関数function
の引数や戻り値を紐づけることで、プログラム的な処理を実行できます。これにより、新規でロジックフローを構築するだけでなく、intra-mart Accel Platformにある既存のJavaScript資産もロジックフロー内で効果的に活用できます。
JavaScriptを利用したユーザ定義
JavaScriptでユーザ定義を行う際、JavaScriptのコードや入出力値といった初期サンプルがあらかじめ定義されています。このサンプルをもとに、実現したい処理に合わせて編集していきましょう。
ユーザ定義(REST)
ユーザ定義(REST)は、REST APIを利用した処理をタスクとして定義したいときに使用します。
このユーザ定義では、タスクの入出力値とREST APIのパラメータやレスポンスの値を紐づけることで、プログラム的な処理を実行できます。これにより、外部で提供されているREST APIを利用できるだけでなく、イントラネット内にある他のパッケージ製品の処理を呼び出したり、別環境にあるIM-LogicDesignerのフロールーティングを実行したりするなど、多岐にわたって活用できます。
RESTを利用したユーザ定義
仮想のサービス提供者とREST APIを想定して、仮想サービスにアクセスするタスクの処理を実装する流れを確認できます。参考情報では、より高度なREST APIの設定方法についても説明しています。
Case 2 データベースやファイルを操作する処理を定義したい
アプリケーションから直接データベースやファイルにアクセスして、データ操作を行う処理を定義したい場合は、以下のユーザ定義を使用します。
ユーザ定義(SQL)
ユーザ定義(SQL)は、SQLを利用してタスクの処理内容を定義したいときに使用します。
このユーザ定義では、タスクの入力値と2Way-SQLを組み合わせた柔軟な処理を定義でき、実行結果を出力値として返却します。これにより、必要なデータベースにアクセスして、SQLの各クエリに応じたデータ操作を行うことができます。サポートしているデータベースとクエリの種別は、それぞれ以下のとおりです。
データベース種別
- TENANT(テナントデータベース):intra-mart内にあるテナント専用のデータベース
- SHARED(シェアードデータベース):intra-mart外にある外部システムのデータベース
クエリ種別
- SELECT:データを取得するためのクエリ
- INSERT:新しいデータを挿入するためのクエリ
- UPDATE:既存のデータを更新するためのクエリ
- DELETE:データを削除するためのクエリ
SQLを利用したユーザ定義
テナントデータベースへのアクセスを想定して、クエリ種別ごとにユーザ定義を設定する方法について確認できます。
ユーザ定義(Database Fetch)
ユーザ定義(Database Fetch)は、データベース上に格納されている大量のデータを効率的に取得し、処理したいときに使用します。定義できるSQLは、SELECT文のみとなり、データ取得に特化した処理を行います。
このユーザ定義では、タスクの入力値と2Way-SQLを組み合わせた取得処理を定義し、実行結果を出力値として繰り返し返却します。これにより、必要なデータベースにアクセスし、データを逐次的に取得・処理することができます。
ユーザ定義(SQL)のSELECT文との主な違いは、フェッチサイズを指定できる点です。フェッチサイズを設定することで、一度に取得するデータの件数を調整し、パフォーマンスを最適化できます。
SQL(SELECT文)を利用したユーザ定義
テナントデータベースへのアクセスを想定して、SQL(2WaySQL)のSELECT文を利用した設定方法について確認できます。ユーザ定義(SQL)とユーザ定義(Database Fetch)の違いについても、押さえておきましょう。
ユーザ定義(CSV Fetch)
ユーザ定義(CSV Fetch)は、CSVファイルに保存された大量のレコードを効率的に読み込み、処理したいときに使用します。
このユーザ定義では、タスクの入力値と対象となるCSVファイルを紐づけ、読み込んだレコードの各要素を出力値として順次処理します。これにより、サイズの大きいCSVファイルでも、効率的にデータを処理することができます。
CSVファイルを対象としたユーザ定義
シンプルな構造を持つCSVファイルを例に、CSVのフォーマット情報の設定や処理設定などについて確認できます。
Case 3 任意の要素を取得する処理を定義したい
さまざまなリソースから、任意の要素を取得する処理を定義したい場合は、以下のユーザ定義を使用します。
ユーザ定義(Excel入力)
ユーザ定義(Excel入力)は、Excelファイル上のレコードを効率的に読み込み・処理したいときに使用します。
このユーザ定義では、タスクの入力値と対象となるExcelファイルを紐づけ、読み込んだレコードを出力値として処理します。これにより、Excelファイル内の特定の値を取得し、タスク処理に利用することができます。
Excelファイル(入力)を対象としたユーザ定義
Excelファイルから取得したいシートやセルを指定したり、セルを読み込む範囲を指定したりする方法について確認できます。この際、セルのデータ型とユーザ定義(Excel入力)で指定したデータ型が一致するように注意してください。
ユーザ定義(Excel出力)
ユーザ定義(Excel出力)は、入力値として渡された値を読み込み、Excelファイルに書き出したいときに使用します。
このユーザ定義では、タスクの入力値と対象となるExcelファイルを紐づけ、指定されたデータをExcelファイルとして出力するように処理します。これにより、特定の値をExcelファイルに書き出して保存し、そのデータをタスク処理に利用することができます。
Excelファイル(出力)を対象としたユーザ定義
出力した値を格納するExcelファイルのシートやセルを指定したり、セルの範囲を指定したりする方法について確認できます。
ユーザ定義(XML解析)
ユーザ定義(XML解析)は、XMLファイルを読み込み、特定の要素の値を取得したいときに使用します。
このユーザ定義では、タスクの入力値として指定したXMLファイルから、設定した要素の値を出力値として取得するように処理します。これにより、XML内に記述されている属性の値やテキスト要素などの必要な情報を抽出し、タスク処理に利用することができます。
XMLファイルを対象としたユーザ定義
アカウント情報のXMLファイルを使用し、アカウントデータを取得する方法について確認できます。出力値の定義には、ルートから要素を定義する方法とXPathを使用して取得したい要素を指定する方法があります。
ユーザ定義(HTML解析)
ユーザ定義(HTML解析)は、HTMLファイルを読み込み、特定の要素の値を取得したいときに使用します。
このユーザ定義では、タスクの入力値として指定したHTMLファイルから、設定した要素の値を出力値として取得するように処理します。これにより、HTML内に記述されている属性の値やテキスト要素などの必要な情報を抽出し、タスク処理に利用することができます。
HTMLファイルを対象としたユーザ定義
サンプルのHTMLファイルを使用し、特定の要素を取得する方法について確認できます。出力値の定義には、ルートから要素を定義する方法とCSSセレクタを使用して取得したい要素を指定する方法があります。
Case 4 文字列を置換する処理を定義したい
入力データをもとに文字列テンプレートを置換して、生成した文字列を返却する処理を定義したい場合は、以下のユーザ定義を使用します。
ユーザ定義(テンプレート)
ユーザ定義(テンプレート)は、文字列テンプレートを用いて、入力に応じて動的に文書を生成したいときに使用します。テンプレートの記法として、FTL(FreeMarker Template Language)に対応しています。
このユーザ定義では、タスクの入力値と文字列テンプレートを用いて文書を生成し、その生成結果の文字列を出力値として扱うように処理します。これにより、同じテンプレートを使用しても、入力値に応じてカスタマイズされた文書を生成することができます。たとえば、共通の文字列を含むようなメール本文やHTMLなど、テンプレート化しやすい文書の生成に適しています。テンプレートは、多言語(日本語・英語・中国語)に対応しています。
FTLを利用したユーザ定義
FTLでユーザ定義を行う際、利用頻度が高い構文(文字列の置換・繰り返し・条件分岐・エスケープ処理)が初期サンプルにあらかじめ定義されています。このサンプルをもとに、実現したい処理に合わせて編集していきましょう。
まとめ
IM-LogicDesignerのユーザ定義を活用すると、複雑な処理を行うロジックフローを簡単に作成できます。アプリケーションの目的や用途によっては、標準のタスクでは対応できなかったり、複数のタスクを組み合わせる必要が出てきたりする場合があります。そのような場合でも、SQL・JavaScript・REST APIなどを使用して、オリジナルのタスクを作成することで、柔軟に対応することが可能です。コードや構文を記述するユーザ定義(JavaScript・テンプレート)では、初期サンプルを用意していますので、カスタマイズにも挑戦してみましょう。
intra-martでは、IM-LogicDesignerをもっと知っていただくためにマニュアルやコンテンツなどを豊富にご用意しています。IM-LogicDesignerの機能を最大限に発揮させるためにも、ぜひご活用ください。