複雑な処理を行うロジックフローを作成したい

この記事では、ユーザ定義(ユーザ定義タスク)を活用して、複雑な処理を行うロジックフローを作成する方法を紹介します。IM-LogicDesignerでは、標準で用意しているタスクでは実現できない場合、ユーザが独自に複雑な処理をタスクに定義することが可能です。実現したい処理に合わせて、ユーザ定義を作成する方法を学んでいきましょう。

ユーザ定義(ユーザ定義タスク)とは?

IM-LogicDesignerでは、フローの論理的な流れや構造を制御するために制御要素を使用し、フロー内で実行される具体的な処理を表すタスクを組み合わせてロジックフローを作成します。基本的な処理には、IM-LogicDesignerが提供している標準タスクを使用しますが、以下のような場合は、ユーザ定義(ユーザ定義タスク)を使用します。

  • 必要となる処理に適したタスクが提供されていない
  • 必要となる処理を実現するためには、複数のタスクを組み合わせなければならない

ユーザ定義では、標準タスクでは実現が難しい複雑な処理や独自の処理を実現することができます。目的に合ったタスクを作成し、ロジックフローに組み込んでいきましょう。

ユーザ定義の作成から利用までの流れ

ここからは、実際にIM-LogicDesignerの機能を使って、ユーザ定義を作成し、ロジックフローに組み込むまでの方法について紹介していきます。

Step. 1 ユーザカテゴリを作成する

ユーザ定義を管理・分類するためユーザカテゴリを作成します。ユーザカテゴリ名は、ユーザ定義の用途や適用範囲が一目でわかるように設定すると良いでしょう。これにより、ユーザ定義を再利用する際に、必要なタスクをすぐに見つけることができます。

なお、既存のユーザカテゴリにユーザ定義を追加したい場合、新しいカテゴリを作成する必要はありません。たとえば、環境構築時にサンプルインポートを実行すると、自動的に「Sample」というユーザカテゴリが作成されます。このカテゴリには、RESTやSQL定義などのユーザ定義のサンプルが配置されます。アプリケーション開発において共有したいユーザ定義の例を作成した際に、このカテゴリを活用することをおすすめします。

Step. 2 ユーザ定義を作成する

実現したい処理に応じて、ユーザ定義を作成します。ユーザ定義では、以下の技術や言語などを使用した処理をタスクとして定義することが可能です。

  • JavaScript:タスクの入出力値とJavaScriptの関数を紐づけた処理
  • REST:タスクの入出力値とREST APIを呼び出すパラメータ・レスポンスを紐づけた処理
  • SQL:タスクの入力値と2Way-SQLを組み合わせた処理
  • CSV:タスクの入力値とCSVファイルを紐づけた処理

上記で取り上げた以外にも、さまざまな処理を定義できます。各ユーザ定義の詳細な作成方法については、この記事内の「ユーザ定義の種類と特徴」を参照してください。

Step. 3 アイコンを設定する

作成したユーザカテゴリとユーザ定義にそれぞれアイコンを設定できます。アイコンを設定することによって、「ロジックフロー定義編集」画面の「パレットメニュー」から目的のユーザ定義を探しやすくなります。さらに、自分以外の人がロジックフローを確認する際にも、配置されたユーザ定義の目的が簡単に伝わりやすくなるため、便利です。

なお、アイコンの設定は必須ではありません。アイコンを設定しない場合は「 (im_arrow_270)」が表示されます。

Step. 4 ユーザ定義を配置する

作成したユーザ定義をロジックフローに配置します。Step. 3で設定したアイコンは、タスクとタスク種別に表示されます。

<仕様に関する資料>

上記で説明したStep. 1~4の設定項目について、詳しくは仕様書でも確認できます。

ユーザ定義の種類と特徴

ユーザ定義では、幅広い用途に対応するため、さまざまな技術や言語などを利用して複雑なタスクを作成できます。ここでは、用途に応じたユーザ定義の種類と特徴について紹介します。

Case 1 プログラムを実行する処理を定義したい

特定の目的を達成するため、プログラムを実行する処理を定義したい場合は、以下のユーザ定義を使用します。

ユーザ定義(JavaScript)

ユーザ定義(JavaScript)は、JavaScriptを利用してタスクの処理内容を定義したいときに使用します。

このユーザ定義では、タスクの入出力値とJavaScriptの関数functionの引数や戻り値を紐づけることで、プログラム的な処理を実行できます。これにより、新規でロジックフローを構築するだけでなく、intra-mart Accel Platformにある既存のJavaScript資産もロジックフロー内で効果的に活用できます。

ユーザ定義(REST)

ユーザ定義(REST)は、REST APIを利用した処理をタスクとして定義したいときに使用します。

このユーザ定義では、タスクの入出力値とREST APIのパラメータやレスポンスの値を紐づけることで、プログラム的な処理を実行できます。これにより、外部で提供されているREST APIを利用できるだけでなく、イントラネット内にある他のパッケージ製品の処理を呼び出したり、別環境にあるIM-LogicDesignerのフロールーティングを実行したりするなど、多岐にわたって活用できます。

Case 2 データベースやファイルを操作する処理を定義したい

アプリケーションから直接データベースやファイルにアクセスして、データ操作を行う処理を定義したい場合は、以下のユーザ定義を使用します。

ユーザ定義(SQL)

ユーザ定義(SQL)は、SQLを利用してタスクの処理内容を定義したいときに使用します。

このユーザ定義では、タスクの入力値と2Way-SQLを組み合わせた柔軟な処理を定義でき、実行結果を出力値として返却します。これにより、必要なデータベースにアクセスして、SQLの各クエリに応じたデータ操作を行うことができます。サポートしているデータベースとクエリの種別は、それぞれ以下のとおりです。

データベース種別

  • TENANT(テナントデータベース):intra-mart内にあるテナント専用のデータベース
  • SHARED(シェアードデータベース):intra-mart外にある外部システムのデータベース

クエリ種別

  • SELECT:データを取得するためのクエリ
  • INSERT:新しいデータを挿入するためのクエリ
  • UPDATE:既存のデータを更新するためのクエリ
  • DELETE:データを削除するためのクエリ

ユーザ定義(Database Fetch)

ユーザ定義(Database Fetch)は、データベース上に格納されている大量のデータを効率的に取得し、処理したいときに使用します。定義できるSQLは、SELECT文のみとなり、データ取得に特化した処理を行います。

このユーザ定義では、タスクの入力値と2Way-SQLを組み合わせた取得処理を定義し、実行結果を出力値として繰り返し返却します。これにより、必要なデータベースにアクセスし、データを逐次的に取得・処理することができます。

ユーザ定義(SQL)のSELECT文との主な違いは、フェッチサイズを指定できる点です。フェッチサイズを設定することで、一度に取得するデータの件数を調整し、パフォーマンスを最適化できます。

ユーザ定義(CSV Fetch)

ユーザ定義(CSV Fetch)は、CSVファイルに保存された大量のレコードを効率的に読み込み、処理したいときに使用します。

このユーザ定義では、タスクの入力値と対象となるCSVファイルを紐づけ、読み込んだレコードの各要素を出力値として順次処理します。これにより、サイズの大きいCSVファイルでも、効率的にデータを処理することができます。

Case 3 任意の要素を取得する処理を定義したい

さまざまなリソースから、任意の要素を取得する処理を定義したい場合は、以下のユーザ定義を使用します。

ユーザ定義(Excel入力)

ユーザ定義(Excel入力)は、Excelファイル上のレコードを効率的に読み込み・処理したいときに使用します。

このユーザ定義では、タスクの入力値と対象となるExcelファイルを紐づけ、読み込んだレコードを出力値として処理します。これにより、Excelファイル内の特定の値を取得し、タスク処理に利用することができます。

ユーザ定義(Excel出力)

ユーザ定義(Excel出力)は、入力値として渡された値を読み込み、Excelファイルに書き出したいときに使用します。

このユーザ定義では、タスクの入力値と対象となるExcelファイルを紐づけ、指定されたデータをExcelファイルとして出力するように処理します。これにより、特定の値をExcelファイルに書き出して保存し、そのデータをタスク処理に利用することができます。

ユーザ定義(XML解析)

ユーザ定義(XML解析)は、XMLファイルを読み込み、特定の要素の値を取得したいときに使用します。 

このユーザ定義では、タスクの入力値として指定したXMLファイルから、設定した要素の値を出力値として取得するように処理します。これにより、XML内に記述されている属性の値やテキスト要素などの必要な情報を抽出し、タスク処理に利用することができます。 

ユーザ定義(HTML解析)

ユーザ定義(HTML解析)は、HTMLファイルを読み込み、特定の要素の値を取得したいときに使用します。

このユーザ定義では、タスクの入力値として指定したHTMLファイルから、設定した要素の値を出力値として取得するように処理します。これにより、HTML内に記述されている属性の値やテキスト要素などの必要な情報を抽出し、タスク処理に利用することができます。

Case 4 文字列を置換する処理を定義したい

入力データをもとに文字列テンプレートを置換して、生成した文字列を返却する処理を定義したい場合は、以下のユーザ定義を使用します。

ユーザ定義(テンプレート)

ユーザ定義(テンプレート)は、文字列テンプレートを用いて、入力に応じて動的に文書を生成したいときに使用します。テンプレートの記法として、FTL(FreeMarker Template Language)に対応しています。

このユーザ定義では、タスクの入力値と文字列テンプレートを用いて文書を生成し、その生成結果の文字列を出力値として扱うように処理します。これにより、同じテンプレートを使用しても、入力値に応じてカスタマイズされた文書を生成することができます。たとえば、共通の文字列を含むようなメール本文やHTMLなど、テンプレート化しやすい文書の生成に適しています。テンプレートは、多言語(日本語・英語・中国語)に対応しています。

まとめ

IM-LogicDesignerのユーザ定義を活用すると、複雑な処理を行うロジックフローを簡単に作成できます。アプリケーションの目的や用途によっては、標準のタスクでは対応できなかったり、複数のタスクを組み合わせる必要が出てきたりする場合があります。そのような場合でも、SQL・JavaScript・REST APIなどを使用して、オリジナルのタスクを作成することで、柔軟に対応することが可能です。コードや構文を記述するユーザ定義(JavaScript・テンプレート)では、初期サンプルを用意していますので、カスタマイズにも挑戦してみましょう。

intra-martでは、IM-LogicDesignerをもっと知っていただくためにマニュアルやコンテンツなどを豊富にご用意しています。IM-LogicDesignerの機能を最大限に発揮させるためにも、ぜひご活用ください。