Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Oracle APEXでワークフローを実装してみよう!

Oracle APEXでワークフローを実装してみよう!

・APEX WorkflowはAPEX 23.2の新機能です。実施にはAPEX 23.2が必要です。

・本ハンズオンは、オラクルの公式ブログに掲載されている記事Simplify Business Process management Using APEX Workflowにて作成されているDoctor Appointments Made Easy!アプリケーションの作成をハンズオンとして構成しています。
https://blogs.oracle.com/apex/post/simplify-medical-appointments-using-apex-workflow

・ワークフローのライフサイクルの説明はオラクルの公式ブログのAPEX Workflow Development Lifecycle and Management を元に構成しています。
https://blogs.oracle.com/apex/post/apex-workflow-development-lifecycle

・一部の設定や手順を変更しています。同じ手順ではありません。

oracle4engineer

November 26, 2023
Tweet

More Decks by oracle4engineer

Other Decks in Programming

Transcript

  1. はじめに • 本ハンズオンは、オラクルの公式ブログに掲載されている記事Simplify Business Process management Using APEX Workflowにて作成されているDoctor Appointments

    Made Easy!アプリケーションの作成をハンズオンとして 構成しています。 • ワークフローのライフサイクルの説明はオラクルの公式ブログのAPEX Workflow Development Lifecycle and Management を元に構成しています。 • ⼀部の設定や⼿順を変更しています。同じ⼿順ではありません。 • APEX WorkflowはAPEX 23.2の新機能です。実施にはAPEX 23.2が必要です。 Simplify Business Process Management Using APEX Workflow https://blogs.oracle.com/apex/post/simplify-medical-appointments-using-apex-workflow APEX Workflow Development Lifecycle and Management https://blogs.oracle.com/apex/post/apex-workflow-development-lifecycle SQLなどのコピペ⽤スニペット https://apex.oracle.com/pls/apex/r/japancommunity/simcontents/download?id=doctor-appointments-made-easy-snippet.txt 2 Copyright © 2023, Oracle and/or its affiliates
  2. アジェンダ 1. Oracle APEXの始め⽅ 2. Lab 3から始める⼿順 3. 本ハンズオンで作成するワークフローについて Lab

    1:APEXアプリケーションの新規作成 Lab 2:データベースの準備 Lab 3:診察予約ワークフローの作成 Lab 4:タスク定義の作成 Lab 5:診察予約ワークフローを完成させます Lab 6:アプリケーションを完成させます Lab 7:アプリケーションの動作確認 Lab 8: ワークフローのライフサイクル管理 Copyright © 2023, Oracle and/or its affiliates 3
  3. 無料で始める⽅法は3通り 1. https://apex.oracle.com/go/request-workspaceから無料のワークスペースを取得します。 2. https://signup.cloud.oracle.com/よりOracle Cloudのアカウントを取得し、Always Freeの Autonomous Databaseのインスタンスを作成します。 3.

    Oracle Database Express Editionのインスタンスを作成し、Oracle APEXをインストールします。 https://apex.oracle.comにアクセスし、今⽇から無料で開始をクリックします。
  4. 無料のワークスペースの取得 • 以下を⼊⼒し、Request Workspaceをクリックします。 • 名(First name)、姓(Last name) • メールアドレス(Email)

    • 国(Your Location) • APEX使⽤経験の有無(Are you new to Oracle APEX?) • 授業や研修での使⽤かどうか(Do you plan to use APEX for education or training?) • 利⽤規約の承諾(I agree to the terms of the Oracle APEX Service Agreements) • 指定したメールアドレスにメールが届くので、Create Workspaceをクリックします。 • 検証⽤途に限定されています。 • 容量は50MBです。 • 不具合と思われる事象の再現ケースをOracle Supportと共 有するためにも使⽤できます。 • 利⽤できる機能の制限はほぼありません。 Copyright © 2023, Oracle and/or its affiliates 6
  5. Oracle CloudのAlways Free Autonomous Database • Oracle Cloud Free Tierのアカウントにサインアップします。

    • 通常、本⼈確認のためにクレジットカード番号の⼊⼒を求められます。 • アカウントをアップグレードするまでは、クレジットカードに課⾦されること はありません。 • Always FreeのAutonomous Databaseは2インスタンスまで作 成できます。 • 1 OCPU(オーバーサブスクリプションあり) • 容量は20GBまで。 • 機能制限はありません。 • ⽂字や数値データのみ、少⼈数での利⽤であれば、実⽤に耐える環 境です。 参考: The story behind a COVID-19 exposure- tracking application in Finland https://blogs.oracle.com/database/post/covid-19-tracking-app-finland On the busiest day recorded, the application had 600,000 distinct users, and the peak period had 300,000 users in a two-hour period, which the application was able to handle quickly. Copyright © 2023, Oracle and/or its affiliates 7
  6. Oracle Database 23c Free + Oracle APEX • Oracle Database

    23c Freeがインストールできる環境で あれば、どこでも実装可能です。 • AWS、Google Cloud、MS Azure、VirtualBox、⼿ 元のLinuxやWindows(21c XE)マシンなど。 • Oracle Database 23c Freeの制限 • CPUスレッド: 2 • ユーザー・データ: 12 GB • 利⽤可能なメモリ: 2 GB • 利⽤可能な機能に制限はありません。 • サポート契約がないため、パッチは適⽤できません。 • インストール、構成、管理を⾃分で⾏う必要があります。 • ライセンスについては、Oracle Free Use Terms and Conditionsを参照してください。 REST Data Services、APEX、 Databaseが構成済みの VirtualBox仮想アプライアンスも提供されています。 https://www.oracle.com/database/technologies/databaseappdev-vm.html Copyright © 2023, Oracle and/or its affiliates 8
  7. 診察予約ワークフローを開始します 14 Copyright © 2023, Oracle and/or its affiliates •

    ワークフローは、ページ番号5の新規診察予約のペー ジのプロセス診察予約ワークフローの開始で開始しま す。 • ワークフロー・パラメータの値は、ページ・アイテムに⼊⼒ します。予約時に⼊⼒した症状より、担当医師を選 択します。選択した担当医師はディテール主キー・アイ テムとしてワークフローに渡されます。 ユーザーがAPEXアプリケーションの画⾯操作を⾏います。
  8. 医師の予定を確認する 15 Copyright © 2023, Oracle and/or its affiliates •

    EBA_DEMO_WF_DOC_APT.CHECK_AVAILA BILTYを、担当医師のIDと希望の予約⽇時を引数 にして呼び出だします。 • ファンクション呼び出しの結果をバージョン変数 AVAILABILITYに設定します。
  9. 医師の予定は空いているか︖ 16 Copyright © 2023, Oracle and/or its affiliates •

    バージョン変数AVAILABILITYの値(つまり EBA_DEMO_WF_DOC_APT.CHECK_AVAILA BILTYの戻り値)がBUSYであればTrue、そうでなけ ればFalseへ分岐します。 • 予約のキャンセルを通知するへの分岐はいいえ(分岐 する条件はTrue – AVAILABILITYがBUSYなので 予約が取れない)、予約を承認するへの分岐ははい です。
  10. 診察は無料か︖ • 直近の7⽇間の間に、同じ患者を診察していないかど うか確認します。診察履歴があればアクティビティ変数 FREEに1を設定します。 • アクティビティ変数FREEが1のときに条件をTrueとしま す。 • Falseの場合は費⽤を決定するに遷移します。

    • Trueの場合は請求について通知するに遷移します。 • Lab 8にて、費⽤を決定するから費⽤を請求するへの 接続を、費⽤を決定するから請求について通知するへ 接続し直します。 22 Copyright © 2023, Oracle and/or its affiliates Lab 8で接続を変更
  11. クイックSQLのモデルを記述します patient_feedback id num /pk patient_name vc40 doctor_no num /fk

    doctor appointment tstz feedback vc4000 rating num /nn created_at tstz updated_at tstz doctor dno num /pk dname vc20 specialization vc20 qualification vc15 doc_email vc100 appointment booking_id num /pk patient_username vc40 /nn doctor_no num /nn /fk doctor schedule tstz /nn patient_email vc40 /nn doctor_email vc40 /nn status vc10 fee num workflow_id num
  12. 47 Copyright © 2023, Oracle and/or its affiliates INSERT⽂を実⾏します 1.

    実⾏するSQLスクリプトを貼り付けます。 2. 実⾏をクリックします。 SQLコマンドはSQLスクリプトと異なり、⼀度に実⾏できるSQL コマンドは1つだけです。 そのため、複数のINSERT⽂をbeginとendで囲んでいます。 表DOCTORには6⾏挿⼊されますが、SQLコマンドの結果は 1⾏が挿⼊されました。となります。 begin insert into doctor values(10, 'ROBERT', 'ONCOLOGY','MS','[email protected]'); insert into doctor values(20, 'BO', 'CARDIOLOGY', 'FRCS','[email protected]'); insert into doctor values(30, 'JANE', 'ENT','MBBS','[email protected]'); insert into doctor values(40, 'ANACHATT', 'PSYCHIATRY','MS','[email protected]'); insert into doctor values(50, 'PAT', 'GENERAL','MBBS','[email protected]'); insert into doctor values(60, 'MARTIN', 'GASTRO','MS','[email protected]'); end; 2 1
  13. ワークフローに名前を設定します 作成されたワークフローに名前を設定します。 1. 左ペインのワークフロー・ノードの直下にある新規のノードを 選択します。 2. 右ペインのプロパティ・エディタの識別の名前に診察予約と ⼊⼒します。 3. 詳細の静的IDはDOC_APPTとします。

    識別のタイトルは後で設定します。 新規はワークフロー、その下の新規[開発]は、 そのワークフローの特定のバージョンです。 ここでは、ワークフローに名前を設定しています。 1 2 3 Copyright © 2023, Oracle and/or its affiliates 56
  14. ワークフロー・パラメータ予約⽇時を作成します ワークフロー・パラメータを作成します。 1. 新規に作成されたパラメータを選択します。 2. 識別の静的IDはREQUEST_DATEとします。 3. ラベルは予約⽇時とします。 4. 変数のデータ型はTIMESTAMP

    WITH TIME ZONEとします。 5. アプリケーションの書式マスクのセッション・ステート書式 マスクはYYYY-MM-DD HH24:MI:SSとします。 6. 値の必須はオンです。 7. 値のデフォルト値は空⽩にします。 1 2 3 4 5 6 7 Copyright © 2023, Oracle and/or its affiliates 66
  15. 表DOCTORを追加データとして設定します ワークフロー・パラメータに追加して、ワークフローの実⾏中に 参照可能なデータを登録します。 1. ワークフロー・バージョン1.0[開発]を選択します。 2. 追加データのタイプは表/ビューとします。 3. 表名にDOCTORを選択します。 4.

    列のマッピングの主キー列にDNO選択します。 この設定により表DOCTORの列の値を、バインド変数または置換 ⽂字列として、ワークフローに含まれる全てのアクティビティから参照 できるようになります。 ワークフローを開始(インスタンスの作成)する際に、列DNOの値 を指定します。 1 2 3 4 Copyright © 2023, Oracle and/or its affiliates 68
  16. ワークフロー変数アベイラビリティを作成します ワークフロー変数を作成します 1. 新規に作成された変数を選択します。 2. 識別の静的IDはAVAILABILITYとします。 3. ラベルはアベイラビリティとします。 4. 変数のデータ型はBOOLEANとします。

    5. 値のタイプはNULLとします。 6. アプリケーションの書式マスクのTrue値は AVAILABLEとします。 7. False値はBUSYとします。 1 2 3 4 5 6 7 Copyright © 2023, Oracle and/or its affiliates 71
  17. タスク定義を作成します 1. 共有コンポーネントのタスク定義を開きます。 以下の3つのタスク定義を作成します。 1. 診察予約の承認(医師による診察予約の承認また は却下) 2. 診察費⽤の請求(患者による診察費⽤の⽀払 い)

    3. フィードバックの依頼(患者へ診察に対するフィード バックを依頼) 診察予約の承認は承認タスク、診察費⽤の請求、 フィードバックの依頼は、承認または却下の処理を 必要としないアクション・タスクとして作成します。 1 Copyright © 2023, Oracle and/or its affiliates 75
  18. タスク定義診察予約の承認を作成します 1. 名前は診察予約の承認とします。 2. タイプは承認タスクです。 3. 件名として「診察予約/患者⽒名 &PATIENT_NAME./予約⽇時 &APPOINTMENT_DATE.」を⼊⼒します。 4.

    静的IDはAPPOINTMENT_REQUESTとします。 (静的IDに⽇本語の使⽤は避けます) 5. 作成をクリックします。 優先度はデフォルトの3-中、 潜在的所有者とビジネス管理者は、 タスク定義を作成後に設定します。 1 2 3 4 5 Copyright © 2023, Oracle and/or its affiliates 77
  19. パラメータ患者⽒名を設定します タスクのパラメータとして患者⽒名を設定します。 1. ⾏の追加をクリックします。 2. 静的IDはPATIENT_NAMEです。 3. ラベルは患者⽒名です。 4. データ型は⽂字列です。

    5. 変更の適⽤をクリックします。 このタスクが割り当てられた医師は、予約⽇時、症状、 患者⽒名より診療予約の承認または却下を判断します。 1 2 3 4 5 Copyright © 2023, Oracle and/or its affiliates 84
  20. アクティビティを作成します – パレットから作成 ワークフローにアクティビティを作成する⽅法は、 いくつかあります。 1. パレットより作成したいアクティビティを掴みます。 2. ダイアグラム・ビルダー上の配置したい位置までドラッグ します。

    3. ドロップします。 4. アクティビティが作成されます。接続上でドロップ(接 続が⻩⾊くハイライトしている状態)すると、接続の 中間に挿⼊されます。 1 2 3 4 Copyright © 2023, Oracle and/or its affiliates 104 アクティビティを接続上にドロップした直後は、 作成されたアクティビティではなく、接続が選択されています。 アクティビティのプロパティの設定をする際は、アクティビティを 選択し直します。
  21. アクティビティを作成します – 接続から作成 1. 接続を選択すると表⽰される、プラス(+)アイコンをクリック します。 2. 表⽰されたコンテキスト・メニューより、作成するアクティビティ を選択します。 3.

    選択した接続の中間に挿⼊される形で、アクティビティが作 成されます。 ワークフロー開始と終了は、この⽅法では作成できません。 2 3 1 Copyright © 2023, Oracle and/or its affiliates 105
  22. アクティビティを作成します – 左ペインのワークフロー・ビューより作成 1. 左ペインのワークフロー・ビューのワークフロー・バージョン上 (またはその下のアクティビティ上)でコンテキスト・メ ニューを表⽰させます。 2. アクティビィの作成を実⾏します。 3.

    アクティビティが作成されます。 アクティビティのタイプの設定や、接続の設定をアクティビティの 作成後に⾏なう必要があります。 どの⽅法でもアクティビティを作成できますが、パレットまたは 接続から作成するのが、⼿順として容易でしょう。 2 1 3 Copyright © 2023, Oracle and/or its affiliates 106
  23. アクティビティ医師の予定を確認するを作成します 1. パレットからAPI呼出しを掴み、開始と終了の間に ドロップします。 2. 作成されたアクティビティを選択します。 3. 識別の名前は医師の予定を確認するとします。 4. 設定のタイプはPL/SQLパッケージ、パッケージは

    EBA_DEMO_WF_DOC_APT、プロシージャ またはファンクションとしてファンクション CHECK_AVAILABILITYを指定します。 5. 詳細の静的IDは、 CHECK_DOCTOR_AVAILABILITYとします。 2 3 4 5 1 Copyright © 2023, Oracle and/or its affiliates 107
  24. パラメータファンクションの結果を設定します 1. アクティビティ医師の予定を確認するのパラメータファンク ションの結果を選択します。 2. 値のアイテムのLOVアイコンをクリックします。 3. ダイアログアイテムの選択が開きます。バージョン変数を選 択します。 4.

    名前AVALIABLITYを選択します。 5. アイテムとしてAVAILABILITYが設定されます。 アクティビティの実体であるファンクション EBA_DEMO_WF_DOC_APT.CHECK_AVAILABITY の戻り値がバージョン変数AVAILABILITYに設定され、後 続のアクティビティより参照できます。 1 2 3 4 5 Copyright © 2023, Oracle and/or its affiliates 108
  25. パラメータp_request_dateを設定します 1. パラメータp_request_dateを選択します。 2. 値のタイプはアイテム、アイテムのLOVアイコンをクリック します。 3. ダイアログアイテムの選択が開きます。ワークフロー・パ ラメータを選択します。 4.

    名前REQUEST_DATEを選択します。 5. 書式マスクとしてYYYY-MM-DD HH24:MI:SSを 設定します。 1 2 3 4 5 Copyright © 2023, Oracle and/or its affiliates 110 ファンクション EBA_DEMO_WF_DOC_APT.CHECK_AVAILABITY の引数p_request_dateに、予約⽇時を渡しています。
  26. アクティビティ医師の予定は空いているか︖を作成します 1. パレットから切替えを掴み、アクティビティ医師の予定 を確認すると終了の間にドロップします。 2. 作成されたアクティビティを選択します。 3. 識別の名前は医師の予定は空いているか︖とします。 4. 切替えのタイプはTrue

    False Checkです。 5. 条件の条件タイプはワークフロー変数 = 値、ワークフ ロー変数としてバージョン変数のAVAILABILITYを 選択します。値はBUSYです。 6. 詳細の静的IDはIS_DOCUTOR_AVAILABLEと します。 2 2 3 4 5 1 Copyright © 2023, Oracle and/or its affiliates 113
  27. アクティビティ予約できないことを通知するを作成します 1. パレットから電⼦メールの送信を掴み、アクティビティ医師の 予定は空いているか︖と終了の間にドロップします。 2. 作成したアクティビティを選択します。 3. 識別の名前は予約のキャンセルを通知するとします。 4. 設定の変換元(Fromのことです)は&APP_EMAIL.、

    宛先は&PATIENT_EMAIL.とします。 5. 次ページの内容を件名とボディ・プレーン・テキストに記述 します。 6. 開発中は早くメールの着信を確認したいので、即時に送 信はオンにします。 7. 詳細の静的IDはNO_APPOINTMENT_MAILとします。 1 2 3 4 5 6 7 Copyright © 2023, Oracle and/or its affiliates 115
  28. 接続の条件を設定します 1. タイプが切替えのアクティビティ医師の予定は空いている か︖と予約のキャンセルを通知するの間の接続を選択しま す。 2. 識別の名前はいいえとします。 3. 条件のタイミングはTrueです。 4.

    保存をクリックします。 タイプが切替えのアクティビティ医師の予定は空いているか︖で、 ワークフロー変数AVAILABILITYがBUSYの条件でTrueに なります。 1 2 3 4 Copyright © 2023, Oracle and/or its affiliates 117
  29. アクティビティを接続します アクティビティ医師の予定は空いているか︖と予約を承認す るを接続します。 1. アクティビティ医師の予定は空いているか︖の下部に表 ⽰されるプラス(+)アイコンをクリックし、コンテキスト・メ ニューを表⽰します。 2. 接続の作成を実⾏します。 3.

    作成された接続の⽮印を掴み、アクティビティ予約を承 認するの上にドラッグし、アクティビティの枠が橙⾊に変 わったら、⽮印をドロップします。 1 2 3 Copyright © 2023, Oracle and/or its affiliates 119
  30. アクティビティ変数無料を設定します 1. 識別の静的IDはFREEとします。 2. ラベルは無料とします。 3. データ型はNUMBERです。 4. 値のタイプにファンクション本体を選択します。 5.

    PL/SQLファンクション本体として、次ページのコードを 記述します。過去7⽇以内に⽀払い済みの診察を 実施していれば、今回の診察は無料としています。 1 2 3 4 5 Copyright © 2023, Oracle and/or its affiliates 144
  31. 診察が無料かどうかを決めるPL/SQLコード 過去7⽇以内に⽀払い済みの診察を実施していれば、 今回の診察はラップアップなので無料とします。 declare l_free number := 1; begin select

    1 into l_free from dual where exists ( select patient_username from appointment where patient_username = :PATIENT_NAME and doctor_no = :DNO and schedule >= to_timestamp_tz(:REQUEST_DATE,'YYYY-MM-DD HH24:MI:SS') - 7 and status = 'PAID' ); return 1; exception when others then return 0; end;
  32. アクティビティ診察は無料か︖の条件を設定します 1. アクティビティ診察は無料か︖を選択します。 2. 切替えのタイプはTrue False Checkです。 3. 条件の条件タイプはワークフロー変数 =

    値とします。 4. ワークフロー変数のLOVアイコンをクリックします。 5. ワークフロー変数のダイアログより、アクティビティ変数を 選択します。 6. アクティビティ変数のFREEを選択します。 7. 値に1を指定します。 1 2 3 4 7 5 6 Copyright © 2023, Oracle and/or its affiliates 146
  33. アクティビティ請求について通知するを作成します 1. パレットから電⼦メールの送信を掴み、アクティビティ診察 は無料か︖の右にドロップします。 2. 識別の名前は請求について通知するとします。 3. 設定の変換元(Fromのことです)は&APP_EMAIL.、 宛先は&PATIENT_EMAIL.とします。 4.

    次ページの内容を件名とボディ・プレーン・テキストに記述 します。 5. 開発中で早くメールの着信を確認したいので、即時に送 信はオンにします。 6. 詳細の静的IDはSEND_INVOICE_MAILとします。 2 1 3 4 6 5 Copyright © 2023, Oracle and/or its affiliates 153
  34. 請求について通知するメールの件名と本⽂ 件名 請求についてのお知らせです ボディ・プレーン・テキスト &PATIENT_NAME.様、 医師 &DNAME. による診察が &REQUEST_DATE. に予約されました。診察費⽤について、ご確認をお願いい

    たします。 前回の診察から7⽇以内であればフォローアップの診察 になるため、費⽤は発⽣しません。 敬具 Copyright © 2023, Oracle and/or its affiliates 154
  35. アクティビティ費⽤を請求するを作成します 1. パレットからヒューマン・タスク – 作成を掴み、アクティ ビティ請求について通知するの下、費⽤を決定するの 右にドロップします。 2. 作成したアクティビティを選択します。 3.

    識別の名前は費⽤を請求するとします。 4. 設定の定義として診察費⽤の請求を選択します。 5. ディテール主キー・アイテムとしてバージョン変数の BOOKING_IDを指定します。 6. 最終期限の期⽇タイプは間隔、間隔としてPT30Mを 指定します。 7. 詳細の静的IDはRAISE_INVOICE_REQUESTと します。 2 3 1 4 5 7 6 Copyright © 2023, Oracle and/or its affiliates 159
  36. アクティビティフィードバックを依頼するを作成します 1. パレットからヒューマン・タスク – 作成を掴み、診察が 終わるまで待つと診察の完了の間にドロップします。 2. 作成されたアクティビティを選択します。 3. 識別の名前はフィードバックを依頼するとします。

    4. 設定の定義はフィードバックの依頼です。 5. ディテール主キー・アイテムはバージョン変数の BOOKING_IDです。 6. 最終期限の期⽇タイプは間隔、間隔としてPT24Hを 設定します。 7. 詳細の静的IDはFEEDBACK_REQUESTとします。 2 1 3 4 5 6 7 Copyright © 2023, Oracle and/or its affiliates 172
  37. アクティビティ感謝を通知するを作成します 1. パレットから電⼦メールの送信を掴み、アクティビティ フィードバックを依頼すると終了の間にドロップします。 2. 識別の名前は感謝を通知するとします。 3. 設定の変換元(Fromのことです)は &APP_EMAIL.、宛先は&PATIENT_EMAIL.とし ます。

    4. 次ページの内容を件名とボディ・プレーン・テキストに 記述します。 5. 開発中で早くメールの着信を確認したいので、即時に 送信はオンにします。 6. 詳細の静的IDはSEND_THANK_YOUとします。 2 3 1 4 5 7 6 Copyright © 2023, Oracle and/or its affiliates 176
  38. 作成するフォームの情報を⼊⼒します リージョン、ページ・アイテムおよびボタンを⾃動⽣成させるために フォームのページを作成しています。 1. ページ番号は5とします。 2. 名前は新規診察予約とします。ページ・モードは標準です。 3. データ・ソースはローカル・データベース、ソース・タイプとして SQL問合せを選択します。

    4. SQL SELECT⽂を⼊⼒に、次ページのSQLを記述します。 SELECT⽂の列に対応したページ・アイテムが⽣成されます。 5. ナビゲーションはデフォルトから変更しません。 6. 次へ進みます。 1 2 3 4 6 5 Copyright © 2023, Oracle and/or its affiliates 182
  39. ページ・アイテムを作成するためのSELECT⽂ select 1 as id ,'1234567890123456789012345678901234567890' as patient_name ,'1234567890123456789012345678901234567890' as

    patient_email ,'12345678901234567890' as problem ,systimestamp as request_date ,10 as doctor_id ,40 as patient_age from dual
  40. ページ・アイテムP5_PATIENT_NAMEを設定します 1. ページ・アイテムP5_PATIENT_NAMEを選択します。 2. ラベルを患者⽒名に変更します。 3. 検証の必須の値をオンにします。 4. ソースのフォーム・リージョンを- 選択

    -に戻し、未選択 にします。 5. セッション・ステートのストレージは、リクエストごと(メモ リーのみ)にします。 1 2 3 4 5 Copyright © 2023, Oracle and/or its affiliates 186
  41. ページ・アイテムP5_PATIENT_EMAILを設定します 1. ページ・アイテムP5_PATIENT_EMAILを選択します。 2. ラベルを患者メールアドレスに変更します。 3. 設定のサブタイプを電⼦メール、空⽩の切捨てを先頭お よび末尾、テキストの⼤/⼩⽂字を⼩⽂字とします。 4. 検証の必須の値をオンにします。

    5. ソースのフォーム・リージョンを- 選択 -に戻し、未選択に します。 6. セッション・ステートのストレージは、リクエストごと(メモリー のみ)にします。 1 2 4 5 6 3 Copyright © 2023, Oracle and/or its affiliates 187
  42. ページ・アイテムP5_PROBLEMを設定します 1. ページ・アイテムP5_PROBLEMを選択します。 2. タイプを選択リストに変更します。 3. ラベルを症状に変更します。 4. 検証の必須の値をオンにします。 5.

    LOVのタイプを静的値、静的値として次ページのリス トをリストを設定します。追加値の表⽰はオフ、NULL 値の表⽰はオン、NULL表⽰値は- 症状を選択 -と します。 6. ソースのフォーム・リージョンを- 選択 -に戻し、未選択 にします。 7. セッション・ステートのストレージは、リクエストごと(メモ リーのみ)にします。 1 4 5 6 2 3 7 Copyright © 2023, Oracle and/or its affiliates 188
  43. LOVの設定 表示値 戻り値 心療内科 PSYCHIATRY 腫瘍内科 ONCOLOGY 耳鼻咽喉科 ENT 消化器内科

    GASTRO 心臓内科 CARDIOLOGY 総合科 GENERAL Copyright © 2023, Oracle and/or its affiliates 189
  44. ページ・アイテムP5_REQUEST_DATEを設定します 1. ページ・アイテムP5_REQUEST_DATEを選択します。 2. ラベルを予約⽇時に変更します。 3. 設定の時間の表⽰はオンとします。 4. 外観の書式マスクはYYYY-MM-DD HH24:MI:SSと

    します。 5. 検証の必須の値をオン、最⼤⻑を22⽂字に変更します。 6. ソースのフォーム・リージョンを- 選択 -に戻し、未選択に します。 7. セッション・ステートのストレージは、リクエストごと(メモリー のみ)にします。 1 2 3 4 5 6 7 Copyright © 2023, Oracle and/or its affiliates 190
  45. ページ・アイテムP5_DOCTOR_IDを設定します 1. ページ・アイテムP5_DOCTOR_IDを選択します。 2. タイプをポップアップLOVに変更します。 3. ラベルを医師に変更します。 4. 検証の必須の値をオンにします。 5.

    LOVのタイプはSQL問合せ、SQL問合せとして以下のSQLを 記述します。追加値の表⽰はオフ、NULL値の表⽰はオン、 NULL表⽰値は- 医師を選択 -とします。 6. カスケードLOVの親アイテムとしてP5_PROBLEM、親が必要 はオンとします。 7. ソースのフォーム・リージョンを- 選択 -に戻し、未選択にします。 8. セッション・ステートのストレージは、リクエストごと(メモリーのみ) にします。 1 2 4 5 6 3 7 8 select dname d, dno r from doctor where specialization = :P5_PROBLEM Copyright © 2023, Oracle and/or its affiliates 191
  46. ページ・アイテムP5_PATIENT_AGEを設定します 1. ページ・アイテムP5_PATIENT_AGEを選択します。 2. ラベルを患者年齢に変更します。 3. 検証の必須の値をオンにします。 4. ソースのフォーム・リージョンを- 選択

    -に戻し、未選択 にします。 5. セッション・ステートのストレージは、リクエストごと(メモ リーのみ)にします。 1 2 3 4 5 Copyright © 2023, Oracle and/or its affiliates 192
  47. 患者向けの統合タスク・リストのページを作成します 患者向けの統合タスク・リストのページを作成します。 1. ページ番号は6とします。 2. 名前は患者のタスクとします。 3. レポート・コンテキストとしてマイ・タスクを選択します。 4. ページの作成をクリックします。

    ナビゲーションはデフォルトのまま変更しません。 患者には、請求された診察費⽤の確認とフィードバックの 依頼がアサインされます。 1 2 3 4 Copyright © 2023, Oracle and/or its affiliates 203
  48. 医師向けの統合タスク・リストのページを作成します 同様の⼿順より、医師向けの統合タスク・リストのページを 作成します。 1. ページ番号は7とします。 2. 名前は医師のタスクとします。 3. レポート・コンテキストとしてマイ・タスクを選択します。 4.

    ページの作成をクリックします。 ナビゲーションはデフォルトのまま変更しません。 医師には、診察予約の承認がアサインされます。 1 2 3 4 Copyright © 2023, Oracle and/or its affiliates 204
  49. タスクの詳細ページを更新します – タスク定義診察予約の承認 タスク定義診察予約の承認のタスクの詳細ページは、 ページ番号2で作成されています。 1. ページ番号2を開きます。 2. ページを選択します(この時点ではページ名は タスクの詳細です)。

    3. 識別の名前は診察予約の詳細、別名は appointment-request-details、タイトルは 診察予約の詳細に変更します。 4. 変更を保存します。 2 3 1 4 Copyright © 2023, Oracle and/or its affiliates 205
  50. タスクの詳細ページを更新します – タスク定義診察費⽤の請求 タスク定義診察費⽤の請求のタスクの詳細ページは、 ページ番号3で作成されています。 ページ番号3を開きます。 1. ページを選択します(この時点ではページ名はタスク の詳細です)。 2.

    識別の名前は診察費⽤の詳細、別名はinvoice- details、タイトルは診察費⽤の詳細に変更します。 3. アクション・タスクの詳細ページにはリージョン開発者情 報が含まれます。この上でコンテキスト・メニューを表⽰ します。 4. 不要なので削除します。 1 2 3 4 Copyright © 2023, Oracle and/or its affiliates 206
  51. タスクの詳細ページを更新します – タスク定義フィードバックの依頼 タスク定義フィードバックの依頼のタスクの詳細ページは、 ページ番号8で作成されています。 ページ番号8を開きます。 1. ページを選択します(この時点ではページ名はタスクの 詳細です)。 2.

    識別の名前はフィードバックの詳細、別名は feedback-details、タイトルはフィードバックの詳細に 変更します。 3. アクション・タスクの詳細ページにはリージョン開発者情 報が含まれます。この上でコンテキスト・メニューを表⽰し ます。 4. 不要なので削除します。 1 2 3 4 Copyright © 2023, Oracle and/or its affiliates 208
  52. ページ・アイテムP8_RATINGを設定します 1 2 3 4 5 6 1. 新規に作成されたページ・アイテムを選択します。 2.

    識別の名前はP8_RATING、タイプとしてラジオ・グ ループを選択します。 3. ラベルは評価とします。 4. 設定の列の数は4とします。 5. 検証の必須の値はオンです。 6. LOVのタイプは静的値、静的値として満⾜、まあ満 ⾜、普通、不満をそれぞれ1、2、3、4と設定します。 追加値の表⽰はオフ、NULL値の表⽰もオフとします。 7. セッション・ステートのストレージはリクエストごと(メモ リーのみ)とします。 7 Copyright © 2023, Oracle and/or its affiliates 215
  53. 219 Copyright © 2023, Oracle and/or its affiliates プロセス予約IDの取得を設定します プロセス初期化フォームフィードバックの詳細より前に、

    新規に作成されたプロセスを配置します。 1. 新規に作成されたプロセスを選択します。 2. 識別の名前は予約IDの取得、タイプはコードの実⾏ とします。 3. ソースのPL/SQLコードとして以下を記述します。 1 2 3 begin select booking_id into :P8_BOOKING_ID from appointment where booking_id = (select param_value from apex_task_parameters where task_id = :P8_TASK_ID and param_static_id = 'BOOKING_ID'); end;
  54. フィードバックを保存するコード begin insert into patient_feedback ( patient_name, doctor_no, appointment, feedback,

    rating, created_at, updated_at) values (:P8_PATIENT_USERNAME, :P8_DOCTOR_NO, to_timestamp_tz(:P8_SCHEDULE,'YYYY-MM-DD HH24:MI:SS'), :P8_FEEDBACK, :P8_RATING, systimestamp, systimestamp); end;
  55. リージョンフィードバック⼀覧を設定します 1. 新規に作成したリージョンを選択します。 2. 識別のタイトルはフィードバック⼀覧とします。タイプは テンプレート・コンポーネントのCommentsを選択しま す。 3. ソースのタイプはSQL問合せ、SQL問合せとして以下 のSELECT⽂を記述します。

    4. 外観のテンプレートとしてCollapsibleを選択します。 1 2 3 4 select ID, PATIENT_NAME, 'DR.' || DNAME as DNAME, APPOINTMENT, FEEDBACK, RATING, CREATED_AT, UPDATED_AT from PATIENT_FEEDBACK, DOCTOR where PATIENT_NAME=:APP_USER and DOCTOR_NO = DNO Copyright © 2023, Oracle and/or its affiliates 230
  56. ワークフロー・コンソールを作成します 1. ページ番号は12とします。 2. 名前は診察予約ワークフローのモニタとします。 3. レポート・コンテキストは⾃分で開始を選択します。 4. フォーム・ページ番号は13とします。 5.

    フォーム・ページ名は診察予約ワークフローの詳細とします。 6. ページの作成をクリックします。 フォーム・ページ・モードはドロワー、ナビゲーションもデフォルト のままとします。 1 3 2 4 5 6 Copyright © 2023, Oracle and/or its affiliates 233
  57. 認証に使⽤するカスタム・コード function demo_authentication ( p_username in varchar2, p_password in varchar2

    ) return boolean is begin if upper(p_username) in ( 'ROBERT','ANACHATT','JANE','BO','PAT','MARTIN','SUSIE','DARYL','RAJESH','STEVE' ) then return true; end if; return false; end;
  58. アプリケーションにサインインします ユーザーの役割に合わせて、以下のユーザーでサインインし、 ワークフローで実装した作業を実施します。 1. 事務員STEVEでサインインし、患者RAJESHの診察 予約を作成します。 2. 医師ANACHATTでサインインし、患者RAJESHの診 察予約を承認します。 3.

    患者RAJESHでサインインし、費⽤を⽀払います。 4. 患者RAJESHでサインインし、フィードバックを⼊⼒しま す。 ユーザ名だけでサインインできるように、 カスタムの認証スキームは作成されています。 Copyright © 2023, Oracle and/or its affiliates 247
  59. 診察予約を作成します ユーザーSTEVEでサインインします。 1. ナビゲーション・メニューより新規診察予約を開きます。 2. 患者⽒名はRAJESH(⼤⽂字で⼊⼒)です。 3. 患者メールアドレスとして、実際にメールを受信できる アドレスを⼊⼒します。 4.

    症状として⼼療内科を選択します。 5. 予約⽇時として将来の⽇時を⼊⼒します。テストなの で、10-20分程度後の時刻にします。 6. 医師はANACHATTを選択します。 7. 患者年齢は30とします。 8. 予約の作成をクリックします。 1 診察予約が作成されます。 2 3 4 5 6 7 8 Copyright © 2023, Oracle and/or its affiliates 248
  60. 所有者向けのワークフロー・コンソールを作成します 1. ページ番号は14とします。 2. 名前は所有者向けモニタとします。 3. レポート・コンテキストはマイ・ワークフローを選択します。 4. フォーム・ページ番号は15とします。 5.

    フォーム・ページ名は所有者向け詳細とします。 6. ページの作成をクリックします。 フォーム・ページ・モードは ドロワー、ナビゲーションもデフォルトのままとします。 1 3 2 4 5 6 Copyright © 2023, Oracle and/or its affiliates 272
  61. 管理者向けのワークフロー・コンソールを作成します 同様の⼿順で、ワークフロー・コンソールの作成まで進みます。 1. ページ番号は16とします。 2. 名前は管理者向けモニタとします。 3. レポート・コンテキストは管理ワークフローを選択します。 4. フォーム・ページ番号は17とします。

    5. フォーム・ページ名は管理者向け詳細とします。 6. ページの作成をクリックします。 フォーム・ページ・モードは ドロワー、ナビゲーションもデフォルトのままとします。 1 3 2 4 5 6 Copyright © 2023, Oracle and/or its affiliates 273
  62. ワークフロー・バージョンをアクティブ化します ワークフロー診察予約を開き、 開発中のバージョンをアクティブ化します。 1. 開発中のバージョンを選択します。 2. アクティブ化をクリックします。 3. ポップアップのOKをクリックします。 ポップアップのメッセージが

    「このワークフローには既存のアクティブなバージョンがあるため、 ⾮アクティブ化されます。続⾏しますか。」となっています。 既存のアクティブなバージョンはないため、メッセージが若⼲、 正確ではないようです。 3 2 1 Copyright © 2023, Oracle and/or its affiliates 275
  63. ワークフローを開始します ユーザーSTEVEでサインインし、 新規に診察予約を作成します。 1. 新規診察予約の情報を⼊⼒します。 2. 予約の作成をクリックします。 アクティブなワークフロー・バージョンが存在するため、 診察予約が正常に作成されます。 アプリケーション・ビルダーから

    アプリケーションを実⾏している場合は、開発中のワークフロー・ バージョンが必要なので、エラーが発⽣します。 「ワークフローDOC_APPTには開発中のバージョンがありません」 1 2 Copyright © 2023, Oracle and/or its affiliates 277
  64. アクティブなワークフロー・バージョンで可能な変更 編集 開発中 アクティブ アクティビティの新規作成 可 不可 アクティビティの削除 可 不可

    開始アクティビティの編集 可 不可 終了アクティビティの編集 可 設定の終了状態の変更(終了/完了)のみ可 参加者の作成 可 可 アクティビティ・タイプコードを実⾏の編集 可 可(ソースコードの変更) アクティビティ・タイプAPI呼出しの編集 可 可(パッケージやプロシージャの変更およびパラメータの変更) アクティビティ・タイプヒューマン・タスク – 作成の編集 可 可 アクティビティ・タイプ電⼦メールの送信の編集 可 可 アクティビティ・タイププッシュ通知の送信の編集 可 可 アクティビティ・タイプ切替えの編集 可 可(条件の変更のみ。新規の分岐の作成や削除は不可。切替えタイプの変更も不可) アクティビティ・タイプ待機の編集 可 可(タイムアウト・タイプの変更も可)
  65. 実⾏可能なワークフローの操作 操作 ⾃分で開始 ワークフロー所有者 ワークフロー管理者 ワークフローの終了 可 可 可 ワークフローの再実⾏

    不可 可 可 ワークフローの⼀時停⽌ 不可 不可 可 変数の更新 不可 不可 可 ワークフローの再開 不可 不可 可
  66. Our mission is to help people see data in new

    ways, discover insights, unlock endless possibilities.