お客様のDXの推進やクラウド活用をサポートする
NRIグループのプロフェッショナルによるブログ記事を掲載

Oracle APEXワークフローで業務プロセスを実装する

	
山之内 亜由知- 20231222174231

はじめに

こんにちは、NRIでOracle APEXの活用・導入推進を担当している山之内です。

Oracle APEXとは、Oracle Databaseにアドオンすることでデータを活用したWebアプリケーションを開発できるローコードプラットフォームです。Oracle APEXではパワフルなテーブルやグリッド、チャートなど基本的なテンプレートが用意されており、そのテンプレートとそこに表示するデータ(TABLEやSQL)を指定することで、ほとんどコーディングすることなく、簡単にWebアプリケーションを開発することができます。さらに。JavaScriptやPL/SQLを使ってロジックを記述することで、より自由度の高いアプリケーションを開発することもできます。

今回のブログでは、このローコードプラットフォームOracle APEXに新たに追加された「ワークフロー機能」を使って業務プロセス管理アプリケーションを実装する方法について簡単にご紹介します。

ワークフロー/BPMとは

ワークフローとは「従業員の申請を、部長が承認して、人事部が申請して、結果を本人に通知する」といったような一連の流れのことです。Business Process Management (BPM)は、ワークフローを可視化し、暗黙のルールや実は冗長だった手続きを見直し改善していく活動を指し、その手段として用いられるワークフロー管理システムを、BPMツールと呼びます。

BPMツールの導入等によってワークフローをシステム化することで、先の例では申請者がメール等で依頼しなくても上司や人事部に申請が届けられ、最後の「通知」をシステムが自動で発信できるなど、フォーカスすべき業務に集中できるようになります。

 

Oracle APEXのワークフロー作成機能

2023年11月リリースの Oracle APEX 23.2 で追加されたワークフロー機能は、GUIベースのワークフロー・デザイナを使用して視覚的にワークフローを定義することができます。フローの進行状況やその時点でワークフローが持っている変数の値は、Oracle APEXおよびDatabaseによって自動的に永続化されるため開発者が意識する必要はありません。承認対象のデータなど、業務上のデータは開発者が登録・更新を管理する必要があります。

図1:ワークフロー作成画面の例

ワークフローとして実装できるアクティビティは、承認など人手によるタスク、PL/SQLのプロシージャーやRESTful APIの呼び出し、電子メールやプッシュ通知の送信、指定の時刻や指定分の待機と、条件によって分岐するためのパーツからなります。シンプルではあるものの、外部システムのAPIや PL/SQLを呼び出すことで様々なタスクを実行させることができます。

また、承認などのタスクについては、1クリックでそのタスクのための承認ボタンが付いた画面が作れるなど、ローコードツールとしての側面もしっかり持ち合わせています。

実際の設計開発イメージ

では、もう少し詳しく、設計や開発の進め方を紹介していきたいと思います。ただし、ここでは、Oracle APEXの環境構築や、アプリケーション作成の詳細は記載していません。気軽に試してみたいのであればOracle公式の検証環境(無料)、もう少し本格的なPoCや実際の開発を行いたい場合はOCIのAutonomous DBの利用がおすすめです。Autonomous DBはAPEXがプリインストールされておりアクティベーション操作だけですぐに使うことができます。

以下、APEX環境構築が終わって、”購買システム”という名前の空のアプリが作成された状態からの開発イメージです。

GUIツールでワークフローを定義する前に用意するもの

① 登場人物やタスクを整理した業務プロセス

② 承認対象データなど①の各段階で使用するTABLE類

③ ②のTABLEなど必要なデータを入出力するAPIやPL/SQLのコード

④ 承認等のタスクの定義(承認者は誰か、画面に表示したい項目などを定義したもの)

簡単な例として、①は図2のような業務プロセスを実装していくこととします。

図2:物品購入フロー(概要)

②のメインは、”注文”などのレコードを保持するTABLEで、注文ID、商品名、数量の他、申請者名や、”承認済み”などの状態を保持するステータス欄を持たせています。図3では、クイックSQLという簡易記法でnumberやVARCHAR2(30)などのデータ型のカラムを持つwf_orderという名称のテーブルを作っています。

wf_order 
  order_id num /pk 
  item     vc30 
  quantity num /nn 
  price    num /nn 
  employee_name vc20 
  approver_name vc20 
  status   vc15 
  workflow_id num 

図3:wf_order テーブル

③のPL/SQLコードは、ユーザーが入力した値をもとに注文データをINSERTしたり、業者からの見積金額で注文データをUPDATEする処理などを用意していきます。図4の例は、ORDER_ENTRYという名前の、注文データをwf_orderテーブルにINSERTして、採番された注文IDを返却する関数です。

function order_entry ( 
  p_workflow_id   in number, 
  p_item          in varchar2, 
  p_quantity      in number, 
  p_employee_name in varchar2, 
  p_approver_name in varchar2 ) 
return number  
is  
  l_order_id      number; 
begin  
  insert into wf_order ( 
    workflow_id, 
    item, 
    quantity, 
    price, 
    employee_name, 
    approver_name, 
    status 
  ) 
  values ( 
    p_workflow_id, 
    p_item, 
    p_quantity, 
    0, 
    p_employee_name, 
    p_approver_name, 
    'NEW' 
  ) 
  returning order_id into l_order_id; 
  
  return l_order_id; 
end order_entry;  

図4:関数ORDER_ENTRY

④の承認等のタスクの定義とは、APEX内で定義するもので、図5の画面のように、タスク名とその承認者、入出力パラメーター、実際に承認等のタスクを行う画面の紐づけなどの定義を持っているものです。実際に承認等を行うための承認ボタンが付いたフォーム画面はここから1クリックで作成できます。

図5:タスク定義画面

GUIでフローを定義していく

ここまでの準備ができたら、いよいよ、図6の画面のようなワークフロー・デザイナを開いて、GUIベースでワークフローを定義していきます。ダイアグラム・ビルダーでは、画面下側にある”アクティビティ”から承認などのヒューマンタスク、API呼び出しなどの選び、ダイアグラム・ビルダー内にDrag&Dropして作図していきます。

下記の例では、APIの呼び出しを追加し、それにあらかじめ作成しておいたORDER_ENTRYという注文データをDBに格納するPL/SQLファンクションを割り当てています。左ペインの赤い部分は、指定したPL/SQLファンクションの引数に応じて自動で追加されたこのタスクのパラメーターです。それぞれワークフローが持っている変数を渡したり、ファンクションの結果に格納されるファンクションの戻り値を受け取る変数を指定していくことで、アクティビティの定義は完了です。

後続の処理についても、同様に用意しておいたPL/SQLの呼び出しや、承認タスクを組み込み、それぞれのパラメーターに値を渡す定義をしていきます。

図6:ワークフロー定義画面

最後に自動生成できていない周辺画面を追加し、アプリケーションを完成させる

ワークフローの定義が終わったら、手動で追加が必要な画面を足していきます。いちばん最初に注文を入力する”新規注文”フォーム(これはワークフローの外にあるので自動で生成されませんがAPEX自体のローコード開発機能で簡単に作成することができます)と、自分宛に来ている承認依頼等を表示するための”私のタスク”一覧画面(これは統合タスク・リストという組み込みのテンプレートが用意されており数クリックで作成可能です)を追加します。

新規注文フォームの画面では必要事項を入力し、見積依頼を押すと、入力された値をパラメーターとしてワークフローがスタートするように設定しておきます。最低限の開発物としては以上です。

図7:新規注文画面

ひとたびワークフローが開始されると、定義されたアクティビティが順次呼び出され、申請・承認等のタスクは対象者の「私のタスク」画面に自動的に表示されるようになります。タスクをクリックして表示されるドロアーパネルは、それぞれのタスク定義画面から自動生成したもの(正確には開発者情報など少し削っています)です。ここで申請ボタンを押すとそのユーザーに求められていた申請・承認などのタスクが完了したこととなり、次のフローに進んでいきます。

図8:「私のタスク」画面

Oracle APEXでつくるワークフローは何がすごいのか?

今回は、設計・開発の概要のみ簡単にご紹介しましたが、それでも、DB更新処理のAPIを用意する程度で、ほとんどコーディングすることなく、ワークフローの実装とその画面が出来ることがお分かりいただけたかと思います。実際のシステム開発であれば、ここから承認画面の見た目を整えるなどのカスタマイズが続いていきますが、基本的な機能は概ね上記のようなプロセスで開発することができます。

JavaでjBPMなどのフレームワークを使ってスクラッチ開発するのと比べて、圧倒的に少ない定義ファイルやコード量で実装できます。それでいて、経費精算やその他承認業務などに特化したワークフロー専用のSaaS/ノーコードツールとも異なり、通常のWebアプリケーションの一部として、その他の業務画面・機能と統合されたシステムを作ることができる点もOracle APEXでワークフローを実装する強みの一つです。

 

Oracle APEXのポテンシャル

2023年9月にラスベガスで開催された Oracle CloudWorld 2023 でAPEXに関しても様々な機能拡張が発表されました。特に”AI codingによって生成された20万行のJavaコードを読んで正しいかどうか検証したいと思うか?”の問いかけとともに、APEXのブループリント(上記で説明したようなベース部分)を作る方が良いとして※1、APEXアプリケーションの生成自体を、自然言語に対応させていくといったような開発の未来像の提示もありました。

今回ご紹介したワークフローも、いずれ自然言語で実装できてしまうかもしれません※2。今後のポストでまた、APEX×AIの世界についてご紹介できたらと思います。

NRIではOracle APEXの導入、活用についてご支援しています。ご関心、お悩みなどありましたらぜひご相談ください。

※1 The future of data and app dev—Juan Loaiza keynote | Oracle CloudWorld 2023
※2 Generative AI + Oracle APEX for Low-Code Application Development

 

お問い合わせ

atlax では、ソリューション・サービス全般に関するご相談やお問い合わせを承っております。



関連リンク・トピックス

・atlax/atlax for OCI ローコード開発(Oracle APEX)

 

※ 記載された会社名 および ロゴ、製品名などは、該当する各社の登録商標または商標です。