1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【BizRobo! Link】複雑な条件分岐もスッキリ!Decision Table 機能活用ガイド

1
Posted at

はじめに

RPAでロボットを作っているとき、「〇〇のデータを△△画面に入力する」とか、「〇〇のデータを△△画面からコピーしてくる」といった画面を中心にしたステップ作成には不満はないけれど、その前提となる「〇〇のデータ」を判断するプロセス、おそらく人手で作業する際には頭の中で瞬時に判断する(すでに覚えてしまっている)条件判断や、Excelで作ったマトリックス表を見ながら判断するような処理をRPAで実装するとなると、苦痛だ。

特に業務部門のユーザーがロボットを作成するような場合、前者の画面作業は業務フローに直結しているため受け入れやすいとしても、後者のデータ処理についてはエンジニアに任せたい、またはRPAを分かりにくくする原因なのではないか。という仮説から、ルールエンジンとして Decision Table の機能を BizRobo! Link に実装してみました。

RPAやってみたけど入口(画面処理)に入るまでの敷居(データ処理)が高すぎて諦めた。。という方の助けになれば幸いですが、、「いやいや、最初に覚えること増やしてどうすんだ。余計に入門しにくくなる。」という意見も無視できません。

実際のモノを見て、当事者が直接判断できるように、少しずつ情報をまとめていきます。

Decision Table とは

Decision Table(決定表)とは、複雑な条件分岐ロジックを「表形式」で管理する機能です。
通常、ロボット内に実装してしまう「もしAならB、そうでなくCならD……」といった「If / Else」の分岐ロジックを、ロボットから切り離して BizRobo! Link サーバー上で管理します。入力データ(条件)を渡すと、事前に定義されたルール表に基づいて判定を行い、結果(出力)を返します。これにより、ビジネスルールの変更があってもロボット自体の修正が不要になります。

Decision Table ビフォーアフター

百聞は一見に如かず。Decision Table を導入することで、BizRobo! Design Studio でのロボットの実装がどのように変わるかを見てみましょう。

こちらは、ある商品の「送料計算ロジック」を実装したロボットの比較です。

▼ Before:Decision Table 使用前

🟩緑ロボットの場合
image.png
🟦Basic Engine Robotの場合
image.png

▼ After:Decision Table 使用後

🟩緑ロボットの場合
image.png

🟦Basic Engine Robotの場合
image.png

その差は歴然です。
使用前は条件分岐のステップが幾重にも重なり、全体の見通しが悪く、修正箇所を探すのも一苦労でした。
しかし Decision Table を使用すると、これらのロジックはすべてサーバー側に移譲されるため、ロボット側は 「判定実行」という1つのステップを配置するだけ になります。

これにより、以下のメリットが得られます。

  • 可読性の向上: ロボットのフローがシンプルになり、何をしているかが一目でわかります。
  • 保守性の向上: 送料の計算ルールが変わっても、ロボットを編集・デプロイし直す必要はありません。Web管理画面からテーブルを書き換えるだけで対応完了です。

BizRobo! Link における Decision Table

では、実際に BizRobo! Link の画面でどのように管理するのかを見ていきましょう。

画面と機能

▼ テーブル一覧画面
image.png

こちらは Decision Table の一覧画面です。プロジェクトごとにテーブルを作成・管理できます。検索機能も備わっており、目的のルール定義へ素早くアクセスできます。

▼ ルール編集画面
image.png

こちらがルールの実体を定義する編集画面です。
Excelのようなグリッド形式のUIを採用しており、以下の要素で構成されています。

  • 条件列 (青色ヘッダー): 判定に使用する入力項目(例: 金額、地域、会員ランクなど)。
  • 結果列 (緑色ヘッダー): 条件に合致したときに返す値(例: 送料、手数料など)。
  • 行 (ルール): 上から順に評価されます。「優先度」を設定することで評価順序を制御可能です。

設定方法

具体的な設定例として、ECサイトの 「送料計算ルール」 を作ってみましょう。
要件は以下の通りとします。

  1. ゴールド会員 は、購入金額に関わらず 送料無料
  2. シルバー会員 で、かつ 5,000円以上 購入した場合は 300円
  3. クーポン利用 がある場合は、一律 500円
  4. それ以外は、通常送料 800円

この場合、Decision Table では以下のように列と行を定義します。

1. 列定義 (スキーマ設定)

  • 条件列 (Input):
    • rank (文字列): 会員ランク
    • amount (数値): 購入金額
    • has_coupon (真偽値): クーポンの有無
  • 結果列 (Output):
    • shipping_cost (数値): 送料

2. ルール定義 (行設定)

優先度 rank (条件) amount (条件) has_coupon (条件) shipping_cost (結果)
1 == "Gold" (Any) (Any) 0
2 == "Silver" >= 5000 (Any) 300
3 (Any) (Any) == true 500
4 (Any) (Any) (Any) 800

このように、要件をそのまま表に落とし込むだけでロジックが完成します。
また、ヒット方針 (Hit Policy) を「First(最初に一致した行のみ)」に設定しておけば、上から順に評価され、条件に合った時点で判定が終了するため、複雑な優先順位も簡単に表現できます。

実行方法

作成した Decision Table をロボットや外部システムから利用する方法は、主に2通りあります。

1. コネクターによる実行

BizRobo! のロボットから利用する場合は、標準搭載されている 「Util_DecisionTable」コネクター を使用するのが最も簡単です。

Design Studio でコネクターを読み込み、「判定実行」アクションを使用します。設定するパラメータはシンプルです。

image.png

  • テーブル名: 作成したテーブルの名前(例: ShippingRules
  • 条件リスト: 判定したいデータをJSON形式で渡します。
    • 例: {"rank": "Silver", "amount": 3000, "has_coupon": false}
  • Robot Token: 認証用のトークン(ユーザープロファイルから取得)

実行すると、結果として {"shipping_cost": 800} のような JSON データが返却されます。これをロボット側でパースして利用します。

2. REST API による実行

BizRobo! Link は外部システム連携用の REST API も備えています。
これを利用すると、BizRobo! 以外のシステム(Webアプリや他のiPaaSなど)からも、BizRobo! Link 上のビジネスルールエンジンを利用することが可能です。

  • エンドポイント: POST /api/v1/decision-tables/{tableName}/evaluate
  • ヘッダー: Authorization: Bearer {Robot Token}
  • ボディ:
    {
      "inputData": {
        "rank": "Gold",
        "amount": 1000
      }
    }
    

まとめ

今回は BizRobo! Link の Decision Table について見てきました。
次回はもう一つの内蔵機能である DataStand の紹介に移ろうと思います。

ちなみに今回の記事のメインコンテンツはソースコードを基にAIが生成した文章をベースに加筆修正しています。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?