2022年7月7日木曜日

APEX 22.1の承認コンポーネント(2) - 基本的なアプリケーションの作成

前回の記事で紹介した、承認コンポーネントを使った休暇申請アプリケーションの作り方を記述します。承認コンポーネントが提供している機能に注目するため、承認コンポーネントとして提供されている機能だけでアプリケーションを作成します。

Always FreeのAutonomous Databaseで動作しているAPEX 22.1を使って作業を行なっています。

アプリケーション作成ウィザードを起動し、空のアプリケーションを作成します。アプリケーションの名前休暇申請とします。

アプリケーションの作成を実行します。

アプリケーションが作成されます。

承認コンポーネントのデモに使用するユーザーをワークスペースに登録したくないので、このアプリケーションにカスタム認証スキームを作成します。

サインインする際に与えられるユーザー名が、申請太郎申請花子承認太郎承認花子管理者のどれかであれば、アプリケーションへのサインインを許可します。

共有コンポーネント認証スキームを開きます。


作成済みの認証スキームが一覧されます。Oracle APEXアカウントがデフォルトで作成され、カレント(現在適用中)の認証スキームとなっています。

作成をクリックします。


スキームの作成として、ギャラリからの事前構成済スキームに基づくを選択します。

へ進みます。


ユーザー認証を行なうPL/SQLコードを登録します。

認証スキームの名前固定ユーザー認証とします。スキーム・タイプカスタムを選択します。設定認証ファンクション名uni_authとします。

ソースPL/SQLコードに、認証ファンクションであるuni_authを記述します。以下のコードがファンクションuni_authの内容です。デモに使用するユーザー名に一致すると認証は成功します。パスワードは考慮していません。
function uni_auth (
    p_username in varchar2,
    p_password in varchar2 )
    return boolean
is
begin
    if p_username in ('申請太郎', '申請花子', '承認太郎', '承認花子','管理者') then
        return true;
    end if;
    return false;
end;
以上を入力し、認証スキームの作成をクリックします。


認証スキーム固定ユーザー認証が作成され、カレント(現在適用中)になります。


続いて休暇申請をタスクとして定義します。共有コンポーネントを開きます。

ワークフローと自動化のセクションに含まれる、タスク定義を開きます。

作成済みのタスク定義が一覧されます。作成をクリックします。


タスク定義の作成を行なうダイアログが開きます。名前休暇申請件名として以下を入力します。件名は、誰がどのような休暇申請を行なったのか、人が読んで一意に認識できるような文字列にします。あまり長くしない方が良いでしょう。

&AC_REASON. &AC_START_DATE. - &AC_END_DATE. &APEX$TASK_INITIATOR.

静的IDとしてLEAVE_REQUESTを指定し、デフォルトの優先度2-高を選択します。潜在的所有者およびビジネス管理者は、タスクが作成された後に設定するため、このダイアログでは空白とします。

以上を入力し、作成をクリックします。


タスク定義が作成されます。この定義に含まれる期日間隔参加者パラメータを設定します。


期日間隔として30分後を指定します。

パイプライン表関数であるAPEX_APPROVAL.GET_TASKSが返す列DUE_ONDUE_IN_HOURSDUE_INDUE_CODEの値は期日間隔の指定により決まります。調べた範囲では、期限を過ぎたとしても発生するイベントはなく、アクションを呼び出すことはできないようです。


参加者の設定を行います。

参加者タイプ潜在的所有者値タイプ静的を選択し、承認太郎を入力します。行を増やす場合は、行の追加をクリックします。同様に潜在的所有者として、承認花子を追加します。参加者タイプビジネス管理者を選択し、値タイプ静的管理者を入力します。

以上の3行を入力します。


参加者値タイプとして静的以外に、SQL問合せファンクション本体を選択することができます。休暇を申請した人によって承認者を変えるといった要件がある場合は、これらの指定を使って実行時に潜在的所有者を決定します。

タスクに紐づける情報をパラメータとして設定します。

申請理由AC_REASON開始日としてAC_START_DATE終了日としてAC_END_DATEをパラメータとして定義します。それぞれ、ラベルまたは静的IDとして指定します。データ型として選択できるのは、現状は文字列のみです。必須および表示可能の値は、すべての列でYesとします。


以上を設定し、変更の適用をクリックします。


タスク定義休暇申請が作成されます。


ページ・デザイナホーム・ページを開きます。

作成したタスク定義休暇申請から、タスクを作成する機能を実装します。

Bodyリージョンを作成します。識別タイトル休暇申請タイプ静的コンテンツです。このリージョンにページ・アイテムやボタンを配置します。


申請理由を入力するページ・アイテムを作成します。識別名前P1_REASONタイプテキスト・フィールドを選択します。ラベル理由とします。


開始日を入力するページ・アイテムを作成します。識別名前P1_START_DATEタイプ日付ピッカーを選択します。ラベル開始日とします。


終了日を入力するページ・アイテムを作成します。識別名前P1_END_DATEタイプ日付ピッカーを選択します。ラベル終了日とします。


ページ・アイテムを送信し、タスクを作成するボタンを作成します。

識別ボタン名B_SUBMITラベル送信とします。動作アクションページの送信です。


プロセス・ビューを開き、プロセスを作成します。

識別名前休暇申請タイプとしてヒューマン・タスク - 作成を選択します。設定定義に、共有コンポーネントのタスク定義として作成済みの休暇申請を選択します。成功メッセージとして、「休暇申請を受け付けました。」と記述し、サーバー側の条件ボタン押下時B_SUBMITを指定します。

今回作成するアプリケーションは承認コンポーネントだけを使うため、これ以外の属性は設定しません。実際には、ディテール主キー・アイテムは、ユーザー・データとタスクを紐づけるために必須の設定になります。


タスク定義休暇申請で設定したパラメータと、ページ・アイテムを紐づけます。

パラメータ開始日を選択し、タイプとしてアイテムアイテムとしてP1_START_DATEを選択します。


同様にパラメータ終了日をページ・アイテムP1_END_DATEに紐づけます。


最後にパラメータ申請理由をページ・アイテムP1_RESONに紐づけます。


以上で、ホーム・ページから休暇を申請できる(休暇申請のタスクを作成できる)ようになりました。

アプリケーションを実行して、休暇を申請してみます。

アプリケーションを実行します。

サインインの画面です。ユーザー名申請花子と入力し、サインインをクリックします。


ホーム・ページに休暇申請を実装しているため、サインイン後に休暇申請画面が開きます。

理由、開始日、終了日に適当な値を入力し、送信をクリックします。

休暇申請を受け付けました。と画面に表示されます。


今のところ、作成された休暇申請(タスク定義休暇申請を元に作成されたタスク)の情報を参照したり操作したりする画面がありません。そのため、これ以上、このアプリケーションを使ってできることがありません。

これより、承認コンポーネントとともに提供されている統合タスク・リストのページとタスク詳細のページを、ウィザードを使って作成します。

ページの作成をクリックし、ページ作成ウィザードを呼び出します。


コンポーネントから統合タスク・リストを選択します。


統合タスク・リストの作成のダイアログにて、名前自分で開始とし、レポート・コンテキストとして自分で開始を選択します。ナビゲーションブレッドカラムおよびナビゲーションは双方デフォルトのONのまま変更しません。

以上の設定で、ページの作成を実行します。


同じ手順を繰り返します。名前私のタスクレポート・コンテキストマイ・タスクの統合タスク・リストのページを作成します。


名前管理レポート・コンテキスト管理タスクの統合タスク・リストのページも作成します。


以上でアプリケーションを実行します。

申請花子でサインインし、作成済みの休暇申請を確認します。

自分で申請のページを開きます。タスク詳細のページが未作成であるため、件名からタスク詳細を参照することができません。


共有コンポーネントのタスク定義休暇申請を開き、タスクの詳細ページの作成をクリックします。確認のダイアログが開くので、OKをクリックします。


タスク詳細のページが生成され、タスク定義の一覧画面へ戻ります。再度、休暇申請のタスクを開くと、タスクの詳細ページのURLに値が設定されていることが確認できます。


タスク詳細のページが作成されたので、統合タスク・リストに表示されている休暇申請(タスク)より、タスクの詳細画面を表示できるようになります。


以上で承認コンポーネントだけを使ったアプリケーションの作成は完了です。

このアプリケーションにより、タスクの作成(つまり休暇申請の作成)、要求、承認、却下、委任、優先度の変更、コメントの追加、取消、リリースといった、タスクに対して行える操作はすべて実行できます。

次の記事では、ここで実装されたタスクと、ユーザー・アプリケーションの連携を実装してみます。