2024年2月13日火曜日

アクション・タスクで承認と却下ではない任意の分岐を実装する

Oracle APEX 23.2のAPEXワークフローではユーザーからの入力は、アクティビティタイプヒューマン・タスクの作成、つまり承認タスクまたはアクション・タスクといったタスクより行います。ユーザーにアサインされたタスクは、統合タスク・リストのページに一覧され、承認タスクであれば割り当たっているタスクの承認または却下アクション・タスクであれば、タスク完了させます。

今回の記事では、承認または却下ではない選択肢を、アクション・タスクを使って実装します。散歩途中の曲がり角で、に曲がるか、中心を進むか、に曲がるか、この3つの選択肢よりひとつの方向を選択します。

作成するアプリケーションは以下のように動作します。


最初に空のアプリケーションを作成します。名前歩く方向とします。


アプリケーションが作成されたら、共有コンポーネントタスク定義を開きます。


タスク定義の一覧より作成をクリックし、タスク定義の作成を開始します。

名前方向を決定するタイプアクション・タスクを選択します。件名歩く方向 - &CORNER.とします。静的IDDECIDE_DIRECTION潜在的所有者は以下のスクリーンショットではAPEXDEVとなっていますが、現在開発作業を行なっているユーザー名を指定します。

作成したアプリケーションにサインインして動作を確認する作業も、開発しているユーザーで実施します。

作成をクリックします。


アクション・タスクが作成されたら、パラメータを2つ追加します。

最初に件名に含まれるパラメータとして、CORNERを追加します。静的IDCORNERラベルCornerデータ型文字列必須Yes表示可能Yes更新可能Noを選択します。

次にアクション・タスクとして選択した選択肢を保存するパラメータとして、DIRECTIONを追加します。静的IDDIRECTIONラベルDirectionデータ型文字列必須No表示可能Yes(Noで良いかもしれません)、更新可能Yesを選択します


以上でタスク定義は完成です。


共有コンポーネントワークフローを開き、以下のワークフローを作成します。

識別名前散歩タイトル散歩 - &APP_USER.静的IDWALKINGとします。


ワークフロー・バージョン1.0とします。


ワークフロー・パラメータとしてCornerを作成します。

識別静的IDCORNERラベルCorner変数データ型VARCHAR2必須オンデフォルト値空白にします。


ワークフロー・バージョン変数としてDirectionTaskIDを作成します。

Direction静的IDDIRECTIONラベルDirection変数データ型VARCHAR2タイプNULLです。DirectionTaskIDともにアクティビティによって値が設定されます。


TaskID静的IDTASK_IDとします。それ以外はDirectionと同じ設定です。


最初のアクティビティ方向を決めるのタイプにヒューマン・タスク - 作成を選び、設定定義として先ほど作成したタスク定義方向を決定するを選択します。このアクティビティにより作成されたタスク(タスク定義方向を決定するを基に作成されたタスク)のタスクIDの保存先(タスクIDアイテム)として、ワークフロー・バージョン変数TASK_IDを設定します。


タスク・パラメータCornerに、ワークフロー・パラメータCORNERを設定します。


タスク・パラメータDirectionは入力は不要なので、タイプNULLを設定します。


続くアクティビティ方向の設定タイプコードの実行です。タスク・パラメータDirectionの値を、ワークフロー・バージョン変数DIRECTIONに代入します。

ソースPL/SQLコードに以下を記述します。



続く切替えのアクティビティ曲がるでは、切替えタイプCheck Workflow Variableを選択し、タスク・パラメータのDirectionから値を代入したワークフロー・バージョン変数のDIRECTIONを、比較変数の比較に選択します。


ワークフロー終了として中心を作成します。設定終了状態完了とします。


切替え曲がるとそれぞれの終了を接続します。

接続名前はそれぞれ、中心条件演算子次と等しいを選択し、LEFTCENTERRIGHTを設定します。アクティビティ宛先中心になります。


以上でワークフローは完成です。

ホーム・ページに対話モード・レポートを作成し、方向を決める処理を実装します。

識別タイトルMy Tasksタイプ対話モード・レポートです。

ソースタイプSQL問合せを選択し、SQL問合せとして以下を記述します。

select task_id, subject, 'L' as LEFT, 'C' as CENTER, 'R' as RIGHT from apex_approval.get_tasks()

RIGHTCENTERLEFT左に曲がる中心へ進む右へ曲がる処理を実装します。これらの処理は動的アクションで実装するため、対話モード・レポートの静的IDとしてMYTASKSを設定します。


LEFT列の書式HTML式に以下を記述し、列にボタンを表示します。CSSクラスactionLeftはボタンの見かけの修飾のためではなく、クリックのイベントを認識させるために使用します。

<button type="button" class="t-Button actionLeft" data-id=#TASK_ID#>左</button>


CENTERHTML式は以下です。

<button type="button" class="t-Button actionCenter" data-id=#TASK_ID#>中心</button>

RIGHTHTML式は以下です。

<button type="button" class="t-Button actionRight" data-id=#TASK_ID#>右</button>

カスタム属性のdata-idとして受け取ったタスクIDを、サーバー側の処理に渡すために使用するページ・アイテムP1_TASK_IDを作成します。

タイプ非表示、JavaScriptのコードより値を設定するため、設定保護された値オフにします。


動的アクションMove Leftを作成します。

実行イベント有効範囲動的を選択し、静的コンテナ(jQueryセレクタ)として対話モード・レポートの静的IDを指定します。idを指定するjQueryセレクタなので#を付加し、#MYTASKSになります。

タイミングクリック選択タイプjQueryセレクタを選択し、jQueryセレクタとしてクラスを指定するため先頭に. (ピリオド)を付加し、.actionLeftを設定します。

以上で列LEFTのボタンをクリックしたときに、この動的アクションMove Leftが呼び出されます。


最初に実行するTRUEアクションとして、値の設定を実行します。

設定タイプの設定としてJavaScript式を選択し、JavaScript式として以下を記述します。変更イベントの禁止オンにします。カスタム属性data-idの値を取り出しています。

this.triggeringElement.dataset.id

影響を受ける要素選択タイプアイテムアイテムとしてP1_TASK_IDを選択します。上記のdata-idの値がページ・アイテムP1_TASK_IDに設定されます。

実行初期化時に実行オフ結果を待機オンにします。


続くTRUEアクションサーバー側のコードを実行します。実行するコードは以下になります。タスク・パラメータのDIRECTIONに値としてLEFTを設定し、タスクを完了しています。

送信するアイテムとしてP1_TASK_IDを指定します。


最後のTRUEアクションとしてJavaScriptコードの実行を選択し、設定コードに以下を記述して、画面にメッセージを表示します。

apex.message.showPageSuccess("左に曲がりました。");


作成した動的アクションMove Leftをコピー(重複)し、動的アクションMove CenterMove Rightを作成します。コピーした動的アクションのLeft(LEFT)となっている部分をそれぞれCenter(CENTER)Right(RIGHT)に置き換えます。


ワークフローを開始する機能を加えます。

静的コンテンツのリージョンStart Workflowを作成します。外観テンプレートItem Containerを選択します。


曲がり角の名前(タスクの件名に含める文字列)を設定するページ・アイテムP1_CORNERを作成します。タイプテキスト・フィールドとします。

レイアウトリージョンにItem ContainerのStart Workflowを選択します。位置Itemになります。


ボタンSUBMITを作成します。レイアウトリージョンStart Workflow位置Button Endを選択します。

動作アクションはデフォルトのページの送信です。


ボタンSUBMITをクリックしたときに実行されるプロセスStart Workflowを作成します。

設定タイプ開始定義としてワークフロー散歩を選択します。

サーバー側の条件ボタン押下時SUBMITを指定します。


以上でアプリケーションは完成ですが、ワークフローの進捗を確認するためにワークフロー・コンソールのページを作成します。

ページの作成を実行し、ワークフロー・コンソールを選択します。


レポート・ページの名前Workflowsレポート・コンテキストとして自分で開始を選択します。フォーム・ページ名Workflow Detailsとします。

ページの作成をクリックします。


以上でアプリケーションは完成です。アプリケーションを実行すると、記事の最初のGIF動画のように動作します。

今回作成したAPEXアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/sample-workflow-walk-direction.zip

Oracle APEXのアプリケーション作成の参考になれば幸いです。