2022年7月6日水曜日

APEX 22.1の承認コンポーネント(1) - 概要

 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

作成したサンプルを使って、以下の操作を行なってみます。

  1. 申請花子さんが、ホーム・ページから夏季休暇を申請します。
  2. 申請花子さんは、申請後、自分で開始(これは統合タスク・リストです)のページを開き、作成されたタスクを一覧します。
  3. 申請花子さんは、件名をクリックしタスクの詳細を開き、この申請の所有者が割り当たっていない(状態としては未割当て)ことを確認します。
  4. 承認太郎さんが、私のタスクのページを開き、申請された休暇を確認します。承認太郎さんは休暇申請を承認する権限を持っているため(タスク定義潜在的所有者 - Potential Owner - となっている)、私のタスク(これも統合タスク・リストです)に申請花子さんによる夏季休暇の申請が表示されます。まだタスクは未割当ての状態です。
  5. 管理者は、申請花子さんによる夏季休暇の申請の承認者として、承認太郎さんを割り当てます(委任 - Delegate - を実行しています)。承認太郎さんがこの申請の所有者 - Actual Owner - になります。
  6. 承認太郎さんが私のタスク統合タスク・リスト)のページを開き、申請花子さんによる夏季休暇の申請を承認します。
  7. 申請花子さんが、自分で開始のページを開いて結果を確認します。タスクの詳細を開き、履歴を参照することで、承認までの経緯が分かります。
タスクの潜在的所有者 - Potential Owner - は、そのタスクに要求 - Claim - を実行することにより所有者 - Actual Owner - になれます。所有者になる(タスクが割り当てられるともいいます)と、タスクに対して承認 - Approve - や却下 - Reject - を実行できるため、管理者による委任は不要になります。

実際は、管理者による委任が行われることは稀で、潜在的所有者要求を行い所有者となり、承認または却下を実施するでしょう。

上記の操作を実施している動画です。


上記のアプリケーションを構成しているページについて説明します。

ホーム・ページは、通常の静的コンテンツのリージョンに、ページ・アイテムとボタンを配置しています。ボタン送信B_SUBMIT)をクリックしたときに、タスク定義からタスクを作成します。


ボタンを押した時に実行するプロセスを作成し、識別タイプとしてヒューマン・タスク - 作成を選択します。これは、承認コンポーネントとして、APEX 22.1で新たに追加されたプロセスのタイプです。


自分で開始のページです。


ページ作成ウィザードにて統合タスク・リストを選択して作成します。

APEX 22.1では、ページ作成ウィザードコンポーネントに、統合タスク・リストが追加されています。


統合タスク・リストのページを作成する際に、レポート・コンテキストを選択します。レポート・コンテキストの選択肢として、以下の3種類からひとつを選択できます。
  1. 自分で開始 - 作成者が自分自身であるタスクを一覧する。
  2. マイ・タスク - 自分自身が潜在的所有者(または所有者)であるタスクを一覧する。(自分自身が潜在的所有者であっても、作成者でもあるタスクは一覧から除外されます。自分が作成したタスクを自分自身で承認または却下することはできません。
  3. 管理タスク - すべてのタスクを一覧する。
自分で開始のページは、レポート・コンテキストとして自分で開始を選択して作成しています。


作成されたページは、スマート・フィルタカード・リージョンより構成されます。ページ作成ウィザードが、APEXの標準コンポーネントを組み合わせてページを作成しています。作成されたページは、Oracle APEXの通常の手順(プロパティの変更、CSSの追加やJavaScriptの記述)にて、見栄えや動作をカスタマイズすることが可能です。


私のタスクのページも同様に、統合タスク・リストのページとして作成しています。レポート・コンテキストマイ・タスクを選択しています。


マイ・タスクでの一覧では、承認および却下を行なうボタンが表示されます。実際の処理は動的アクションとして実装されています。動的アクションで呼び出されるサーバー側の処理の中で、APEX 22.1で新設されたパッケージAPEX_APPROVALのプロシージャを呼び出しています。


管理ページは、統合タスク・リストのページを作成する際に、レポート・コンテキストとして管理タスクを選択して作成します。


統合タスク・リストに一覧されているタスクの件名をクリックすると、タスクの詳細ページが画面右側にドロワーとして開きます。


このページは、共有コンポーネントタスク定義設定に含まれる、タスクの詳細ページの作成をクリックして作成します。


作成されたページでは、タスクに実行できるさまざま処理(要求承認却下リリース委任優先度の設定)を実行するプロセスが作成されています。これらのプロセスのタイプはAPEX 22.1で新設されたヒューマン・タスク - 管理です。


Oracle APEXで新しく追加された承認コンポーネントですが、実質的に追加されているのは以下になります。
  1. ページ作成ウィザードによる統合タスク・リストのページ生成機能
  2. タスクの詳細ページの生成機能
  3. プロセス・タイプヒューマン・タスク - 生成ヒューマン・タスク - 管理
  4. パッケージAPEX_APPROVAL
  5. 実行時ビューAPEX_TASKSその他
  6. 共有コンポーネントのタスク定義
タスク定義は、共有コンポーネントワークフローと自動化に含まれます。


承認コンポーネントを使用するには、最初にタスク定義を作成します。

参加者としタスクを操作できる人を設定します。参加者である潜在的所有者として、それぞれのユーザーを直接登録することもできますし、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で定義したワークフローに含まれる、ひとつのステップとして活用できるようになる予定です。

次の記事では、今回のサンプル・アプリケーションの作成手順を紹介します。