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

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

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

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

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

Avatar for oracle4engineer

oracle4engineer PRO

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.