前回の記事で紹介した、承認コンポーネントを使った休暇申請アプリケーションの作り方を記述します。承認コンポーネントが提供している機能に注目するため、承認コンポーネントとして提供されている機能だけでアプリケーションを作成します。
Always FreeのAutonomous Databaseで動作しているAPEX 22.1を使って作業を行なっています。
アプリケーション作成ウィザードを起動し、空のアプリケーションを作成します。アプリケーションの名前は休暇申請とします。
アプリケーションの作成を実行します。
アプリケーションが作成されます。
承認コンポーネントのデモに使用するユーザーをワークスペースに登録したくないので、このアプリケーションにカスタムの認証スキームを作成します。
サインインする際に与えられるユーザー名が、申請太郎、申請花子、承認太郎、承認花子、管理者のどれかであれば、アプリケーションへのサインインを許可します。
共有コンポーネントの認証スキームを開きます。
作成をクリックします。
スキームの作成として、ギャラリからの事前構成済スキームに基づくを選択します。
次へ進みます。
ユーザー認証を行なう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_ON、DUE_IN_HOURS、DUE_IN、DUE_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に値が設定されていることが確認できます。
タスク詳細のページが作成されたので、統合タスク・リストに表示されている休暇申請(タスク)より、タスクの詳細画面を表示できるようになります。
以上で承認コンポーネントだけを使ったアプリケーションの作成は完了です。
このアプリケーションにより、タスクの作成(つまり休暇申請の作成)、要求、承認、却下、委任、優先度の変更、コメントの追加、取消、リリースといった、タスクに対して行える操作はすべて実行できます。
次の記事では、ここで実装されたタスクと、ユーザー・アプリケーションの連携を実装してみます。