Oracle APEX 22.1より承認コンポーネントと統合タスク・リストという機能が追加されています。この機能を使ってみます。
承認コンポーネントが提供する機能を理解するために、承認コンポーネントによって提供されている機能のみを使用したOracle APEXのアプリケーションを作成しました。
https://apex.oracle.com/pls/apex/r/japancommunity/simple-approvals-component/
アプリケーションのエクスポートは以下に置いています。
https://github.com/ujnak/apexapps/blob/master/exports/simple-approvals-component.sql
作成したサンプルを使って、以下の操作を行なってみます。
- 申請花子さんが、ホーム・ページから夏季休暇を申請します。
- 申請花子さんは、申請後、自分で開始(これは統合タスク・リストです)のページを開き、作成されたタスクを一覧します。
- 申請花子さんは、件名をクリックしタスクの詳細を開き、この申請の所有者が割り当たっていない(状態としては未割当て)ことを確認します。
- 承認太郎さんが、私のタスクのページを開き、申請された休暇を確認します。承認太郎さんは休暇申請を承認する権限を持っているため(タスク定義で潜在的所有者 - Potential Owner - となっている)、私のタスク(これも統合タスク・リストです)に申請花子さんによる夏季休暇の申請が表示されます。まだタスクは未割当ての状態です。
- 管理者は、申請花子さんによる夏季休暇の申請の承認者として、承認太郎さんを割り当てます(委任 - Delegate - を実行しています)。承認太郎さんがこの申請の所有者 - Actual Owner - になります。
- 承認太郎さんが私のタスク(統合タスク・リスト)のページを開き、申請花子さんによる夏季休暇の申請を承認します。
- 申請花子さんが、自分で開始のページを開いて結果を確認します。タスクの詳細を開き、履歴を参照することで、承認までの経緯が分かります。
タスクの潜在的所有者 - Potential Owner - は、そのタスクに要求 - Claim - を実行することにより所有者 - Actual Owner - になれます。所有者になる(タスクが割り当てられるともいいます)と、タスクに対して承認 - Approve - や却下 - Reject - を実行できるため、管理者による委任は不要になります。
実際は、管理者による委任が行われることは稀で、潜在的所有者が要求を行い所有者となり、承認または却下を実施するでしょう。
上記の操作を実施している動画です。
上記のアプリケーションを構成しているページについて説明します。
ホーム・ページは、通常の静的コンテンツのリージョンに、ページ・アイテムとボタンを配置しています。ボタン送信(B_SUBMIT)をクリックしたときに、タスク定義からタスクを作成します。
ボタンを押した時に実行するプロセスを作成し、識別のタイプとしてヒューマン・タスク - 作成を選択します。これは、承認コンポーネントとして、APEX 22.1で新たに追加されたプロセスのタイプです。
自分で開始のページです。
統合タスク・リストのページを作成する際に、レポート・コンテキストを選択します。レポート・コンテキストの選択肢として、以下の3種類からひとつを選択できます。
作成されたページは、スマート・フィルタとカード・リージョンより構成されます。ページ作成ウィザードが、APEXの標準コンポーネントを組み合わせてページを作成しています。作成されたページは、Oracle APEXの通常の手順(プロパティの変更、CSSの追加やJavaScriptの記述)にて、見栄えや動作をカスタマイズすることが可能です。
私のタスクのページも同様に、統合タスク・リストのページとして作成しています。レポート・コンテキストはマイ・タスクを選択しています。
マイ・タスクでの一覧では、承認および却下を行なうボタンが表示されます。実際の処理は動的アクションとして実装されています。動的アクションで呼び出されるサーバー側の処理の中で、APEX 22.1で新設されたパッケージAPEX_APPROVALのプロシージャを呼び出しています。
管理ページは、統合タスク・リストのページを作成する際に、レポート・コンテキストとして管理タスクを選択して作成します。
統合タスク・リストに一覧されているタスクの件名をクリックすると、タスクの詳細ページが画面右側にドロワーとして開きます。
このページは、共有コンポーネントのタスク定義の設定に含まれる、タスクの詳細ページの作成をクリックして作成します。
作成されたページでは、タスクに実行できるさまざま処理(要求、承認、却下、リリース、委任、優先度の設定)を実行するプロセスが作成されています。これらのプロセスのタイプはAPEX 22.1で新設されたヒューマン・タスク - 管理です。
Oracle APEXで新しく追加された承認コンポーネントですが、実質的に追加されているのは以下になります。
- ページ作成ウィザードによる統合タスク・リストのページ生成機能
- タスクの詳細ページの生成機能
- プロセス・タイプヒューマン・タスク - 生成、ヒューマン・タスク - 管理
- パッケージAPEX_APPROVAL
- 実行時ビューAPEX_TASKSその他
- 共有コンポーネントのタスク定義
タスク定義は、共有コンポーネントのワークフローと自動化に含まれます。
承認コンポーネントを使用するには、最初にタスク定義を作成します。
参加者としタスクを操作できる人を設定します。参加者である潜在的所有者として、それぞれのユーザーを直接登録することもできますし、SQLの結果などから動的に登録することもできます。ただし、潜在的所有者はタスクが作成されたときに評価されます。タスクの生成後にタスク定義を変更し潜在的所有者を増やしても、すでに作成済みのタスクは影響を受けません。(実行時に潜在的所有者を追加するには、APEX_APPROVAL.ADD_TASK_POTENTIAL_OWNERを呼び出します。)
ビジネス管理者の登録も、参加者のセクションに含まれます。
潜在的所有者がひとりしかいない場合、タスクが作成された直後にその潜在的所有者がタスクにアサインされます。作成されたタスクは即座に割り当てられた状態になり、未割当ての状態はスキップされます。
パラメータはタスクに紐づいて保存される値になります。タスクにはライフサイクルがあり、承認、却下、キャンセルまたはエラーが発生すると終了します。一定期間を経過すると、終了したタスクは削除されます。タスクに紐づいているパラメータも同時に削除されます。そのため、パラメータは承認や却下の判断に使うが、永続的に保存する必要がない値を保持するために使用します。
アクションとは、サーバー側でのPL/SQLコードの実行もしくはメールの送信処理です。タスクに対して要求や完了(承認または却下)といった操作が行われたときに、それらのイベントに紐付けられたアクションが実行されます。
タスク定義を元に作成されたタスクの状態は、Oracle APEXが管理します。アクションによって、タスクとAPEXアプリケーションとの連携が実装されます。
では、この承認コンポーネントを使ってどのようなワークフローが実装できるのか、について説明します。この点については、Oracle APEXのマニュアルの19.6.8 About Task States and Transitionsが参考になります。
タスク定義を元に作成されるタスクがとり得る状態は、以下の状態遷移図で定義されてます。アプリケーション開発者による変更はできません。
主なフローだけに注目すると、作成されたタスクは、誰かにアサインされて、その人がタスクを承認か却下することにより終了します。
ワークフローを設計し、Oracle APEXのアプリケーションに組み込むために、Flows for APEXが利用できます。また、Oracle APEXが提供している承認コンポーネントは、Oracle APEXの将来バージョンにて、Flows for APEXで定義したワークフローに含まれる、ひとつのステップとして活用できるようになる予定です。
次の記事では、今回のサンプル・アプリケーションの作成手順を紹介します。