diff --git a/apex-workflows/add-activities-connection/5-add-activities-connections.md b/apex-workflows/add-activities-connection/5-add-activities-connections.md index 5f27c40c..f2ccc1bc 100644 --- a/apex-workflows/add-activities-connection/5-add-activities-connections.md +++ b/apex-workflows/add-activities-connection/5-add-activities-connections.md @@ -1,173 +1,179 @@ -# Add Human Tasks to the Workflow +# Add Activities and Connections ## Introduction -In this hands-on lab, you will continue building the Doctor Appointment Workflow, focusing on defining activities, setting parameters, and creating conditional branches. +In this lab, you will continue building the Doctor Appointment Workflow, focusing on defining activities, setting parameters, and creating conditional branches. ### Objectives -In this lab, You will -- create and configure the workflow for Doctor's Appointment Made Easy! Application. +In this lab, you will: +- Create and configure the workflow by adding activities and connections. Estimated Time: 45 minutes ### Prerequisites -1. Access to Oracle APEX. -2. Ensure that you have completed the Previous labs. +- All the previous Labs have been completed. ## Task 1: Navigate to Workflow Designer -Now that we have defined the Approval and Action tasks let us go back to the Doctor Appointment Workflow and resume from where we left off. +Now that we have defined the Approval and Action tasks, let us go back to the Doctor Appointment Workflow and resume from where we left off. 1. In the App Builder, navigate to **Doctors Appointments Made Easy!** application and then select **Shared Components**. -2. Under Workflows and Automations, Select **Workflows**. +2. Under Workflows and Automations, select **Workflows**. ![Navigate to Workflows](./images/select-workflows1.png " ") -3. Click on the **Doctor Appointment** link to access the Workflow Designer. +3. Click the **Doctor Appointment** link to access the Workflow Designer. ![Select Doctor Appointments Workflow](./images/select-doctor-appt.png " ") ## Task 2. Add Compute Doctor Availability Activity -1. From the Activities Palette, **Drag** an **Invoke API** Activity into the Diagram Builder area and drop it on the connection joining the Start and End activities. - -2. Drop it on the **connection** between the Start and End activities. +1. From the Activities Palette, Drag an **Invoke API** Activity into the Diagram Builder area and drop it on the connection joining the Start and End activities. ![Drag and Drop Invoke API Activity](./images/invoke-api-compute.png " ") -3. Click the newly added **Invoke API** and in the Property Editor, - - Under Identification - - Change the Name to **Compute Doctor Availability**. - - In the Settings section, - - Select the Package Name as **EBA\_DEMO\_WF\_DOC\_APT** - - For Function, select **CHECK_AVAILABILITY**. +2. Click the newly added **Invoke API** and in the Property Editor, enter/select the following: + - Identification > Name: **Compute Doctor Availability** + - Under Settings: + - Package Name: **EBA\_DEMO\_WF\_DOC\_APT** + - Function: **CHECK_AVAILABILITY** ![Drag and Drop Invoke API Activity](./images/configure-compute-availability.png " ") -4. In the **Rendering Tree**, notice that there are some Fields marked in Red. The **CHECK_AVAILABILITY** function has 3 Parameters, highlighted in RED, to show that they are required. + In the Rendering Tree, notice that there are some Fields marked in Red. The **CHECK_AVAILABILITY** function has 3 Parameters, highlighted in RED, to show that they are required. + +3. In the Left Pane, select **Compute Doctor Availability > Function Result**. -5. In the **Left Pane**, select **Function Result** under **Compute Doctor Availability** and change the following in the **Property Editor**. - - Under Parameter, Set Direction to **Out**. - - Under Value, for **Item**, Select **Version Variable** -> **AVAILABILITY** using the Item Picker. + In the Property Editor, enter/select the following: + - Parameter > Direction: **Out** + - Value > Item: **Version Variables > AVAILABILITY** - ![Configure Function Result Var](./images/configure-function-resultvar.png " ") + ![Configure Function Result Var](./images/configure-function-resultvar.png " ") > **Note:** _The Item Picker in the Workflow Designer allows you to select Workflow Parameters, Version Variables, and Activity Variables. You may also reference Additional Workflow Data by using the Substitution String Syntax._ -6. In the **Rendering Tree**, select **p\_doctor\_id** under **Compute Doctor Availability** and change the following in the **Property Editor**. - - Under Parameter, Set Direction to **In**. +4. In the Rendering Tree, under **Compute Doctor Availability**, select **p\_doctor\_id**. + + In the Property Editor, enter/select the following: + - Parameter > Direction: **In** - Under Value, - - For **Type**, Select **Static Value**. - - For **Static Value**, Enter **&DNO.**. + - Type: **Static Value** + - Static Value: **&DNO.** ![Configure p_request_id Var](./images/configure-p-requestdt.png " ") -7. In the **Rendering Pane**, select **p\_request\_date** under **Compute Doctor Availability** and change the following in the **Property Editor**. - - Under Parameter, Set Direction to **In**. - - Under Value, - - For **Type**, Select **Item**. - - For **Item**, Select **Workflow Parameter** -> **REQUEST_DATE** using the Item Picker. - - For **Format Mask**, select **DD-MON-YYYY HH24:MI:SS**. +5. In the Rendering Pane, under **Compute Doctor Availability**, select **p\_request\_date**. + + In the Property Editor, enter/select the following: + - Parameter > Direction: **In**. + - Under Value: + - Type: **Item**. + - Item: **Workflow Parameter > REQUEST_DATE** + - Format Mask: **DD-MON-YYYY HH24:MI:SS** ![Configure p_request_date Var](./images/conf-request-dt.png " ") -8. Click the **Save** button to share the workflow. +6. Click **Save** to save the workflow. -Upon execution, this activity will determine if the doctor is available or engaged at the requested date and time by consulting the appointment schedule. +Upon execution, this activity will determine if the doctor is available or engaged on the requested date and time by consulting the appointment schedule. ## Task 3: Use Workflow Switch Activity -Based on the Doctor's availability, the workflow needs to branch conditionally. Revise the workflow diagram at your discretion. +Based on the Doctor's availability, the workflow needs to branch conditionally. Let us revise the workflow diagram. -1. Drag and Drop a **Switch Activity** on the connection between the Compute Doctor Availability and the End Activities. +1. Drag and Drop a **Switch Activity** on the connection between the *Compute Doctor Availability* and the *End* Activities. ![create Workflow Activity](./images/create-workflow-activity.png " ") -2. Configure the Switch Activity in the Property Editor for Doctor Availability conditions. Click the Workflow activity you just placed in the workflow Diagram, and then in the Property Editor, do the following changes - - Under Identification, Change the name to **Doctor Available?**. - - Under Switch, make sure that the Type is **True False Check**. +2. Configure the Switch Activity in the Property Editor for Doctor Availability conditions. Click the Workflow activity you just placed in the workflow Diagram, and then in the Property Editor, enter/select the following: + - Identification > Name: **Doctor Available?** + - Switch > Type: **True False Check** - Under Condition, - - Set **Condition Type** as **Workflow Variable = Value** - - Select the **Workflow Variable** using the **Item Picker**. Set it to **AVAILABILITY**. - - Set the Value as **BUSY**. + - Condition Type: **Workflow Variable = Value** + - Workflow Variable: **AVAILABILITY** + - Value: **BUSY** ![create Doctor available activity](./images/configure-doctor-available.png " ") - > **Note:** _The Switch Type is defaulted to True False Check. Switch Activity can be of 4 types. You will learn about the different Switch types in the soon-to-be-released 23.2 App Builder Documentation Guide._ + > **Note:** _The Switch Type is defaulted to True False Check. Switch Activity can be of 4 types. Learn about the different Switch types in the APEX 23.2 App Builder Documentation Guide._ ## Task 4: Create Conditional Connections(Branches) and No Appointment Mail Activity Next, we need to create the Conditional Connections (branches) for this Switch Activity. A True False Check Activity typically has a True Branch, a False Branch, and a Null Branch, depending on the evaluation of the Condition. -1. Going by the flowchart created earlier, if AVAILABILITY is set to BUSY, our Workflow sends a No Appointment Mail and terminates the business process. Otherwise, it proceeds to Raise an Appointment Request for the Doctor to Approve or Reject. +1. Going by the flowchart created earlier, if AVAILABILITY is set to BUSY, our Workflow sends a 'No Appointment' Mail and terminates the business process. Otherwise, it proceeds to Raise an Appointment Request for the Doctor to Approve or Reject. -2. Now, select the Connection(Arrow) leading out of the Switch Activity, **Doctor Available?**, we have created in the previous step. +2. Now, select the Connection(Arrow) leading out of the Switch Activity, **Doctor Available?**, we created in the previous task. -3. In the Property Editor - - Under **Identification**, set the Name to **No** - - Under **Condition**, set When to **True**. +3. In the Property Editor, enter/select the following: + - Identification > Name: **No** + - Condition > When: **True** - ![Configre the Connection](./images/configure-connection1.png " ") + ![Configre the Connection](./images/configure-connection1.png " ") 4. After Configuring the Connection, Drag and Drop a **Send E-Mail Activity** on the **+** (Plus) symbol in the middle of the arrow. ![Drag and Drop Send Email Activity](./images/drag-send-email1.png " ") -5. Select the Send E-Mail Activity and change its name to **No Appointment Mail**. +5. Select the **Send E-Mail** Activity and in the property editor, edit the name to **No Appointment Mail**. -6. Re-adjust the arrow and the activity by dragging them to the left to make the diagram more aesthetic. +6. Re-adjust the arrow and the activity by dragging them to the left in order to make the diagram more aesthetic. -7. Once again, Select the **True connection** and verify that the **To** attribute in the Property Editor is correctly set to **No Appointment Mail**. +7. Select the **True connection** and in the Property Editor, verify that the **To** is correctly set to **No Appointment Mail**. ![Verify True Connection](./images/verify-true-connection.png " ") -## Task 5: Configure No Appointment Mail Activity +## Task 5: Configure 'No Appointment Mail' Activity + +1. Select **No Appointment Mail** Activity. -1. Click on the **No Appointment Mail** Activity to select it. +2. In the Property Editor, enter/select the following: + + Under Settings, -2. In the Property Editor, edit the following under **settings**, - - Set **To** as **&PATIENT_EMAIL.** - - Set **Subject** as **Appointment Canceled**. - - Enter/Replace the text in the **Body Plain Text** with the text below. - ``` - - Hello &PATIENT_NAME. , + - To: **&PATIENT_EMAIL.** + - Subject: **Appointment Canceled** + - Body Plain Text: Enter/Replace the text with the text below. + + ``` + + Hello &PATIENT_NAME. , - We regret to inform you that your appointment request for &REQUEST_DATE. It could not be confirmed due to the unavailability of the doctor/non-confirmation of the invoice. - The requested appointment has been canceled. - Please try again at a later date. - We regret the inconvenience caused. + We regret to inform you that your appointment request for &REQUEST_DATE. It could not be confirmed due to the unavailability of the doctor/non-confirmation of the invoice. + The requested appointment has been canceled. + Please try again at a later date. + We regret the inconvenience caused. - Regards, - Management Team - ABC Hospital - - ``` + Regards, + Management Team + ABC Hospital + + ``` - ![Configure No Appointment Email](./images/conf-noappt-email.png " ") + ![Configure No Appointment Email](./images/conf-noappt-email.png " ") ## Task 6: Adjust Workflow End Activity -1. Select the **Workflow End Activity** and do the following changes in the Property Editor. - - Under Identification, Change **Name** to **Close Request**. - - Under Settings, Set the **End State property** to **Terminated**. +1. Select the **Workflow End Activity**, and in the Property Editor enter/select the following: + - Identification > Name: **Close Request** + - Settings > End State: **Terminated** ![Edit End activity](./images/edit-end-activity.png " ") -2. At this point, Make sure there are no validation errors in the workflow model. Click on the **Save** button to save your changes. +2. At this point, make sure there are no validation errors in the workflow model. Click **Save** to save your changes. -## Task 7: Create Raise Appointment Request Activity +## Task 7: Create the 'Raise Appointment Request' Activity -1. From the Activities palette, Drag and drop a **Human Task - Create Activity** below the **Doctor Available?** Activity. +1. From the Activities palette, drag and drop a **Human Task - Create** Activity. ![Edit Human Task Create activity](./images/create-appointment-request.png " ") -2. Change the Name of the activity to **Raise Appointment Request** in the Property Editor. +2. In the Property Editor, for Name, enter **Raise Appointment Request**. ![Change Name of Human Task Create activity](./images/change-name-of-activity.png " ") -## Task 8: Connect Raise Appointment Request to Workflow +## Task 8: Connect 'Raise Appointment Request' to Workflow Re-adjust the Workflow Diagram to make the diagram more aesthetic. @@ -175,15 +181,19 @@ Re-adjust the Workflow Diagram to make the diagram more aesthetic. ![Create a Connection](./images/create-connection1.png " ") -2. In the Property Editor for this connection, set the Name as Yes and When as False. +2. With the **Raise Appointment Request** activity selected, in the Property Editor, enter/select the following: + - Name: **Yes** + - When: **False** ![Configure Connection](./images/configure-connection.png " ") -## Task 9: Check Variables in Workflow Tree +## Task 9: Verify the Variables in Workflow Tree -1. At this point, check the Variables in your Workflow Tree. You will notice there are two new workflow variables automatically created under Variables. +At this point, check the Variables in your Workflow Tree. You will notice there are two new workflow variables automatically created under Variables. -2. The two Variables created are **TaskOutcome** with a static Id **TASK_OUTCOME** and **Approver** with Static ID **APPROVER**. +1. The two Variables created are: + - **TaskOutcome** with a static Id **TASK_OUTCOME**. + - **Approver** with Static ID **APPROVER**. ![Check Variables](./images/check-variables.png " ") @@ -191,44 +201,44 @@ Re-adjust the Workflow Diagram to make the diagram more aesthetic. -## Task 10: Configure Raise Appointment Request Parameters +## Task 10: Configure 'Raise Appointment Request' Parameters -1. In the rendering Tree or in the Workflow Designer, select **Raise Appointment Request**. +1. In the Rendering Tree or in the Workflow Designer, select **Raise Appointment Request**. -2. In the Property Editor, +2. In the Property Editor, enter/select the following: - Under Settings, - - For **Definition**, Select **Appointment Request**. - - Set the **Detail Primary Key** Item as **DNO** (Doctor No. from the DOCTOR table) - - Set the **Outcome** Item to **TASK_OUTCOME** workflow variable - - Set the **Owner** to **APPROVER** workflow variable + - Definition: **Appointment Request** + - Detail Primary Key: **DNO** (Doctor No. from the DOCTOR table) + - Outcome: **Workflow Variables > TASK_OUTCOME** + - Owner: **Workflow Variables > APPROVER** ![Check Variables](./images/configure-request-appointment.png " ") -3. In the **Rendering Tree**, notice that there are some Fields marked in Red. The **Raise Appointment Request** function has 3 Parameters, highlighted in RED, to show that they are required. +3. In the Rendering Tree, notice that there are some Fields marked in Red. The **Raise Appointment Request** function has 3 Parameters, highlighted in RED, to show that they are required. -4. In the **Left Pane**, select **Appointment Date** under **Raise Appointment Request** and change the following in the **Property Editor**. +4. In the Rendering Tree, select **Raise Appointment Request > Appointment Date**. In the Property Editor, enter/select the following: - - Under Value, - - Set Type as **Item** and for **Item**, - - Set **Item** as **REQUEST_DATE** using the Item Picker. + - Under Value: + - Type: **Item** + - Item: **REQUEST_DATE** ![Set Request Date Param](./images/set-params-app-req.png " ") -5. In the **Rendering Tree**, select **Consultation For** under **Raise Appointment Request** and change the following in the **Property Editor**. - - Under Value, - - For **Type**, Select **Item**. - - For **Item**, Enter **PROBLEM**. +5. In the Rendering Tree, select **Raise Appointment Request > Consultation For**. In the Property Editor, enter/select the following: + - Under Value: + - Type: **Item** + - Item: **PROBLEM** ![Set Consultation For Param](./images/set-param-app-req1.png " ") -6. In the **Rendering Pane**, select **Patient Name** under **Raise Appointment Request** and change the following in the **Property Editor**. - - Under Value, - - For **Type**, Select **Item**. - - For **Item**, Enter **PATIENT_NAME**. +6. In the Rendering Pane, select **Raise Appointment Request > Patient Name**. In the Property Editor, enter/select the following: + - Under Value: + - Type: **Item** + - Item: **PATIENT_NAME** ![Set Patient Name Param](./images/set-params-appt-req.png " ") -7. At this point, we still have a validation error. Click on the Error Icon at the Top of your Page Designer to see it. +7. At this point, we still have a validation error. Click the **Error Icon** at the Top of your Page Designer. ![Check Page Error](./images/check-error1.png " ") @@ -236,137 +246,136 @@ Re-adjust the Workflow Diagram to make the diagram more aesthetic. ![drag and drop end activity](./images/drag-drop-workflow-end.png " ") -9. Select the **Workflow End Activity** and make the following changes in the Property Editor. - - Under Identification, Change **Name** to **Complete Appointment**. +9. Select the **Workflow End Activity** and enter the following in the Property Editor: + - Identification > Name: **Complete Appointment** ![Edit End activity](./images/config-workflow-end.png " ") -10. Create a connection from the **Raise Appointment Request** to **Complete Appointment**. Note that the validation error no longer shows up. Click on the Save button to save the workflow model. +10. Create a connection from the **Raise Appointment Request** to **Complete Appointment**. Note that the validation error no longer shows up. Click **Save** to save the workflow model. ## Task 11: Handle the Task Outcome -In this task, you will learn how to manage appointment requests using a Switch Activity in a workflow. The Appointment Request Task can result in two outcomes: APPROVED or REJECTED. In case it is **APPROVED**, we create an entry in the **APPOINTMENT table** with details of the appointment and the status set to **CONFIRMED**. In case it is **REJECTED** we send a **No Appointment Mail** to the patient. +In this task, you learn to manage appointment requests using a Switch Activity in a workflow. The Appointment Request Task can result in two outcomes: APPROVED or REJECTED. +- In case it is **APPROVED**, we create an entry in the **APPOINTMENT** table with details of the appointment and set the status to **CONFIRMED**. +- In case it is **REJECTED**, we send a **No Appointment Mail** to the patient. -1. To add a Switch Activity, Open the workflow diagram in the workflow editor. +1. To add a Switch Activity, open the workflow diagram in the workflow editor. 2. Drag and drop a **Switch Activity** to the left of the **Raise Appointment Request** Activity. ![Adding a new switch activity](./images/add-switch-activity.png " ") -3. Select the Switch Activty you just created and then in the Property Editor, configure the following: - - Under Identification, Change the name to **Appointment Approved?** - - Under Switch, Set the **Type** as **Check Workflow Variable**. - - Under **Compare**, for **Compare Variable**, Select **TASK_OUTCOME** from the item picker. - ![Adding a new switch activity](./images/config-switch-activity.png " ") +3. Select the Switch Activty you just created and then in the Property Editor, enter/select the following: + - Identification > Name: **Appointment Approved?** + - Switch, > Type: **Check Workflow Variable** + - Compare > Compare Variable: **TASK_OUTCOME** + ![Adding a new switch activity](./images/config-switch-activity.png " ") -4. In the Workflow Designer, Detatch the end of the arrow connecting the **Raise Appointment** Request and the **Complete Appointment** activities and attach it to the **Appointment Approved?** activity. +4. In the Workflow Designer, detatch the end of the arrow connecting the **Raise Appointment Request** and the **Complete Appointment** activities and attach it to the **Appointment Approved?** activity. -5. Now, select the **Appointment Approved?** activity and draw an arrow to the No Appointment Mail activity. In the Property Editor, - - Under **Identification**, Change the **Name** of the Connection to **No** - - Under **Condition**, - - Set the Operator to **Is Equal To** - - Set the Value to **REJECTED**. +5. Now, select the **Appointment Approved?** activity and draw an arrow to the **No Appointment Mail** activity. In the Property Editor, enter/select the following: + - Identification > Name: **No** + - Under Condition, + - Operator: **Is Equal To** + - Value: **REJECTED** ![reconfigure connection](./images/reconnecting-arrow.png " ") 6. Click **Save**. ## Task 12: Add Invoke API for Confirm Appointment -1. From the Activities Palette, **Drag** an **Invoke API** Activity into the Diagram Builder area and drop it below the **Appointment Approved?** activity. +1. From the Activities Palette, drag an **Invoke API** Activity into the Diagram Builder area and drop it below the **Appointment Approved?** activity. ![Drag and Drop Invoke API Activity](./images/drag-drop-invoke-api2.png " ") -3. Click the newly added **Invoke API** and in the Property Editor, - - Under Identification - - Change the Name to **Confirm Appointment**. - - In the Settings section, - - Select the Package Name as **EBA\_DEMO\_WF\_DOC\_APT** - - For Function, select **CONFIRM_APPOINTMENT**. +2. Click the newly added **Invoke API** Activity and in the Property Editor, enter/select the following: + - Identification > Name: **Confirm Appointment** + - Under Settings, + - Package: **EBA\_DEMO\_WF\_DOC\_APT** + - Procedure or Function: **CONFIRM_APPOINTMENT** ![Configure Confirm Appointment](./images/configure-invoke-api.png " ") -4. In the **Rendering Tree**, notice some Fields marked in Red. The **Confirm Appointment** function has several Parameters, highlighted in RED, to show that they are required. +3. In the Rendering Tree, notice some Fields marked in Red. The **Confirm Appointment** function has several Parameters, highlighted in RED, to show that they are required. -5. In the **Left Pane**, select **Function Result** under **Confirm Appointment** and change the following in the **Property Editor**. - - Under Value, for **Item**, Select **Version Variable** -> **BOOKING_ID** using the Item Picker. +4. In the Left Pane, select **Confirm Appointment > Function Result** and in the **Property Editor**, enter/select the following: + - Value > Item: **Version Variables > BOOKING_ID** ![Configure function result](./images/select-function-result.png " ") -6. Similarly, Set the remaining parameters under **Confirm Appointment** as follows: - - Set **p\_doctor\_id** as Static value **&DNO.** - - Set **p\_request\_date** as the **REQUEST_DATE** Workflow Parameter . Set the Format Mask to **DD-MON-YYYY HH24:MI:SS** - - Set **p\_doctor\_email** as Static value **&DOC_EMAIL.** - - Set **p\_patient\_email** as **Item Picker** -> **Workflow Parameter** -> **PATIENT\_EMAIL** - - Set **p\_workflow\_id** as Static value **&APEX$WORKFLOW_ID.** - - Set **p\_patient\_name** to **Workflow Parameter** **PATIENT_NAME** using Item Picker. +5. Similarly, set the remaining parameters under **Confirm Appointment** as follows: + + |Parameter | Value | Format Mask| + |---------|--------|------------| + |p\_doctor\_id|Static Value: **&DNO.**|| + |p\_request\_date|Workflow Parameters: **REQUEST_DATE**|DD-MON-YYYY HH24:MI:SS| + |p\_doctor\_email| Static Value: **&DOC_EMAIL.**|| + |p\_patient\_email| Workflow Parameters: **PATIENT\_EMAIL**|| + |p\_workflow\_id| Static Value: **&APEX$WORKFLOW_ID.**|| + |p\_patient\_name| Workflow Parameters: **PATIENT_NAME**|| + -> **Tip:** _APEX$WORKFLOW_ID is a substitution string that hold the ID of the workflow instance while it runs. You will learn more about the available substitution strings for Workflows in the soon-to-be-released App Builder Documentation Guide._ +> **Note:** _APEX$WORKFLOW\_ID is a substitution string that holds the ID of the workflow instance while it runs. You will learn more about the available substitution strings for Workflows in the App Builder Documentation Guide._ -7. Now, click on the **Appointment Approved?** activity and draw an arrow to the **Confirm Appointment activity**. +6. Now, click the **Appointment Approved?** activity and draw an arrow to the **Confirm Appointment activity**. -8. In the Property Editor, - - Under **Identification**, Change the **Name** to **Yes**. - - Under **Condition**, - - Set the Operator to **Is Equal To** - - Set the Value to **APPROVED**. +7. With the arrow selected, in the Property Editor, enter/select the following: + - Identification > Name: **Yes** + - Under Condition, + - Operator: **Is Equal To** + - Value: **APPROVED** ![reconfigure connection](./images/reconfigure-connection.png " ") -9. To be able to save the model at this point, we need to get rid of validation errors. Create a **connection** from **Confirm Appointment** to **Complete Appointment** End activity. +8. To be able to save the model at this point, we need to get rid of validation errors. Create a **Connection** from **Confirm Appointment** to **Complete Appointment** End activity. ![create a new connection](./images/create-connection.png " ") -10. Save The workflow model by clicking the **Save** button. +9. Click **Save** to save the workflow model. ## Task 13: Add the Switch Activity for followup-check -In this Task, The next step in the business logic is to check if this is a follow-up visit for the patient. If this is a patient returning in less than a week, the visit is considered to be a follow-up and is free of charge, otherwise, a charge of 500 is levied. - -Drag and Drop a Switch Activity into the Diagram area, and place the activity below the Confirm Appointment Activity. - -In the property editor, rename the Switch Activity to Free Consultation? . +The next step in the business logic is to check if the appointment is a follow-up visit for the patient. If this is a patient returning in less than a week, the visit is considered to be a follow-up and is free of charge, otherwise, a charge of 500 is levied. -Detach the connection from the Confirm Appointment Activity and re-attach it to this Switch Activity. - -1. To add a Switch Activity, Open the workflow diagram in the workflow editor. +1. Open the workflow diagram in the workflow editor. 2. Drag and drop a **Switch Activity** below the **Confirm Appointment** Activity. ![Adding a new switch activity](./images/create-new-switch-activity.png " ") -3. Select the Switch Activity you just created, and then in the Property Editor, configure the following: - - Under Identification, Change the name to **Free Consultation?** - - Under Switch, Set the **Type** as **True False Check**. +3. Select the Switch Activity you just created, and then in the Property Editor, enter/select the following: + - Identification > Name: **Free Consultation?** + - Switch > Type: **True False Check** ![Adding a new switch activity](./images/config-switch-activity2.png " ") -4. Now, detach the connection from the Confirm Appointment Activity and re-attach it to this Switch Activity. +4. Now, detach the connection from the **Confirm Appointment** Activity and re-attach it to this **Switch** Activity. ![Adding a new switch activity](./images/config-switch-activity3.png " ") ## Task 14: Create Activity Variable for Free Consultation -We need to base the Switch condition outcome on a calculation (the number of days since the patient's last visit to the same doctor). To store the calculation result, we will create an Activity Variable for the Free Consultation? Activity. +The Switch condition's outcome should be based on a calculation of the number of days since the patient's last visit to the same doctor. To store the calculation result, we will create an Activity Variable for the **Free Consultation?** Activity. -*TechTip:* +> *Points to Note:* -| Description | -|----------------------------------------------------------------------------------------------------------------------------------| -|Workflow Activity variables are specific/local to the execution of a workflow activity. | -| 1. During Activity execution | -| 2. During the evaluation of a Switch condition | -| 3. During the evaluation of any Timeout or Error-handling routes defined for the activity | -|Unlike Workflow Variables, they cannot be referenced by other activities of the workflow once the activity execution is completed. | +>- **Workflow Activity variables** are specific/local to the execution of a workflow activity. These variables may be referenced: + - During Activity execution. + - During the evaluation of a Switch condition. + - During the evaluation of any Timeout or Error-handling routes defined for the activity. +- Unlike **Workflow Variables**, they cannot be referenced by other activities of the workflow once the activity execution is completed. -1. To create an Activity Variable, right-click on the **Free Consultation?** activity in the Workflow Tree and select Create Activity Variable. +1. To create an Activity Variable, right-click on the **Free Consultation?** activity in the Workflow Tree and select **Create Activity Variable**. ![adding activity variable](./images/create-activity-variable.png " ") -2. Select the New activity variable, and in the Property Editor, perform the following - - Under Identification, Change the Static ID to **FREE**. - - Change the Label to Free - - Under Value, Set the **Type** as **Function Body**, and in the **PL/SQL Function Body**, enter the following code +2. Select the New activity variable, and in the Property Editor, enter/select the following: + - Identification > Static ID: **FREE** + - Label: **Free** + - Under Value: + - Type: **Function Body** + - PL/SQL Function Body: Enter the following code: ``` declare @@ -389,81 +398,85 @@ We need to base the Switch condition outcome on a calculation (the number of day ![Configure ](./images/configure-free-variable.png " ") -## Task 15: Configure Free Consultation Switch Activity +## Task 15: Configure the 'Free Consultation Switch Activity' -1. Now, select the **Free Consultation?** activity again. +1. In the Rendering Tree, select **Free Consultation?** activity. -2. In the Property Editor, make the following changes. - - Under **Switch**, Set the **Type** as **True False Check** - - Under **Condition**, - - set **Condition Type** as **Workflow Variable = Value** - - Select the **Workflow Variable** as **FREE** from the **Item Picker** -> **Activity Variables** Tab - - Set the Value as **1** +2. In the Property Editor, enter/select the following: + - Switch > Type: **True False Check** + - Under Condition, + - Condition Type: **Workflow Variable = Value** + - Workflow Variable: **Activity Variables -> FREE** + - Value: **1** ![Configure Free consultation](./images/configure-free-consultation.png " ") -## Task 16: Create the Update Fees Activity and the Send Invoice Email to Patient Activity +## Task 16: Create the 'Update Fees' and 'Send Invoice Email to Patient' Activities -The next step is establishing connections for Free Consultation branches with activities such as Update Fees and sending invoice Email to Patients. +The next step is to establish connections for Free Consultation branches with activities such as Updating Fees and sending invoice Email to Patients. -1. From the Activities Palette, **Drag** an **Invoke API** Activity into the Diagram Builder area and drop it below the **Free Consultation? activity**. +1. From the Activities Palette, drag an **Invoke API** Activity into the Diagram Builder area and drop it below the **Free Consultation?** activity. -2. Click the newly added **Invoke API** and in the Property Editor, - - Under Identification - - Change the Name to **Update Fees**. - - In the Settings section, - - Select the Package Name as **EBA\_DEMO\_WF\_DOC\_APT** - - For Function, select **UPDATE_FEES**. - This procedure will update the Consultation Fee (FEE) in the APPOINTMENT Table record and also populate the Workflow Variable FEE. +2. Click the newly added **Invoke API** and in the Property Editor, enter/select the following: + - Identification > Name: **Update Fees** + - Under Settings: + - Package: **EBA\_DEMO\_WF\_DOC\_APT** + - Procedure or Function: **UPDATE_FEES** + This procedure will update the Consultation Fee (FEE) in the APPOINTMENT Table record and also populate the Workflow Variable FEE. ![Drag and Drop Invoke API Activity](./images/configure-update-fees.png " ") 3. In the **Rendering Tree**, notice that there are some Fields marked in Red. The **Update Fees** function has 5 Parameters, highlighted in RED to show that they are required. -4. In the **Left Pane**, select **Function Result** under **Update Fees** and change the following in the **Property Editor**. - - Under Parameter, Set Direction to **Out**. - - Under Value, for **Item**, Select **Version Variable** -> **FEE** using the Item Picker. +4. In the Left Pane, select **Update Fees > Function Result**. In the Property Editor, enter/select the following: + - Parameter > Direction: **Out** + - Value > Item: **Version Variables > FEE** ![Configure Function Result Var](./images/configure-function-result.png " ") -5. Similarly, Set the remaining parameters under **Confirm Appointment** as follows: - - Set **p\_booking\_id** to **Item**-> Version Variable **BOOKING_ID**. - - Set **p\_doctor\_id** to Static Value -> **&DNO.** - - Set **p\_request\_date** to **Item** -> Workflow Parameter **REQUEST_DATE** - - Set **p\_patient\_name** to **Item** -> Workflow Parameter **PATIENT_NAME** - -6. From the Activities Palette, drag and drop a **Send E-Mail** activity next to the **Update Fees** activity. +5. Similarly, configure the remaining parameters under **Confirm Appointment** as follows: -7. In the Property Editor, edit the following: - - Under **Identification**, Change the name to **Send Invoice Email To Patient**. - - under **settings**, - - Set **To** as **&PATIENT_EMAIL.** - - Set **Subject** as **Appointment Confirmed!**. - - Enter/Replace the text in the **Body Plain Text** with the text below. - ``` - - Hello &PATIENT_NAME. , - Your appointment for &REQUEST_DATE. with Dr. &DNAME. is confirmed, The consultation charge is Rs &FEE. . - An invoice has been raised for this appointment. Kindly make the required payment and confirm the same at the earliest. - Please note that no payment will be required if this is a follow-up consultation. + |Parameter | Value | + |---------|--------| + |p\_booking\_id|Version Variables > **BOOKING_ID**| + |p\_doctor\_id|Static Value > **&DNO.**| + |p\_request\_date| Workflow Parameters > **REQUEST_DATE**| + |p\_patient\_name| Workflow Parameters > **PATIENT\_NAME**| + - Regards, - Management Team - ABC Hospital - - ``` - - ![Configure No Appointment Email](./images/config-send-email.png " ") +6. From the Activities Palette, drag and drop a **Send E-Mail** activity next to the **Update Fees** activity. -8. Now, draw a Connection from the **Free Consultation?** activity to the **Update Fees** activity. In the Property Editor, - - Under Identification, Set Name to **No** - - Under Condition, Set When to **False** +7. In the Property Editor, enter/select the following: + - Identification > Name: **Send Invoice Email To Patient** + - Under Settings: + - From: **&APP_EMAIL.** + - To: **&PATIENT_EMAIL.** + - Subject: **Appointment Confirmed!** + - **Body Plain Text**: Enter/Replace the text with the text below: + ``` + + Hello &PATIENT_NAME. , + Your appointment for &REQUEST_DATE. with Dr. &DNAME. is confirmed, The consultation charge is Rs &FEE. . + An invoice has been raised for this appointment. Kindly make the required payment and confirm the same at the earliest. + Please note that no payment will be required if this is a follow-up consultation. + + Regards, + Management Team + ABC Hospital + + ``` + + ![Configure No Appointment Email](./images/config-send-email.png " ") + +8. Now, draw a Connection from the **Free Consultation?** activity to the **Update Fees** activity. In the Property Editor, enter/select the following: + - Identification > Name: **No** + - Condition > When: **False** ![draw conn to update fees](./images/draw-conn1.png " ") -9. Now, draw a Connection from the **Free Consultation?** activity to the **Send Invoice Mail To Patient** activity. In the Property Editor, - - Under Identification, Set Name to **Yes** - - Under Condition, Set When to **True** +9. Now, draw a **Connection** from the **Free Consultation?** activity to the **Send Invoice Mail To Patient** activity. In the Property Editor, enter/select the following: + - Identification > Name: **Yes** + - Condition > When: **True** ![draw conn to update fees](./images/draw-conn2.png " ") @@ -471,57 +484,64 @@ The next step is establishing connections for Free Consultation branches with ac ![draw conn to end activity](./images/draw-connections.png " ") -11. Click on the **Save** button to save the changes. +11. Click **Save** to save the changes. -## Task 17: Adding the Invoice Request Human Task Activity +## Task 17: Add the Invoice Request Human Task Activity At this point, the workflow needs to raise an Invoice Request for the patient to confirm. 1. From the Activities Palette, drag and drop a **Human Task - Create** Activity and place it next to the **Complete Appointment End** Activity. ![draw conn to end activity](./images/create-human-task-inv.png " ") -2. Then, detach the two connections from **Update Fees** and **Send Invoice Mail To Patient activities** and attach them to the **Human Task** activity. - ![draw conn to raise inv](./images/draw-connections-inv.png " ") - -3. In the property editor for the Human Task Activity, - - Under **Identification**, Set the Name as **Raise Invoice Request** - - Under **Settings**, - - Set the **Definition** as **Invoice Request** - - Set the **Details Primary Key Item** as **BOOKING_ID** - - Under Deadline, - - Set the **Due On Type** to **Interval** - - Set the **Interval** to **PT30M** (this means that if the payment is not made and the patient does not confirm the invoice within 30 minutes, then the Appointment request will be closed) +2. With **Human Task - Create** selected, in the Property Editor, enter/select the following: + - Identification > Name: **Raise Invoice Request** + - Under Settings: + - Definition: **Invoice Request** + - Details Primary Key Item: **BOOKING_ID** + - Under Deadline: + - Due On Type: **Interval** + - Interval: **PT30M** (This means that if the payment is not made and the patient does not confirm the invoice within 30 minutes, then the Appointment request will be terminated.) ![draw conn to end activity](./images/config-raise-inv.png " ") -4. In the **Rendering Tree**, notice some Fields marked in Red. The **Raise Invoice Request** has 3 Parameters, highlighted in RED, to show that they are required. +3. Then, detach the two connections from **Update Fees** and **Send Invoice Mail To Patient activities** and attach them to the **Raise Invoice Request** activity. + ![draw conn to raise inv](./images/draw-connections-inv.png " ") -5. In the **Left Pane**, select **Doctor Name** under **Raise Invoice Request** and change the following in the **Property Editor**. - - Under Value, Select **Type** as **Static Value** and then set **Static Value** as **&DNAME.** + +4. In the Rendering Tree, notice some Fields marked in Red. The **Raise Invoice Request** has 3 Parameters, highlighted in RED, to show that they are required. + +5. In the Left Pane, select **Raise Invoice Request > Doctor Name**. In the Property Editor, enter/select the following: + - Under Value: + - Type: **Static Value** + - Static Value: **&DNAME.** ![Configure Doctor Name](./images/config-doctor-name.png " ") -6. Similarly, Set the remaining parameters under **Raise Invoice Request** as follows: - - Set **Fees** as Item Picker -> Version Variable -> **FEE** - - Set **Patient Name** as Item Picker -> Workflow Parameter -> **PATIENT_NAME** +6. Similarly, set the remaining parameters under **Raise Invoice Request** as follows: + - For **Fees**, under Value: + - Type: **Item** + - Item: **Version Variables -> FEE** + - For **Patient Name**, under Value: + - Type: **Item** + - Item: **Workflow Parameters -> PATIENT_NAME** -7. Click on **Save** button to save the changes. +7. Click **Save** to save the changes. -## Task 18: Add a Timeout Connection for the Invoice Request completion. +## Task 18: Add a Timeout Connection for the Invoice Request Completion -1. Click on the 3 Dots at the top right corner of the **Raise Invoice Request** Activity to open the Context Menu and Select **Create Connection**. +1. Click on the 3 Dots at the bottom-right corner of the **Raise Invoice Request** Activity to open the Context Menu and select **Create Connection**. ![create timeout connection](./images/create-timeout-connection.png " ") -2. Now, click on the newly created Connection, and then in the Property Editor, make the following changes. - - Under **Identification**, - - set the Name to **Invoice Incomplete** - - Set the Type to Timeout - - Under **Activity** - - Make sure that From is set as **Raise Invoice Request**. - - set To as **No Appointment Email** +2. Now, click on the newly created Connection, and then in the Property Editor, enter/select the following: + - Under Identification: + - Name: **Invoice Incomplete** + - Type: **Timeout** + - Under Activity: + - From: **Raise Invoice Request** + - To: **No Appointment Email** ![Configure timeout connection](./images/configure-timeout-prop.png " ") 3. Re-adjust the Workflow Diagram to make the diagram more aesthetic. @@ -533,30 +553,34 @@ At this point, the workflow needs to raise an Invoice Request for the patient to Once the Patient confirms the invoice / makes the payment, the Appointment record status needs to be updated to PAID. -1. For that, Drag and Drop an **Invoke API** activity on the Connection between the **Raise Invoice Request** and **Complete Appointment** activities. +1. Drag and Drop an **Invoke API** activity on the Connection between the **Raise Invoice Request** and **Complete Appointment** activities. -2. In the Property Editor, do the following changes. - - Under Identification, Inout **Name** as **Update Appointment**. - - Under Settings, - - select Package as **EBA\_DEMO\_WF\_DOC\_APT**. - - set **Procedure or function** to **UPDATE_APPOINTMENT**. +2. In the Property Editor, enter/select the following: + - Identification > Name: **Update Appointment** + - Under Settings: + - Package: **EBA\_DEMO\_WF\_DOC\_APT** + - Procedure or Function: **UPDATE_APPOINTMENT** ![create and config Update appointment](./images/create-config-update-app.png " ") -3. The procedure **UPDATE_APPOINTMENT** will update the Status in the **APPOINTMENT** Table record to **PAID**. +3. The procedure **UPDATE_APPOINTMENT** will update the Status in the *APPOINTMENT* table record to **PAID**. -4. In the **Rendering Tree**, notice that there are some Fields marked in Red. The **Update Appointment** has Parameters, highlighted in RED to show that they are required. Set the Parameters for the Invoke API activity by clicking on them in the Workflow Tree +4. In the Rendering Tree, notice that there are some Fields marked in Red. The **Update Appointment** has Parameters, highlighted in RED to show that they are required. Set the Parameters for the Invoke API activity by clicking on them in the Workflow Tree. -5. In the **Left Pane**, select **p\_booking\_id** under **Update Appointment** and change the following in the **Property Editor**. - - Under Parameter, Set Direction to **In**. - - Under Value, Select **Type** as **Item** and then set **Item** as Version Variable **BOOKING_ID** +5. In the Left Pane, select **Update Appointment > p\_booking\_id**. In the Property Editor, enter/select the following: + - Parameter > Direction: **In**. + - Under Value: + - Type: **Item** + - Item: **Version Variables -> BOOKING_ID** ![config booking id](./images/config-booking-id.png " ") -6. Similarly, Set the remaining parameters under **Update Appointment** as follows: - - Set **p_status** to **Static** Value -> **PAID** - - Set **p_fee** to **API Default** +6. Similarly, set the remaining parameters under **Update Appointment** as follows: + - For **p_status**, under Value: + - Type: **Static Value** + - Static Value: **PAID** + - For **p_fee**, Value > Type: **API Default** ## Task 20: Final steps @@ -565,11 +589,11 @@ Going back to our flowchart, at this point the Workflow waits for the appointmen 1. From the Activities Palette , drag a **Wait** Activity and drop it on the connection between the **Update Appointment** and the **Complete Appointment** activities. -2. In the Property Editor, - - Under Identification, Set the Name to **Wait Before Requesting Feedback** - - Under Settings, - - Set **Timeout Type** as **SQL Query** - - For **SQL Query**, enter the following SQL Code +2. In the Property Editor, enter/select the following: + - Identification > Name: **Wait Before Requesting Feedback** + - Under Settings: + - Timeout Type: **SQL Query** + - SQL Query: Enter the following SQL Code: ``` @@ -582,25 +606,27 @@ Going back to our flowchart, at this point the Workflow waits for the appointmen 3. From the Activities Palette , drag a **Human Task - Create** Activity and drop it on the connection between the **Wait Activity** and the **Complete Appointment** activities. -4. In the Property Editor - - Under **Identification**, Set Name to **Request For Feedback** - - Under **Settings**, - - set **Definition** to **Feedback Request** - - set **Detail Primary Key Item** to **BOOKING_ID** +4. In the Property Editor, enter/select the following: + - Identification > Name: **Request For Feedback** + - Under Settings, + - Definition: **Feedback Request** + - Detail Primary Key Item: **BOOKING_ID** - Under Deadline, - - set **Due On Type** to **Interval** - - **Interval** to **PT24H** (this implies that the Workflow will wait at most 24 hours for the feedback activity to be completed ) + - Due On Type: **Interval** + - Interval: **PT24H** (This implies that the Workflow will wait for at most 24 hours for the feedback activity to be completed.) ![create and conf feedback](./images/create-conf-feedback.png " ") -5. In the Rendering Tree, select **Booking Id** under **Request For Feedback** and change the following in the **Property Editor**. - - Under Value, Select **Type** as **Item** and then set **Item** as Version Variable **BOOKING_ID** +5. In the Rendering Tree under **Request For Feedback**, select **Booking Id**. In the Property Editor, enter/select the following: + - Under Value: + - Type: **Item** + - Item: **Version Variables -> BOOKING_ID** ![config booking id](./images/set-feedback-params.png " ") -6. Drag a **Workflow End** Activity from the **Activity Palette** and drop it on the Diagram area to the left of the **Request for Feedback** activity. +6. Drag a **Workflow End** Activity from the Activity Palette and drop it on the Diagram area to the left of the **Request for Feedback** activity. -7. In the Property Editor, under identification, set Name to **End Without Feedback**. +7. In the Property Editor, for Identification > Name, enter **End Without Feedback**. ![create and config workflow end](./images/create-config-worflow-end.png " ") @@ -610,23 +636,23 @@ Going back to our flowchart, at this point the Workflow waits for the appointmen 9. Notice that the connection is in RED and this is because an activity cannot have more than one outgoing connection of type Normal. -10. Click on the Connection and then in the Property Editor, - - Under Identification, - - set the Name to **No Feedback Received** - - Set the Type to **Timeout** +10. Click on the Connection and then in the Property Editor, enter/select the following: + - Under Identification: + - Name: **No Feedback Received** + - Type: **Timeout** ![draw final connection](./images/no-feedback.png " ") -> **Tech Tip:** _Connections of type Timeout can only be added to an activity if the activity has Due On Type and value populated in the Deadline section of the Property Editor._ +> **Note:** _Connections of type Timeout can only be added to an activity if the activity has 'Due On' Type and value populated in the 'Deadline' section of the Property Editor._ -11. Finally, Drag a **Send E-Mail** Activity from the Activities Palette and drop it on the connection between **Request for Feedback** and **Complete Appointment** End Activity. +11. Finally, drag a **Send E-Mail** Activity from the Activities Palette and drop it on the connection between **Request for Feedback** and **Complete Appointment** End Activities. -12. In the Property Editor. - - Under Identification, Set the Name to **Send Thank You Note To Patient** +12. In the Property Editor, enter/select the following: + - Identification > Name: **Send Thank You Note To Patient** - Under Settings, - - Set the **To** property in the Settings to **&PATIENT_EMAIL.** - - Set the **Subject** to **Thank You!** - - Set the **Body Plain Text** as shown below + - To: **&PATIENT_EMAIL.** + - Subject: **Thank You!** + - Body Plain Text: Enter as given below. ``` @@ -644,13 +670,12 @@ Going back to our flowchart, at this point the Workflow waits for the appointmen ![create and config send email](./images/create-config-send-email.png " ") -13. Save the changes by clicking the **Save** button. +13. Click **Save**. At this point, our Appointment Workflow model is **Complete!**. -14. At this point, our Appointment Workflow model is **Complete!** ## Summary -You have successfully created and configured the workflow for the Doctor's Appointment Made Easy application. +You have successfully created and configured the workflow for the 'Doctor's Appointment Made Easy!' application. ### What's Next In the next section, you will create pages in the application that will utilize this workflow. diff --git a/apex-workflows/add-activities-connection/images/config-switch-activity3.png b/apex-workflows/add-activities-connection/images/config-switch-activity3.png index 068b4fe6..6a33eb10 100644 Binary files a/apex-workflows/add-activities-connection/images/config-switch-activity3.png and b/apex-workflows/add-activities-connection/images/config-switch-activity3.png differ diff --git a/apex-workflows/add-human-tasks/4-add-human-tasks.md b/apex-workflows/add-human-tasks/4-add-human-tasks.md index 97155b05..99ef4aa0 100644 --- a/apex-workflows/add-human-tasks/4-add-human-tasks.md +++ b/apex-workflows/add-human-tasks/4-add-human-tasks.md @@ -2,26 +2,25 @@ ## Introduction -In this hands-on lab, we will explore the process of creating Human Tasks using the Approvals Component in Oracle APEX. Human Tasks are essential steps in our Doctor Appointment Workflow, requiring manual approval, rejection, or completion by either the Doctor or Patient. Specifically, we will focus on tasks such as **Send Appointment Request To Doctor**, **Raise Invoice Request For Patient**, and **Raise Feedback Request For Patient**. +In this lab, we will explore the process of creating Human Tasks using the Approvals Component in Oracle APEX. Human Tasks are essential steps in our Doctor Appointment Workflow, requiring manual approval, rejection, or completion by either the Doctor or the Patient. Specifically, we will focus on tasks such as **Send Appointment Request To Doctor**, **Raise Invoice Request For Patient**, and **Raise Feedback Request For Patient**. -These steps, therefore, correspond to Human Task Activities. Before using them in the workflow, we use the Approvals Component to create the task definitions as follows. +The above steps correspond to Human Task Activities. Before using them in the workflow, we use the Approvals Component to create the task definitions. ### Objectives -In this lab, you will learn how to create Human Tasks to -- Sending Appointment Request To Doctor +In this lab, you will learn how to create Human Tasks to: +- Send Appointment Request To Doctor - Raise Invoice Request For Patient - Raise Feedback Request For Patient Estimated Time: 20 minutes ### Prerequisites -1. Access to Oracle APEX. -2. Ensure that you have completed the Previous labs. +- All the previous Labs have been completed. ## Task 1: Create Task Definition for Appointment Request -1. Navigate to **Shared Components**. +1. In the Page Designer, navigate to **Shared Components**. ![Navigate to Shared Components](./images/navigate-to-shared-components.png " ") @@ -29,86 +28,93 @@ Estimated Time: 20 minutes ![Click Task Definitions](./images/click-task-definitions.png " ") -3. click **Create**. +3. Click **Create**. ![Click Create](./images/click-create-approvals.png " ") -4. In the Create Task Definition Wizard, enter the following details and Click **Create**. - - For **Name**, enter **Appointment Request**. - - For **Subject**, enter **Appointment for &PATIENT\_NAME. on &APPOINTMENT\_DATE.** - - Set **Priority** to **3-Medium**. +4. In the Create Task Definition Wizard, enter the following details and click **Create**. + - Name: **Appointment Request** + - Subject: **Appointment for &PATIENT\_NAME. on &APPOINTMENT\_DATE.** + - Priority: **3-Medium** ![Creating Task Definition](./images/create-task-definition.png " ") -5. In the Edit Task Definition page, notice that the Task Details Page Number is empty. Click on the **Create Task Details** Page button to generate the details page for this task. You get a popup dialog asking if the next available page number should be used. Click **OK**. You will find that the Task Details Page Number is replaced by the Task Details Page URL containing the link to the generated Details Page. +5. In the Task Definition page, notice that the Task Details Page Number is empty. Click **Create Task Details Page** button to generate the details page for this task. + + You get a popup dialog asking if the next available page number should be used. Click **OK**. ![Creating Task Details page](./images/create-task-details-page.png " ") ![Creating Task Details page confirm](./images/create-task-details-page1.png " ") - You will find that the Task Details Page Number is replaced by the Task Details Page URL containing the link to the generated Details Page. +6. You will see that the Task Details Page Number is replaced by the Task Details Page URL containing the link to the generated Details Page. Click **Apply Changes**. -6. In the Task Definitions Page, Click **Appointment Request**, and then in the **Appointment Request** task definition, under settings, - - For Actions Source, select **SQL Query** - - Under **Actions SQL Query**, Copy and paste the below SQL Query +6. In the Task Definitions Page, click **Appointment Request**. + ![Select Appoint Request](./images/select-appt-request.png " ") - ``` - - select * from doctor where dno = :APEX$TASK_PK - - ``` +7. In the **Appointment Request** task definition page, under settings, enter/select the following: + - Actions Source: **SQL Query**. + - Actions SQL Query: copy and paste the below SQL Query: - ![Select Appoint Request](./images/select-appt-request.png " ") + ``` + + select * from doctor where dno = :APEX$TASK_PK + + ``` + + ![Configure Actions Source](./images/enter-actions-source.png " ") This step ties our task to the system of records, in this case, the doctor's records. - > **Note:** _APEX$TASK_PK is a substitution string holding the primary key value of the system of records (in this case, the doctor's employee number)._ + > **Note:** _APEX$TASK\_PK is a substitution string holding the primary key value of the system of records (in this case, the doctor's employee number)._ -7. In the **Appointment Request** Task Definition, navigate to **Participants** Section, and then under add Task Participants, - - Set Participant Type as **Potential Owner** - - Set Value Type as **Expression**. - - Set the Value field to enter **:DNAME** (where **DNAME** refers to the DNAME column in the DOCTOR Table). +8. In the **Appointment Request** Task Definition, navigate to **Participants** section, and click **Add Row**. Enter the following details: + - Participant Type: **Potential Owner** + - Value Type: **Expression** + - Value: **:DNAME** (where **DNAME** refers to the DNAME column in the DOCTOR Table). ![Add Potential owner to the Task](./images/add-task-participant.png " ") -8. Under Task Parameters, Add the below Parameters by clicking **Add Row** and then click **Apply Changes** to save the Task Definition. +9. Under Task Parameters, add the below Parameters by clicking **Add Row** and then, click **Apply Changes** to save the Task Definition. | Parameter Name | Label | |--------------------|------------| | APPOINTMENT_DATE | Appointment Date | | PATIENT_DESC | Consultation Form| | PATIENT_NAME | Patient name | + {: title="List of Parameters to be added for the Task Definition"} ![Add Task Parameters](./images/add-task-parameters.png " ") -Similarly, now create the task definitions for the Invoice Request and Feedback Request Tasks to be raised for the patient. -## Task 2: Creating Task Definitions for Invoice Requests +## Task 2: Create Task Definitions for Invoice Requests -1. Navigate to **Shared Components**, Under **Workflows and Automations**, select **Task Definitions**. Then click **Create**. +1. Navigate to **Shared Components**. Under **Workflows and Automations**, select **Task Definitions**. Then, click **Create**. ![Click Create](./images/click-create-task-def.png " ") -2. In the Create Task Definition Wizard, enter the following details and Click **Create**. - - For **Name**, enter **Invoice Request**. - - For **Type**, select **Action Task**. - - For **Subject**, enter **Invoice for &PATIENT_USERNAME. for consultation on &SCHEDULE.** - - Set **Priority** to **3-Medium**. +2. In the Create Task Definition Wizard, enter the following details and click **Create**. + - Name: **Invoice Request** + - Type: **Action Task** + - Subject: **Invoice for &PATIENT_USERNAME. for consultation on &SCHEDULE.** + - Priority: **3-Medium** ![Creating Task Definition](./images/create-invoice-request.png " ") -3. In the Edit Task Definition page, notice that the Task Details Page Number is empty. Click on the **Create Task Details** Page button to generate the details page for this task. You get a popup dialog asking if the next available page number should be used. Click **OK**. You will find that the Task Details Page Number is replaced by the Task Details Page URL containing the link to the generated Details Page. +3. In the Task Definition page, notice that the Task Details Page Number is empty. Click **Create Task Details Page** to generate the details page for this task. + + You get a popup dialog asking if the next available page number should be used. Click **OK**. ![Creating Task Details page](./images/create-task-details1.png " ") ![Creating Task Details page confirm](./images/create-task-details2.png " ") - You will find that the Task Details Page Number is replaced by the Task Details Page URL containing the link to the generated Details Page. +4. You will find that the Task Details Page Number is replaced by the Task Details Page URL containing the link to the generated Details Page. Click **Apply Changes**. -4. In the Task Definitions Page, Click **Invoice Request** and then in the **Task Definition: Invoice Request**, configure the following, - - Under Settings, - - For Actions Source, Select **SQL query**, - - For **Actions SQL Query**, provide the following SQL statement. This step ties our task to the system of records, in this case, the doctor's records. +5. In the Task Definitions Page, click **Invoice Request** to open the task definition in edit mode. Configure the following: + - Under Settings: + - Actions Source: **SQL query**, + - Actions SQL Query: Provide the following SQL statement: ``` select * from appointment where BOOKING_ID = :APEX$TASK_PK @@ -118,70 +124,74 @@ Similarly, now create the task definitions for the Invoice Request and Feedback ![Select Invoice Request](./images/select-invoice-request.png " ") ![Configure Actions Source for Invoice Request](./images/set-invoice-sql-query.png " ") - > **Note:** _APEX$TASK_PK is a substitution string holding the primary key value of the system of records (in this case, the doctor's employee number)._ + > **Note:** _APEX$TASK\_PK is a substitution string holding the primary key value of the system of records (in this case, the doctor's employee number)._ -5. In the **Invoice Request** Task Definition, navigate to **Participants** Section, and then under **Participants**, - - Set Participant Type as **Potential Owner** - - Set Value Type as **Static**. - - Set the Value field to enter **&PATIENT_USERNAME.** +6. In the **Invoice Request** Task Definition, navigate to **Participants** section, and then edit the row with the following: + - Participant Type: **Potential Owner** + - Value Type: **Static** + - Value: **&PATIENT_USERNAME.** ![Add Potential owner to the Task](./images/add-invoice-participant.png " ") -6. Under Task Parameters, Add the below Parameters by clicking **Add Row** and then click **Apply Changes** to save the Task Definition. +7. Navigate to Parameters tab. Add the below Parameters by clicking **Add Row** and then click **Apply Changes** to save the Task Definition. - | Parameter Name | - |--------------------| - | DOCTOR_NAME | - | FEES | - | PATIENT_NAME | + | Static ID | Label | + |---------------|---------| + | DOCTOR\_NAME | Doctor Name | + | FEES | Fees | + | PATIENT\_NAME | Patient Name | + {: title="List of Task Parameters to be added"} ![Add Task Parameters](./images/add-invoice-parameters.png " ") -## Task 3: Creating Task Definitions for Feedback Request +## Task 3: Create Task Definitions for Feedback Request -1. Navigate to **Shared Components**, Under **Workflows and Automations**, select **Task Definitions**. Then click **Create**. +1. Navigate to **Shared Components**. Under **Workflows and Automations**, select **Task Definitions**. Then, click **Create**. ![Click Create](./images/create-task-def-3.png " ") -2. In the Create Task Definition Wizard, enter the following details and Click **Create**. - - For **Name**, enter **Feedback Request**. - - For **Type**, select **Actions Task**. - - For **Subject**, enter **Feedback for Consultation on &SCHEDULE.** - - Set **Priority** to **3-Medium**. +2. In the Create Task Definition Wizard, enter the following details and click **Create**. + - Name: **Feedback Request** + - Type: **Actions Task** + - Subject: **Feedback for Consultation on &SCHEDULE.** + - Priority: **3-Medium** ![Creating Task Definition](./images/create-feedback-request.png " ") -3. In the Edit Task Definition page, notice that the Task Details Page Number is empty. Click on the **Create Task Details** Page button to generate the details page for this task. You get a popup dialog asking if the next available page number should be used. Click **OK**. You will find that the Task Details Page Number is replaced by the Task Details Page URL containing the link to the generated Details Page. +3. In the Edit Task Definition page, notice that the Task Details Page Number is empty. Click **Create Task Details Page** to generate the details page for this task. You get a popup dialog asking if the next available page number should be used. Click **OK**. ![Creating Task Details page](./images/create-task-details-page3.png " ") - You will find that the Task Details Page Number is replaced by the Task Details Page URL containing the link to the generated Details Page. +4. You will find that the Task Details Page Number is replaced by the Task Details Page URL containing the link to the generated Details Page. Click **Apply Changes**. -4. In the Task Definitions Page, Click **Feedback Request** and then configure the Action Source by selecting **SQL Query** and providing the following SQL statement. This step ties our task to the system of records, in this case, the doctor's records. +5. In the Task Definitions Page, click **Feedback Request** to open the task definition in edit mode. Configure the following: + - Under Settings: + - Actions Source: **SQL query**, + - Actions SQL Query: Provide the following SQL statement: ``` select * from appointment where BOOKING_ID = :APEX$TASK_PK ``` - ![Configure Actions Source for Feedback Request](./images/set-feedback-sql-query.png " ") - > **Note:** _APEX$TASK_PK is a substitution string holding the primary key value of the system of records (in this case, the doctor's employee number)._ + > **Note:** _APEX$TASK\_PK is a substitution string holding the primary key value of the system of records (in this case, the doctor's employee number)._ -5. In the **Feedback Request** Task Definition, navigate to **Participants** Section, and then under add Task Participants, - - Set Participant Type as **Potential Owner** - - Set Value Type as **Static**. - - Set the Value field to enter **&PATIENT_USERNAME.** +6. In the **Feedback Request** Task Definition page, navigate to **Participants** tab, and then edit the row with the following values: + - Participant Type: **Potential Owner** + - Value Type: **Static** + - Value: **&PATIENT_USERNAME.** ![Add Potential owner to the Task](./images/add-feedback-participant.png " ") -6. Under Task Parameters, Add the below Parameters by clicking **Add Row** and then click **Apply Changes** to save the Task Definition. +7. Under Task Parameters, add the below Parameter by clicking **Add Row** and then click **Apply Changes** to save the Task Definition. - | Parameter Name | - |--------------------| - | BOOKING_ID | + | Static ID | Label | + |--------------|--------| + | BOOKING_ID | Booking Id | + {: title="List of Task Parameter(s) to be added"} ![Add Task Parameters](./images/add-feedback-parameter.png " ") diff --git a/apex-workflows/create-pages/6-creating-pages.md b/apex-workflows/create-pages/6-creating-pages.md index 945397fb..448f91a5 100644 --- a/apex-workflows/create-pages/6-creating-pages.md +++ b/apex-workflows/create-pages/6-creating-pages.md @@ -1,4 +1,4 @@ -# Add Pages to the Application +# Create Pages in the Application ## Introduction @@ -6,8 +6,8 @@ In this hands-on lab, you will create a page for collecting new appointment requ ### Objectives -In this lab, you will learn how to - - Create the New Appointments pages +In this lab, you will learn how to: + - Create the New Appointments page - Create the Patient Tasks page - Create the Doctors Task page - Modify the Task Details page @@ -16,12 +16,11 @@ In this lab, you will learn how to Estimated Time: 20 minutes ### Prerequisites -1. Access to Oracle APEX. -2. Ensure that you have completed the Previous labs. +- All the previous Labs have been completed. ## Task 1: Create the New Appointments Page -Now that the Workflow is created let us create the Page that the Hospital Staff will use to Submit a New Appointment. +Now that the Workflow is created, let us create the Page that the Hospital Staff will use to Submit a New Appointment. 1. Navigate to your application by clicking on **Application ID **. Alternatively, you can also navigate by clicking the App Builder icon for your workspace and selecting **Doctor Appointments Made Easy!** Application. @@ -30,54 +29,60 @@ Now that the Workflow is created let us create the Page that the Hospital Staff 2. Click **Create Page**. ![click create page](./images/create-page.png " ") -3. For Create a Page: - - select Page Type - under **Component** and then select **Blank Page**. +3. In the Create a Page wizard, select **Blank Page**. ![select blank page](./images/select-blank-page.png " ") -4. For Page Attributes, enter the following: - - For Page Name, enter **New Appointment** - - Under **Navigation** - - For **Breadcrumb**, Set it to **Yes**. - - For **Breadcrumb Parent Entry** select **Home (Page 1)** +4. For Page Attributes, enter/select the following: + - Name: **New Appointment** + - Under Navigation: + - Use Breadcrumb: Toggle the button to **ON** + - Breadcrumb Parent Entry: **Home (Page 1)** + Click **Create Page**. ![Configure blank page](./images/create-blank-page.png " ") -5. In the **Page Designer**, right click on body and click **Create Region**. +5. In the Page Designer, right-click on body and select **Create Region**. ![Create a region](./images/create-region1.png " ") -6. In the Property Editor, under Identification, Change the Title to **Patient Appointment Details**. +6. In the Property Editor, for Identification > Title, enter **Patient Appointment Details**. ![Create a region](./images/configure-static-content.png " ") -7. In the rendering pane, right click on **Patient Appointment details** and then click **Create Page Item**. +7. In the rendering pane, right-click on **Patient Appointment details** and then select **Create Page Item**. ![Create page item](./images/create-page-item.png " ") -8. Select the newly created item in the Rendering Tree, and then in the property editor, do the following changes. - - Under Identification, - - Change the **Name** to **P5_NAME** - - Set **Type** as **Text Field** +8. Select the newly created item in the Rendering Tree, and then in the property editor, enter/select the following: + - Under Identification: + - Name: **P5_NAME** + - Type: **Text Field** ![Create page item](./images/create-name-item.png " ") -9. Similarly create the Items **P5\_EMAIL**, **P5\_DESC**, **P5\_APPT\_DATE**, **P5\_DOC** and **P5\_AGE** under **Patient Appointment details** Region. +9. Similarly, create the following Items under **Patient Appointment details** Region: + - **P5\_EMAIL** + - **P5\_DESC** + - **P5\_APPT\_DATE** + - **P5\_DOC** + - **P5\_AGE** -10. For **P5\_EMAIL**, in the property editor, - - set the type as **Text Field** - - under settings, - - change the **Subtype** to **E-Mail**. +10. For **P5\_EMAIL**, in the property editor, enter/select the following: + - Type: **Text Field** + - Settings > Subtype: **E-Mail** ![Create page item](./images/create-email-item.png " ") -11. For **P5_DESC**, in the property Editor, perform the following changes. +11. For **P5_DESC**, in the property Editor, perform the following changes: - Under Identification, - - Change the name to **P5_DESC** - - Set Type as **Select List** - - Change the label to **Problem**. + - Name: **P5_DESC** + - Type: **Select List** + - Label: **Problem** - Under List of Values, - - Set the **Type** as **Static Values**. - - For **Static Values**, select **Display1,Display2** and then enter the following under Display and Return. + - Type: **Static Values** + - Static Values: **Display1,Display2** + + Enter the following under Display and Return values: | Display Value | Return Value | | --- | --- | @@ -87,144 +92,145 @@ Now that the Workflow is created let us create the Page that the Hospital Staff | Gastroenteric | GASTRO | | Cardiac | CARDIOLOGY | | General | GENERAL | + {: title="Display and Return Values for List of Values"} ![create desc item](./images/create-desc-item.png " ") -12. For **P5\_APPT\_DATE**, in the property Editor perform the following changes. - - Under Identification, - - Set Type as **Date Picker** - - Set the Label as **Appointment Date** - - Under Appearance, set the Format Mask as **DD-MON-YYYY HH24:MI:SS** +12. For **P5\_APPT\_DATE**, in the property editor, enter/select the following: + - Identification > Type: **Date Picker** + - Label: **Appointment Date** + - Appearance > Format Mask: **DD-MON-YYYY HH24:MI:SS** ![create Appt Date item](./images/create-appt-date-item.png " ") -13. For the **P5_DOC** Page Item, In the property editor, perform the following steps. - - Under Identification, - - specify the type as **Popup LOV** - - Set the Label as **Doctor** - - Under List of Values, - - Set the **Type** as **SQL Query** and then specify the **List Of Values** using the following SQL Query +13. For the **P5_DOC** Page Item, in the property editor, enter/select the following: + - Identification > Type: **Popup LOV** + - Label: **Doctor** + - Under List of Values: + - Type: **SQL Query** + - SQL Query: Enter the following SQL Query: ``` select dname from doctor where specialization = :P5_DESC ``` - - Under **Cascading List of Values**, Set the Parent Item(s) as **P5\_DESC** using the Item Picker. + - Cascading List of Values > Parent Item(s): **P5\_DESC** + ![create Appt Date item](./images/create-doc-item.png " ") -14. Similarly, create **P5_AGE** as **Text field**. +14. Similarly, create **P5_AGE** with Type: **Text field**. -15. Now, right click on **Patient Appointment Details** and click **Create Button**. +15. Now, right-click on **Patient Appointment Details** and select **Create Button**. ![create button](./images/create-button.png " ") -16. Select the newly created button, and then in the property editor, do the following changes. - - Under Identification, Set the name as **Submit**. - - Under Layout, for Position, Select **Create**. - - Under Appearance, set **Hot** to **Yes**. +16. Select the newly created button, and then in the property editor, enter/select the following: + - Identification > Name: **Submit** + - Layout > Position: **Create** + - Appearance > Hot: Toggle the button to **ON** ![configure button](./images/create-button1.png " ") ## Task 2: Create and Configure Page Process -1. In the **Left Pane**, navigate to the **Processing Tab**. +1. In the Left Pane, navigate to the **Processing** Tab. -2. In the **Processing Tab**, right click on **Processing** and click **Create Process**. +2. In the Processing Tab, right-click on **Processing** and select **Create Process**. ![create page process](./images/click-create-process.png " ") -3. Select the newly created Page Process, and then in the property editor, do the following changes. - - Under Identification, - - Set the **Name** as **Doctor Appointment Workflow**. - - Set the **Type** as **Workflow**. - - Under Settings, - - Set the **Type** as **Start** - - Set the **Definition** as **Doctors Appointment**. - - For **Details Primary Key**, select **P5_DOC**. - - For Success message, enter **Appointment Submitted Successfully!**. +3. Select the newly created Page Process, and then in the property editor, enter/select the following: + - Under Identification: + - Name: **Doctor Appointment Workflow** + - Type: **Workflow** + - Under Settings: + - Type: **Start** + - Definition: **Doctors Appointment** + - Details Primary Key: **P5_DOC**. + - Success message: **Appointment Submitted Successfully!** ![create workflow process](./images/create-workflow-process.png " ") -4. Now, set Parameters for the Workflow Page Process. Under **Submit Appointment Workflow** in the Processing section, Click on **Patient Age** and in the **Property Editor**, - - under Value, Set type as **Item** and **Item** value to **P5_AGE** +4. Now, configure Parameters for the Workflow Page Process. In the Processing tab, under **Doctor Appointment Workflow** , select **Patient Age**. In the property editor, enter/select the following: + - Value > Type: **Item** + - Item > **P5_AGE** ![create workflow process](./images/configure-process-param.png " ") -5. Similarly, Set the remaining parameters under **Submit Appointment Workflow** as follows: +5. Similarly, set the remaining parameters under **Doctor Appointment Workflow** as follows: - Set **Patient Email** as Item **P5\_EMAIL** - Set **Patient Name** as Item **P5\_NAME** - Set **Problem** as Item **P5\_DESC** - Set **Request Date** as Item **P5\_APPT\_DATE** -6. Click **Save** to save the changes. +6. Click **Save**. -## Task 3: Creating the Patient and Doctor Tasks Page +## Task 3: Create the Patient and Doctor Tasks Page -Our application has two entry points for Patients. First, to confirm an invoice request. Second, to provide feedback. For this, we need to create a Unified Task List for Patients to act on. +Our application has two entry points for Patients: First, to confirm an invoice request and second, to provide feedback. For this, we need to create a Unified Task List for Patients' tasks. -Go to the Application Home and click on Create Page. In the Create Page Wizard, select Unified Task List. -1. Click **+ (Plus) Icon** on the right-above corner of the page designer. Then select **Page** from the drop-down. +1. Click **+ (Plus) Icon** on the top-right corner of the page designer. Then, select **Page** from the drop-down. ![click page](./images/click-create-page.png " ") -2. In the **Create a Page** dialog, Under **Component**, Select **Unified Task List** and click **Next** +2. In the Create a Page dialog, under **Component**, select **Unified Task List**. ![Select Unified Task List](./images/select-unified-tasks.png " ") 3. Specify the following page attributes: - - For Page Number - Type 6 + - Page Number: **6** - - For Name - Type **Patient Tasks** + - Name: **Patient Tasks** - - For Report Context - Select **My Tasks** + - Report Context: **My Tasks** - - For Breadcrumb, set it to **Yes**. + - Use Breadcrumb: Toggle the Button to **ON** - - For **Breadcrumb Parent Entry**, Set it to **Home (Page 1)**., + - Breadcrumb Parent Entry: **Home (Page 1)** - Click **Create Page**. A unified Task List page was created. + Click **Create Page**. A unified Task List page is created. ![create patient tasks](./images/create-patient-tasks.png " ") 4. Our application has 1 entry point for Doctors. Doctors need to log in to approve or reject appointment requests. For this, we will create a Doctor Tasks page. This will also be a Unified Task List page for Doctors to act on the tasks assigned to them. -5. To create another Unified Task list page, Again Click Application ID on the top left corner of the page designer. Application Home page appears. + To create another Unified Task list page, click **Application ID** on the top left corner of the page designer. Application Home page appears. -6. Click **Create Page** button. Create Application wizard appears. +6. Click **Create Page**. Create Application wizard appears. -7. Under Components, Select Unified Task List and click **Next** +7. Under Component, select **Unified Task List**. ![Select Unified Task List](./images/select-unified-tasks1.png " ") 8. Specify the following page attributes: - - For Page Number - Type 7 + - Page Number: **7** - - For Name - Type **Doctor Tasks** + - Name: **Doctor Tasks** - - For Report Context - Select **My Tasks** + - Report Context: **My Tasks** - Click **Create Page**. A unified Task List page was created. + Click **Create Page**. A unified Task List page is created. ![create-doctor-tasks-page](./images/create-doctor-tasks.png " ") -## Task 4: Modify the 3 Task Details Pages +## Task 4: Modify the Task Details Pages -Our Application has 3 Task Definitions - Appointment Request, Invoice Request, and Feedback Request. For each of them, we had generated a Task Details page. In this task, we will rename the Pages so that they appear more meaningful in the Application. +Our Application has 3 Task Definitions - Appointment Request, Invoice Request, and Feedback Request. For each of them, we have created a Task Details page. In this task, we will rename the Pages so that they appear more meaningful in the Application. 1. In the **Doctors Appointment Made Easy!** application, navigate to **Shared Components** and select **Task Definitions**. ![select task definitions](./images/select-task-def.png " ") -2. Under the **Task Definitions** page, Click on Appointment Request. +2. In the Task Definitions page, click **Appointment Request**. ![select appointment request](./images/select-appointment-req.png " ") -3. In the **Task Definition Editor**, note the page number in the Task Details URL (f?p=&APP\_ID.:2:&SESSION.::&DEBUG.:RP,2:P2\_TASK\_ID:&TASK\_ID.). This points to Page 2. +3. In the Task Definition Editor, note the page number in the **Task Details URL** (f?p=&APP\_ID.:2:&SESSION.::&DEBUG.:RP,2:P2\_TASK\_ID:&TASK\_ID.). This points to Page 2. ![select appointment request](./images/configure-task-def.png " ") @@ -232,61 +238,68 @@ Our Application has 3 Task Definitions - Appointment Request, Invoice Request, ![navigate to page 2](./images/navigate-to-page-2.png " ") -5. Now, change the **Page Name** and **Title** of Page 2 to **Appointment Request Details**. +5. Now, edit the following in the Property Editor: + - Name: **Appointment Request Details** + - Title: **Appointment Request Details** ![change title page2](./images/change-title-page2.png " ") -6. Click **Save** to save your changes. +6. Click **Save**. 7. You now need to change the Invoice Request Details Page. -8. Navigate to the **Invoice Request** Task Definition from Shared Components and similarly check the page number for the Task Details. The **Invoice Request** Task Definition points to Page 3. + Navigate to **Shared Components > Task Definition > Invoice Request** and similarly check the page number for the Task Details. The **Invoice Request** Task Definition points to Page 3. -9. Navigate to your Application home page and click **Page 3**. +8. Navigate to your Application home page and click **Page 3**. -10. Now, change the **Page Name** and **Title** of Page 3 to **Invoice Details**. +9. Now, edit the following in the Property Editor: + - Name: **Invoice Details** + - Title: **Invoice Details** ![change title page2](./images/change-title-page3.png " ") -11. Notice that the rendering region has a **Developer Information** region in the Invoice Details Page. Right-click on the **Developer Information** region and click **Delete**. +10. In the rendering tree, navigate to **Invoice Details > Components > Content Body > Developer Information**. Right-click on the **Developer Information** region and click **Delete**. ![delete developer info](./images/delete-developer-info1.png " ") -12. In the rendering Tree, click **Details** region and then modify the Title of **Details Classic Report** region to **View Invoice**. +11. In the rendering tree, select **Details** classic report region. In the Property editor, edit the Title to **View Invoice**. ![change details title](./images/change-details-title.png " ") > **Note:** _Developer Information region is autogenerated for Action Tasks (non-approval). This can be removed/customized depending on the application use-case._ -13. Click the **Save** Button to save your changes. +12. Click **Save**. -14. Navigate to the **Feedback Request** Task Definition from Shared Components and similarly check the page number for the Task Details. The **Feedback Request** Task Definition points to Page 4. +13. Navigate to **Shared Components > Task Definition > Feedback Request** and similarly check the page number for the Task Details. The **Feedback Request** Task Definition points to Page 4. -15. Navigate to your Application home page and click **Page 4**. And then, change the **Page Name** and **Title** of Page 4 to **Feedback Details**. +14. Navigate to your Application home page and click **Page 4**. + Now, edit the following in the Property Editor: + - Name: **Feedback Details** + - Title: **Feedback Details** ![change details title](./images/change-feedback-title.png " ") -16. Notice there in the rendering region, there is a **Developer Information** region in the Feedback Details Page. Right-click on the **Developer Information** region and click **Delete**. +15. In the rendering tree, navigate to **Feedback Details > Components > Content Body > Developer Information**. Right-click on the **Developer Information** region and click **Delete**. ![delete developer info](./images/delete-feedback-devinf.png " ") -17. In the rendering Tree, click **Details** region and then modify the Title of **Details Classic Report** region to **View Appointment Details**. +16. In the Rendering Tree, click **Details** region. In the Property Editor, for Title, enter **View Appointment Details**. ![change details title](./images/edit-details-region.png " ") -18. In the Details Page, the patient should be able to fill out a Feedback form and submit it. On submission it will create an entry in the **PATIENT_FEEDBACK** table for the particular doctor. We will customize the Feedback Details Page as follows. +17. In the Details Page, the patient should be able to fill out a Feedback form and submit it. On submission, it will create an entry in the **PATIENT_FEEDBACK** table for the particular doctor. We will customize the Feedback Details Page as follows: -19. In the rendering tree, right click on **View Appointment Details** and click **Create Region Below**. + In the rendering tree, right click on **View Appointment Details** and click **Create Region Below**. ![create region below](./images/create-region-below.png " ") -20. Select the newly created region in the Rendering Tree, and then in the property editor, do the following changes. - - Under Identification, - - Change the title to **Your Feedback** - - Set Type as **Form** - - Under Source, - - Set **Table** as **APPOINTMENT**. - - For Where Clause, set it as Below +18. Select the newly created region in the Rendering Tree, and then in the property editor, enter/select the following: + - Under Identification: + - Title: **Your Feedback** + - Type: **Form** + - Under Source: + - Table: **APPOINTMENT** + - Where: ``` booking_id = :P4_BOOKING_ID @@ -294,27 +307,28 @@ Our Application has 3 Task Definitions - Appointment Request, Invoice Request, ``` ![configure feedback](./images/configure-feedback.png " ") -21. In the Rendering Tree, select the Page Items **P4\_FEE** and **P4\_WORKFLOW\_ID** and then change the Identification Type to **Hidden** in the Property Editor. +19. In the Rendering Tree, select the Page Items **P4\_FEE** and **P4\_WORKFLOW\_ID**. In the Property Editor, for Identification > Type, select **Hidden**. ![set items as hidden](./images/set-items-to-hidden.png " ") -22. In the rendering Tree, select **P4_SCHEDULE** and then in the property editor, under **Appearance**, set format mask to **DD-MON-YYYY HH24:MI:SS**. +20. In the rendering Tree, select **P4_SCHEDULE** and then in the property editor, for Appearance > Format Mask, select **DD-MON-YYYY HH24:MI:SS**. ![set items as hidden](./images/update-schedule-item.png " ") -23. Now, create two new page items under the **Your Feedback** region. - -24. In the Rendering tree, right click on **Your Feedback** or **Region Body** under that and click **Create Page Item**. +21. Now, create two new page items under the **Your Feedback** region. + + In the Rendering tree, right-click **Region Body** and click **Create Page Item**. ![create page item](./images/create-page-item1.png " ") -25. Select the newly created page item in the Rendering Tree, and then in the property editor, do the following changes. +22. Select the newly created page item in the Rendering Tree, and then in the property editor, enter/select the following: - Under Identification, - - Change the name to **P4_RATING** - - Set Type as **Radio Group** + - Name: **P4_RATING** + - Type: **Radio Group** - Under List of Values, - - For Type, select **Static Values** - - For **Static Values**, select **Display1,Display2** and then enter the following under Display and Return. + - Type: **Static Values** + - Static Values: **Display1,Display2** + - Enter the following under Display and Return: | Display Value | Return Value | | --- | --- | @@ -322,18 +336,21 @@ Our Application has 3 Task Definitions - Appointment Request, Invoice Request, | Good | 2 | | Satisfactory | 3 | | Unsatisfactory | 4 | + {: title="Display and Return Values for List of Values} ![create page item](./images/configure-rating.png " ") -26. Similarly, create a new item **P4_FEEDBACK** and set the type as **Rich Text Editor**. +23. Similarly, create a new item **P4_FEEDBACK** and set the Type as **Rich Text Editor**. ![create page item](./images/configure-feedback1.png " ") -27. Click **Save** to save the changes. +24. Click **Save**. -28. In the Pre-Rendering section, add a new Process above the **Initialize Form Feedback Details** Process and name it **Populate Booking Details in Feedback Form**. +25. In the Pre-Rendering section, add a new Process above the **Initialize Form Feedback Details** Process and name it **Populate Booking Details in Feedback Form**. -29. Select the **Populate Booking Details** and in the Property Editor, set the Process Type as **Execute Code** and enter the following code in the PL/SQL Code section. +26. Select the **Populate Booking Details in Feedback Form** and in the Property Editor, enter/select the following: + - Process Type: **Execute Code** + - PL/SQL Code: Enter the following code: ``` @@ -351,11 +368,13 @@ Our Application has 3 Task Definitions - Appointment Request, Invoice Request, ![create page item](./images/configure-pre-rendering.png " ") -30. In the **Left Pane**, navigate to the **Processing Tab**. +27. In the **Left Pane**, navigate to the **Processing Tab**. -31. In the **Processing Tab**, add a new Process after the **Claim process** and name the newly created process as **Save Feedback**. +28. In the **Processing Tab**, add a new Process after the **Claim process** and name the newly created process as **Save Feedback**. -32. In the Property editor, set the type as **Execute Code**, and then in the PL/SQL section, enter the following. +29. In the Property editor, enter/select the following: + - Type: **Execute Code** + - PL/SQL code: enter the following code snippet: ``` @@ -382,73 +401,75 @@ Our Application has 3 Task Definitions - Appointment Request, Invoice Request, ![create page process](./images/save-feedback.png " ") -33. In Server Side Condition, set **When Button Pressed** as **COMPLETE**. +30. For Server Side Condition > When Button Pressed, select **COMPLETE**. ![when button pressed](./images/button-press.png " ") -34. Click **Save** to save the changes. +31. Click **Save**. ## Task 5: Create the Patient Appointments And Feedbacks Page Now, you need to create a View Only page where patients can log in to view their appointments and the feedback they have left so far. -1. Click **+ (Plus) Icon** on the right-above corner of the page designer. Then select **Page** from the drop-down. +1. Click **+ (Plus) Icon** on the right-above corner of the page designer. Then, select **Page** from the drop-down. ![when button pressed](./images/create-page1.png " ") -2. In the **Create a Page** dialog, Under **Component**, Select **Blank Page** and click **Next** +2. In the Create a Page dialog, select **Blank Page**. - ![Select Unified Task List](./images/create-blank-page1.png " ") + ![Create Page wizard](./images/create-blank-page1.png " ") 3. Specify the following page attributes: - - For Page Number - Type 8 + - Page Number: **8** - - For Name - Type **Patient Appointments And Feedbacks** + - Name: **Patient Appointments And Feedbacks** - - For **Breadcrumb Parent Entry**, Set it to **Home (Page 1)**., + - Breadcrumb Parent Entry: **Home (Page 1)** - Click **Create Page**. A unified Task List page was created. + Click **Create Page**. A Blank page is created. ![create patient tasks](./images/configure-patient-apps.png " ") -4. In Page Designer of the newly created page, right-click on Body and click **Create Region**. +4. In Page Designer of the newly created page, right-click on **Body** and click **Create Region**. ![create patient tasks](./images/create-region2.png " ") -5. In the new Region, go to Property Editor and change the name to Appointments. Change the Type to Comments (under Theme Components). - - Under Identification, - - Change the title to **Appointments** - - Set Type as **Comments** - - Under Source, - - Set the Table Name to **APPOINTMENT** - - Set the **Where Clause** to the below text. - ``` - - patient_username=:APP_USER - - ``` - - Under Appearance, set the Template as **Collapsible** - ![create patient tasks](./images/configure-appointments1.png " ") - -6. In the Rendering Tree, select **Appointments**, and then in the Property editor, select the **Attributes** tab and make the following changes. - - Under **Settings**, - - Set **Comment Text** to **STATUS**. - - Set **User Name** as **DOCTOR\_EMAIL** - - SET **Date** as **SCHEDULE** +5. In the newly created Region, go to Property Editor and enter/select the following: + - Name: **Appointments** + - Type: **Comments** (under Theme Components) + - Under Identification, + - Title: **Appointments** + - Type: **Comments** + - Under Source, + - Table Name:**APPOINTMENT** + - **Where Clause**: + ``` + + patient_username=:APP_USER + + ``` + - Appearance > Template: **Collapsible** + ![create patient tasks](./images/configure-appointments1.png " ") + +6. In the Rendering Tree, select **Appointments**, and then in the Property editor, select the **Attributes** tab and enter/select the following: + - Under Settings, + - Comment Text: **STATUS** + - User Name: **DOCTOR\_EMAIL** + - Date: **SCHEDULE** ![create patient tasks](./images/configure-attr.png " ") -7. In the rendering tree, right click on **Appointments Region**, and then click **Create Region Below**. +7. In the rendering tree, right-click on **Appointments Region**, and then select **Create Region Below**. ![create patient tasks](./images/create-region-below1.png " ") -8. In the property editor, +8. In the Property Editor, enter/select the following: - Under Identification, - - Change title to **Feedbacks** - - Change the Type to **Comments**. + - Title: **Feedbacks** + - Type: **Comments** - Under Source, - - Set **Type** as **SQL Query** - - For **SQL Query**, copy and paste the below SQL. + - Type: **SQL Query** + - SQL Query: copy and paste the below SQL. ``` select ID, @@ -467,15 +488,15 @@ Now, you need to create a View Only page where patients can log in to view their ![configure feedbacks](./images/configure-feedbacks.png " ") -9. In the Rendering Tree, select **Feedbacks**, and then in the Property editor, select the **Attributes** tab and then make the following changes. - - Under **settings**, - - Set **Comment Text** to **FEEDBACK**. - - Set **User Name** as **DNAME** - - SET **Date** as **APPOINTMENT** +9. In the Rendering Tree, select **Feedbacks**. In the Property editor, select the **Attributes** tab and enter/select the following: + - Under Settings, + - Comment Text: **FEEDBACK** + - User Name: **DNAME** + - Date: **APPOINTMENT** ![configure feedbacks attr](./images/configure-feedbacks1.png " ") -10. Click **Save** to Save the changes. +10. Click **Save**. ## Task 6: Create the View Appointment Workflows Page @@ -484,23 +505,23 @@ Finally, we need the page that the Hospital Management Staff will use to monitor We use the Workflow Console and Details pages with **Initiated By Me** report context, which allows a logged-in user to view all Workflows Initiated by him or her. -> **Tech Tips:** _The Workflow Console allows workspace users to view and manage their workflow instances, including My Workflows for workflow owners, Admin Workflows for workflow administrators, and Initiated by Me for workflow initiators. When configuring the Workflow Console, you have different Report Contexts to choose from. You will learn about these in subsequent blogs._ +> **Note:** _The Workflow Console allows workspace users to view and manage their workflow instances, including My Workflows for workflow owners, Admin Workflows for workflow administrators, and Initiated by Me for workflow initiators. When configuring the Workflow Console, you have different Report Contexts to choose from. You will learn about these in subsequent blogs._ -1. To create the Workflow Console and Details pages, On the Application home page, select Create Page. +1. To create the Workflow Console and Details pages, on the Application home page, select **Create Page**. -2. Under Components, select **Workflow Console**. +2. Under Component, select **Workflow Console**. ![configure feedbacks attr](./images/create-workflow-console.png " ") -3. In the Create Workflow Console wizard, +3. In the Create Workflow Console wizard: - Under Page Definition, - - Set Name as **Monitor Appointment Workflows** - - Select **Report Context** to **Initiated By Me**. - - For the Workflow Details page, set the Form Page name as **Appointment Workflow Details** - - Under **Navigation** - - For **Breadcrumb**, Set it to **Yes**. - - For **Breadcrumb Parent Entry** select **Home (Page 1)** - - Set **Parent Region Menu Entry** as **Home**. + - Name: **Monitor Appointment Workflows** + - Report Context: **Initiated By Me** + - Form Page Name: **Appointment Workflow Details**. This is used for the Workflow Details page. + - Under Navigation, + - Use Breadcrumb: Toggle the button to **ON** + - Breadcrumb Parent Entry: **Home (Page 1)** + - Parent Navigation Menu Entry: **Home** ![configure feedbacks attr](./images/config-workflow-console.png " ") 4. Click **Create Page**. @@ -512,7 +533,7 @@ You have successfully created a comprehensive Oracle APEX application for managi ### What's Next -In the next lab, you will run and understand the behaviour of the **Doctor Appointments Made Easy!** application through hands-on activities. You will also perform various tasks to understand the workflow and automation implemented in the application. +In the next lab, you will understand the behaviour of the **Doctor Appointments Made Easy!** application through hands-on activities. You will also perform various tasks to understand the workflow and automation implemented in the application. diff --git a/apex-workflows/create-pages/images/create-blank-page.png b/apex-workflows/create-pages/images/create-blank-page.png index e9925055..3b2f558e 100644 Binary files a/apex-workflows/create-pages/images/create-blank-page.png and b/apex-workflows/create-pages/images/create-blank-page.png differ diff --git a/apex-workflows/create-pages/images/delete-developer-info1.png b/apex-workflows/create-pages/images/delete-developer-info1.png index 9c482620..85027845 100644 Binary files a/apex-workflows/create-pages/images/delete-developer-info1.png and b/apex-workflows/create-pages/images/delete-developer-info1.png differ diff --git a/apex-workflows/create-workflow/3-create-workflow.md b/apex-workflows/create-workflow/3-create-workflow.md index 4618633a..0b974494 100644 --- a/apex-workflows/create-workflow/3-create-workflow.md +++ b/apex-workflows/create-workflow/3-create-workflow.md @@ -2,12 +2,12 @@ ## Introduction -In this hands-on lab, you will learn the process of creating a Doctor Appointment Workflow using Oracle APEX. +In this lab, you learn the process of creating a Doctor Appointment Workflow using Oracle APEX. ### Objectives -In this lab, You will learn how to - - Create the Workflow +In this lab, you learn how to: + - Create a Workflow - Modify the Workflow details - Define Workflow Data - Add Workflow Variables @@ -15,8 +15,7 @@ In this lab, You will learn how to Estimated Time: 20 minutes ### Prerequisites -1. Access to Oracle APEX. -2. Ensure that you have completed the Previous labs. +- All the previous Labs have been completed. ## Task 1: Create the Workflow @@ -27,41 +26,43 @@ To create a Workflow: ![Navigate to Application](./images/navigate-to-application.png " ") ![Click Shared Components](./images/click-shared-components.png " ") -2. Under Workflows and Automations, Select **Workflows** +2. Under Workflows and Automations, select **Workflows**. ![Navigate to Application](./images/select-workflows.png " ") -3. In the Workflows Page, click on **Create**. +3. In the Workflows Page, click **Create**. ![Click Create workflow](./images/click-create-workflow.png " ") -4. This will lead you to the Workflow Designer (Shared Components -> Workflows -> Workflow Definition Page). A new workflow with a Start Activity, Execute Code Activity, and End Activity will be auto-created. +4. This will lead you to the Workflow Designer. A new workflow with a Start Activity, Execute Code Activity, and End Activity will be auto-created. ![Displaying Workflow Designer](./images/workflow-designer-1.png " ") ## Task 2: Modify Workflow Details -1. Change the Workflow Name to **Doctor Appointment** and then in the Property editor, under **Advanced**,set the Static ID to **DOC_APPT**. +1. With Doctor Appointment selected in the rendering tree, enter/select the following in the Property editor: + - Identification > Name: **Doctor Appointment** + - Advanced > Static ID: **DOC_APPT** - ![Change the Workflow name and Static ID](./images/change-workflow-name.png " ") + ![Change the Workflow name and Static ID](./images/change-workflow-name.png " ") -2. Now change the Workflow Name by clicking on New[Dev] and modify the **Workflow Version** from **New** to **1.0**. +2. Now, select **New[Dev]** in the left pane, and in the property editor, for Workflow Version enter **1.0**. ![Change the Workflow Version](./images/create-workflow-version.png " ") -> **Note:** _You may have noticed the label [Dev] next to the version in the tree on the left pane. This means that this version of the Workflow is In Development and all parts of it are editable. We will learn about workflow versioning- Active vs. In Development versions in future blogs in this series._ +> **Note:** _You may have noticed the label [Dev] next to the version in the tree on the left pane. This means that this version of the Workflow is In Development and all parts of it are editable. We will learn about workflow versioning- Active vs. In Development versions in future labs in this workshop._ -3. The Workflow cannot be saved yet as the there are validation errors. Click on the error icon (Yellow exclamation mark) to see the error. +3. The Workflow cannot be saved yet as the there are validation errors. Click on the **error icon (Yellow exclamation mark)** to see the error. ![Check Errors in the Page](./images/check-workflow-errors.png " ") -4. At this point, we will remove this activity since we plan to introduce new specific activities in subsequent sections of this lab. To do this, either right-click on the highlighted RED activity in the Workflow tree and select **Delete**, or click on the three dots at the bottom right corner of the activity in the Diagram. This will open a menu, and you can choose 'Delete' from the options provided. +4. At this point, we will remove this activity since we plan to introduce new specific activities in subsequent sections of this lab. To do this, either right-click on the highlighted RED activity in the Workflow tree and select **Delete**, or click on the three dots at the bottom right corner of the activity in the Diagram. This will open a menu, and you can choose **Delete** from the options provided. ![Delete activity using Tree](./images/delete-activity-tree.png " ") ![Delete activity using workflow designer](./images/delete-activity-designer.png " ") -5. The Workflow now contain just the Start and the End activities. Connect the Start and End activities and then save the Workflow by clicking the **Save** button at the top right corner. +5. The Workflow now contains just the Start and the End activities. Connect the Start and End activities and then click the **Save** button at the top right corner. ![Changes saved successfully](./images/save-workflow.png " ") @@ -73,9 +74,9 @@ To create a Workflow: ## Task 3: Familiarize with Workflow Elements -1. At this stage, let's engage in a hands-on exploration to better understand the fundamental elements and terminology of the workflow. We have introduced the notions of Activities and Connections in the Workflow. Now, let's take a moment to understand the different types of workflow elements and terms such as Activities, Connections, and Connection Types. +1. At this stage, let's explore the fundamental elements and terminology of a workflow. We have introduced the notions of Activities and Connections in the Workflow. Now, let's take a moment to understand the different types of workflow elements and terms such as Activities, Connections, and Connection Types. -2. Refer to the Activity Palette in the Designer for a list of activity types. +2. Refer to the Activity Palette at the bottom in the Designer for a list of activity types. ![Check activities palette](./images/activities-palette.png " ") @@ -91,124 +92,127 @@ To create a Workflow: | Switch | Denotes a fork or conditional branching in a workflow execution. After adding a switch activity, the developer must define branches or connections out of the switch activities with the appropriate conditions specified. | Yes | | Workflow Start | Denotes the Start of a workflow. A workflow model must have exactly one Start Activity. | Yes | | Workflow End | Denotes the End of a workflow. Depending on the End State attribute of this activity, the Workflow is either Completed or Terminated. | Yes | + {: title="List of Activity Types"} - **Connection Types** + | Connection Type | Description | |------------------|--------------------------------------------------------------------------------------------------------------------| | Normal | Connects two activities in the workflow. No conditions. Not applicable for Switch Activities | | Timeout | If an activity has a due date specified, the timeout connection can be used to move the workflow to an alternate target activity in case the current activity execution times out. Not applicable for Switch and Wait activities. | | Error | Allows for efficient error management within the workflow without letting it go into a state of exception. Not applicable for Switch activities. | | Switch connections | Connections leading out of a Switch Activity. They are conditional in nature. | + {: title="List of Connection Types"} -## Task 4: Understand Workflow Data - Parameters, Variables, Activity Variables, and Additional Data +## Task 4: Add Inputs to the Doctor Appointments Workflow -In any business process, managing and utilizing data is crucial. As we delve into the execution of workflows, it becomes essential to understand how data is handled. Workflows can receive input data, and depending on the business requirements, they may also need to access additional data beyond the provided input. Some of this data may be subject to modification during the workflow, and there can be activity-specific data relevant to particular steps in the process. +In this lab, we explore various aspects of workflow data using the example of a medical appointment application that we are building. We will focus on understanding parameters, variables, activity variables, and additional data. -In this hands-on lab, we will explore various aspects of workflow data using the example of a medical appointment application that we are building. We will focus on understanding parameters, variables, activity variables, and additional data. +Referring to the flow chart in Lab 1, illustrating the business logic, the appointment booking process initiates with the Hospital Staff submitting patient details to the system, marking the commencement of the workflow. -Referring to the flow chart illustrating the business logic, the appointment booking process initiates with the Hospital Staff submitting patient details to the system, marking the commencement of the workflow. - - -## Task 5: Adding Inputs to the Doctor Appointments Workflow - -If we look back at the flow chart depicting the business logic, the appointment booking process starts with the Hospital Staff submitting the patient details to the system and this is when the workflow begins. - -1. The inputs to the workflow will be the patient details. In workflow terminlogy, these are called Workflow Parameters - -2. You will define the following parameters for the Doctor Appointment Workflow. +The inputs to the workflow will be the patient details. In workflow terminlogy, these are called **Workflow Parameters**. +You will define the following parameters for the Doctor Appointment Workflow: PATIENT\_NAME, PATIENT\_AGE, PATIENT\_EMAIL, PROBLEM, REQUEST\_DATE -3. To create Workflow Parameters, Right-click on the Doctor Appointment Workflow in the Tree and then click **Create Parameter**. +1. To create Workflow Parameters, right-click on the **Doctor Appointment** Workflow in the tree and select **Create Parameter**. ![Create Parameter](./images/create-parameter.png " ") -4. This adds a Parameter with label "New" in the Workflow Tree. Go to the Property Editor and change - - **Label** to **Patient Name** - - **Static ID** to **PATIENT_NAME** - - Leave the **Data Type** as **VARCHAR2**. +2. This adds a Parameter with a label "New" in the Workflow tree. In the Property Editor, enter/select the following: + - Label: **Patient Name** + - Static ID: **PATIENT_NAME** + - Data Type: **VARCHAR2** ![Configure Patient Name Parameter](./images/create-param-patient-name.png " ") -5. Similarly add the rest of the Parameters. - - For PATIENT_AGE Parameter, select Data Type as Number. - - For REQUEST_DATE, select Data Type as Timestamp with Time Zone. - - Under Application Format Masks, set the Session State Format Mask as **DD-MON-YYYY HH24:MI:SS**. +3. Similarly, add the Parameters given in the table below. - ![Add and Configure Request Date Parameter](./images/add-param-date.png " ") + |Static ID | Label | Data Type | Application Format Masks > Session State Format Mask | + |----------|-------|-------------|----------| + | PATIENT_AGE | Patient Age | Number | | + | REQUEST_DATE | Request Date | Timestamp | DD-MON-YYYY HH24:MI:SS | + | PATIENT_EMAIL | Patient Email | Varchar2 | | + | PROBLEM | Problem | Varchar2 | | + {: title="List of Parameters to be Created"} - - For PATIENT_EMAIL & PROBLEM, leave it to default. + ![Add and Configure Request Date Parameter](./images/add-param-date.png " ") -## Task 6: Use the parameters in the Workflow Subject +## Task 5: Use the parameters in the Workflow Subject The Workflow has a Title field which is a descriptive title for the Workflow and shows up in the Workflow Console that the Hospital Staff will eventually use to monitor the progress of the appointment process. The Title supports using workflow parameter static IDs as substitution strings. -1. To set the Workflow Title, Under Identification, click Doctor Appointment Workflow in the Rendering Tree. +1. To set the Workflow Title, select **Doctor Appointment** Workflow in the Rendering Tree on the left. -2. In the Property Editor, Change the **Title** to **Doctor Appointment Workflow for patient &PATIENT_NAME**. +2. In the Property Editor, change the Title to **Doctor Appointment Workflow for patient &PATIENT_NAME**. ![Change Workflow Title](./images/change-workflow-title.png " ") -3. Click Save button to save your changes. +3. Click **Save** to save your changes. -## Task 7: Add Additional Data to the Workflow +## Task 6: Add Additional Data to the Workflow -In addition to the input parameters, the Workflow also needs information about the available doctors based on the patient's particular problem. An understanding of the appointment process tells us that the doctor data will be needed by almost all activities of the workflow. +In addition to the input parameters, the Workflow also needs information about the available doctors based on the patient's problem. An understanding of the appointment process tells us that all activities of the workflow need the doctor data. -1. To define Additional Data, click on the **Workflow Version 1.0[Dev]** in the rendering Tree. +1. To define Additional Data, click on the **Workflow Version 1.0[Dev]** in the rendering tree. -2. In the Version Property Editor, Navigate to the Additional Data section and set the below properties. - - Set Type as **Table/View**. - - For Table Name, Select **DOCTOR** from the list of Tables. - - Under **Column Mapping**, For **Primary Key Column**, Select **DNAME**. +2. In the Property Editor, enter/select the following: + - Under 'Additional Data': + - Type: **Table/View** + - Table Name: **DOCTOR** + - Column Mapping > Primary Key Column: **DNAME** ![Set Table Name](./images/add-additional-data.png " ") 3. Click **Save**. -> **Note:** _Now the values of all columns of the DOCTOR table will be available as Bind Variables or Substitution Strings at all points and by all activities during the execution of this Workflow._ +> **Note:** _Now, all the columns' values of the DOCTOR table will be available as Bind Variables or Substitution Strings at all points and by all activities during the execution of this Workflow._ + + +## Task 7: Add Workflow Variables +**Why Parameters and Additional Data are not enough?!** -## Task 8: Add Workflow Variables +The inputs provided to the Appointment Workflow are read-only in nature. This means that, once the workflow is submitted, their values will never be modified. The workflow needs to process and pass data from one activity to the next. -**Why are Parameters and Additional Data not enough?** +As an example, consider the following business scenario: -The inputs provided to the Appointment Workflow are read-only in nature. This means that once the workflow is submitted, their values will never be modified. The workflow needs to process and pass data from one activity to the next. As an example, consider the different business steps: +Before an appointment is confirmed, the workflow needs to compute the doctor's availability based on his/her current appointment schedule. So, availability of the doctor is a variable that will be determined based on this computation. -Before an appointment is confirmed, the workflow needs to compute the doctor's availability based on his/her current appointment schedule. So, Availability of the doctor is a variable that will be determined based on this computation. +When an appointment is confirmed, the Booking ID for the appointment is carried forward to later activities which calculate and update the appointment fees. -When an appointment is confirmed, the Booking ID for the appointment entry needs to passed on to later activities which calculate and update the appointment fees. -Data such as Availability, Booking ID and Fee need to be updatable by the activities of the workflow as part of the execution. Data such as these need to be defined as Workflow Variables. +Data such as Availability, Booking ID and Fee need to be updatable by the activities of the workflow as part of the execution. Such data is defined as **Workflow Variables**. -1. Right-click on 1.0 [DEV] (workflow version) in the Rendering Tree. +1. Right-click on **1.0 [DEV]** (workflow version) in the Rendering Tree. 2. Select **Create Variable**. ![Create Variable](./images/create-variable.png " ") -3. A new variable with Name **New** gets created in the tree. Click on it and modify the following properties in the Property Editor. - - Under Identification, - - Set Static ID as **BOOKING_ID** - - Under label - - Set Label as **Booking Id** - - Under Variable - - Set Data Type as **NUMBER** - - Under value - - Select Type as **Null**. This is because we know that the Booking ID only gets generated later in the workflow after the appointment is confirmed, so it needs to be initialized to null +3. A new variable with Name **New** gets created in the tree. Click on it and enter/select the following in the Property Editor: + - Identification > Static ID: **BOOKING_ID** + - Label > Label: **Booking ID** + - Variable > Data Type: **NUMBER** + - Value > Type: **Null**. This is because we know that the Booking ID only gets generated later in the workflow after the appointment is confirmed, so it needs to be initialized to null. ![Create Booking ID Variable](./images/create-bookingid-variable.png " ") -4. Similarly create variable **AVAILABILITY** with Data Type **BOOLEAN**. - -5. And then, - - under the **Application Format Masks** section, - - specify the **True Value** as **AVAILABLE** - - and **BUSY** as the **False** value - - Under Value, set Type as **Null**. +4. Similarly, create a variable called **AVAILABILITY**. Enter/Select the following in the Property Editor: + - Data Type: **BOOLEAN** + - Value > Type: **Null** + - Under 'Application Format Masks': + - True Value: **AVAILABLE** + - False Value: **BUSY** + ![Create Availability Variable](./images/configure-availability.png " ") -6. Also, Create variable **FEE** with Data Type **NUMBER**, and Set Value -> Type as **Static Value** with the **Static Value** as **0**. +6. Finally, create a variable **FEE**. Enter/Select the following in the Property Editor: + + - Data Type: **NUMBER** + + - Under 'Value': + - Type: **Static Value** + - Static Value: **0** ![Create Fee Variable](./images/create-variable-fee.png " ") @@ -219,7 +223,7 @@ Data such as Availability, Booking ID and Fee need to be updatable by the activi In this lab, you learned the process of creating a Doctor Appointment Workflow using Oracle APEX. ### What's Next -Now you're ready to proceed to the next section where you'll learn how to add Human Tasks to your Workflow. Stay tuned for more hands-on guidance! +Now, you're ready to proceed to the next section where you'll learn how to add Human Tasks to your Workflow. Stay tuned for more hands-on guidance! You may now **proceed to the next lab**. diff --git a/apex-workflows/design-the-application/2-design-the-application.md b/apex-workflows/design-the-application/2-design-the-application.md index 4ba6a1ba..d1d691de 100644 --- a/apex-workflows/design-the-application/2-design-the-application.md +++ b/apex-workflows/design-the-application/2-design-the-application.md @@ -1,36 +1,33 @@ -# Design the Doctor Appointments Made Easy Application +# Design the 'Doctor Appointments Made Easy!' Application ## Introduction -Hands-on Lab: - -In this lab, you will design the Doctor Appointments Made Easy application using Oracle APEX. The application will streamline the doctor appointment process, allowing seamless interactions between doctors, patients, and hospital staff. +In this lab, you design the 'Doctor Appointments Made Easy!' application using Oracle APEX. The application will streamline the doctor appointment process, allowing seamless interactions between doctors, patients, and hospital staff. ### Objectives -In this lab, you : -- Create the APEX Application. +In this lab, you: +- Create the APEX Application - Create Application users -- Install Sample dataset +- Install the Sample Dataset Estimated Time: 20 minutes ### Prerequisites -1. Access to Oracle APEX. -2. Ensure that users (doctors, patients, and hospital staff) are created using the Manage Users And Groups menu option under Workspace Administration. To create these users, follow the the instructions specified in Step 1. +- Access to Oracle APEX. ## Task 1: Create Application Users -In this lab, you create users for Doctor Appointments made Easy Application. +In this lab, you create users for 'Doctor Appointments made Easy!' Application. -1. Navigate to **Workspace Administration** by clicking the **Administration icon** on the Application home page and select **Manage Users and Groups** from the dropdown list. +1. On the Application home page, click the **Administration icon** and select **Manage Users and Groups** from the dropdown list. ![Manage Users and Groups](./images/manage-users-and-groups.png " ") -2. Click **Create Multiple Users** +2. Click **Create Multiple Users**. ![Create Multiple Users](./images/create-users.png " ") -3. Under **Create multiple Users**, create the following users: +3. You will create the following users for the application: | Persona | User Name | | -------------- | --------- | @@ -44,31 +41,38 @@ In this lab, you create users for Doctor Appointments made Easy Application. | | DARYL | | | RAJESH | | Hospital Staff | STEVE | + {: title="List of Users to Create in the Application"} + + In the **Create multiple Users** wizard, specify the following attributes: + - For a List of Email Addresses: Enter **Email IDs of the Users** given in the table below. -4. Specify the following attributes: - - For a List of Email Addresses: Enter **Email IDs of the Users** - | List of Email Addresses | - | --------- | - | ROBERT@oracle.com | - | ANACHATT@oracle.com | - | JANE@oracle.com | - | BO@oracle.com | - | PAT@oracle.com | - | MARTIN@oracle.com | - | SUSIE@oracle.com | - | DARYL@oracle.com | - | RAJESH@oracle.com | - | STEVE@oracle.com | - - For Usernames : Select **Exclude @ domain as part of the username** - - For password and Confirm Password: **Enter a password of your wish** - - Click **Next** + ``` + + + ROBERT@yourdomain.com + ANACHATT@yourdomain.com + JANE@yourdomain.com + BO@yourdomain.com + PAT@yourdomain.com + MARTIN@yourdomain.com + SUSIE@yourdomain.com + DARYL@yourdomain.com + RAJESH@yourdomain.com + STEVE@yourdomain.com + + ``` + + - For Usernames: Select **Exclude @ domain as part of the username** + - For Password and Confirm Password: **Enter a password** + - Click **Next**. + ![Create Multiple Users - details](./images/create-multiple-users.png " ") -5. And then, Click **Create Valid Users** +5. Click **Create Valid Users**. ![Click validate users](./images/create-valid-users.png " ") -6. Users are now created in your Workspace. + Users are now created in your Workspace. -## Task 2: Create the Doctor Appointments Made Easy Application +## Task 2: Create the 'Doctor Appointments Made Easy!' Application 1. Navigate to **App Builder**. ![Select App Builder](./images/select-app-builder.png " ") @@ -76,17 +80,16 @@ In this lab, you create users for Doctor Appointments made Easy Application. 2. Click **Create**. ![Click create](./images/click-create.png " ") -3. Under **Create an Application**, - - For Name, enter **Doctor Appointments Made Easy!** +3. In the Create an Application wizard, for Name, enter **Doctor Appointments Made Easy!**. + ![Create an Application](./images/create-an-application.png " ") 4. Click **Create Application**. -## Task 3: Sample Table and Sample Data - -1. Install the dataset. +## Task 3: Install Sample Data + In this task, you install a Sample Dataset using a SQL Script. -2. Navigate to **SQL Workshop** and click **SQL Scripts**. +1. Navigate to **SQL Workshop** and click **SQL Scripts**. ![Click SQL Scripts](./images/click-sql-scripts.png " ") 3. Click **Create**. @@ -195,23 +198,23 @@ In this lab, you create users for Doctor Appointments made Easy Application. (60, 'MARTIN', 'RENOLOGY','MS','martin@abc.com'); ``` -5. For Script Name, enter **Create DB Tables** and Click **Run**. +5. For Script Name, enter **Create DB Tables** and click **Run**. ![Click create SQL Scripts](./images/create-db-tables.png " ") -6. Click **Run Now**. +6. Click **Run Now**. The statements are processed and the sample tables and data are created. ![Click create SQL Scripts](./images/click-run-now.png " ") ![Click create SQL Scripts](./images/create-tables-output.png " ") ## Task 4: Create Package Spec and Package Body -1. Navigate back to **SQL Workshop** and click **SQL Scripts**. +1. Navigate to **SQL Workshop** and click **SQL Scripts**. ![Click create SQL Scripts](./images/click-sql-scripts1.png " ") 2. Click **Create**. ![Click create SQL Scripts](./images/click-create2.png " ") -3. Copy and paste the provided commands to create a package spec named **eba\_demo\_wf\_doc\_apt.sql**. +3. Copy and paste the code snippet to create a package spec named **eba\_demo\_wf\_doc\_apt.sql**. ``` @@ -251,7 +254,7 @@ In this lab, you create users for Doctor Appointments made Easy Application. ``` -4. For Script Name, enter **Create Package Spec** and Click **Run**. +4. For Script Name, enter **Create Package Spec** and click **Run**. ![Click create SQL Scripts](./images/create-package-spec.png " ") @@ -368,7 +371,7 @@ In this lab, you create users for Doctor Appointments made Easy Application. ``` -7. For Script Name, enter **Create Package Body** and Click **Run**. +7. For Script Name, enter **Create Package Body** and click **Run**. ![Click create SQL Scripts](./images/create-pckage-body.png " ") @@ -377,7 +380,7 @@ In this lab, you create users for Doctor Appointments made Easy Application. ![Click create SQL Scripts](./images/click-run-now2.png " ") ## Summary -You have successfully completed the initial steps for designing the Doctor Appointments Made Easy application. You created Doctor Appointments Made Easy Application, and then added Application users, created Sample Datasets, and a Package. +You have successfully completed the initial steps for designing the 'Doctor Appointments Made Easy!' application. You first created a 'Doctor Appointments Made Easy!' Application, and then added Application users, created Sample Datasets, and a Package. ### What's Next In the next lab, you will learn how to create a Workflow using Oracle APEX. diff --git a/apex-workflows/design-the-application/images/create-multiple-users.png b/apex-workflows/design-the-application/images/create-multiple-users.png index 79eca90f..000bf4af 100644 Binary files a/apex-workflows/design-the-application/images/create-multiple-users.png and b/apex-workflows/design-the-application/images/create-multiple-users.png differ diff --git a/apex-workflows/identify-business-steps/1-identify-business-steps.md b/apex-workflows/identify-business-steps/1-identify-business-steps.md index b5398c7c..fb01cc23 100644 --- a/apex-workflows/identify-business-steps/1-identify-business-steps.md +++ b/apex-workflows/identify-business-steps/1-identify-business-steps.md @@ -1,20 +1,20 @@ -# Doctor Appointments Made Easy - Identify Business steps +# Identify Business steps ## Introduction -In this Lab, you learn how to implement an efficient system to schedule and manage doctor consultations where you design an APEX Application titled **Doctor Appointments Made Easy** that leverages the Workflow component to schedule and manage doctor consultations efficiently. To achieve this, we need to follow a structured approach: +In this lab, you learn to implement an efficient system to schedule and manage doctor consultations by designing an APEX Application called **Doctor Appointments Made Easy!**, that leverages the Workflow component to schedule and manage doctor consultations efficiently. To achieve this, we need to follow a structured approach: - Break down the business logic into manageable, executable steps. - Identify the sequences and conditions that govern the execution of these steps. - Identify the key participants in the organization that are involved in this business process. -> **Note:** _In APEX Workflow terminology - we refer to an executable step as an Activity and a sequence/condition as a Connection._ +> **Note:** _In APEX Workflow terminology, we refer to an executable step as an **Activity** and a sequence/condition as a **Connection**._ ### Objectives -In this Lab, you will: -- Identify Business steps required to create Doctor Appointments Made Easy Application. +In this lab, you will: +- Identify Business steps required to create 'Doctor Appointments Made Easy!' Application. Estimated Time: 10 minutes @@ -23,38 +23,36 @@ Estimated Time: 10 minutes 1. Access to Oracle APEX. -Welcome to our hands-on Lab, where we will create an APEX Application called "Doctor Appointments Made Easy." - ## Breaking down the Business Logic -We will begin by dissecting the medical appointment business process into distinct steps and identifying the actors or participants associated with each step. Here's an overview: +We begin by dissecting the medical appointment business process into distinct steps and identifying the actors or participants associated with each step. Here's an overview: ### Steps in the Medical Appointment Business Process | Step No. | Step Description | Step Type | Actor | |---------|-------------------------------------------------------------|-----------|------------------------| -| 1 | Schedule a doctor appointment | Manual | Patient | -| 2 | Login to the application, fill in patient details, and submit an appointment request on behalf of the patient | Manual | Hospital Management Representative/Staff | -| 3 | Check doctor's availability for the requested appointment date/time | Automatic | Workflow | -| 4 | If the doctor is busy, send a "No-Appointment" email to the patient and close the appointment request | Automatic | Workflow | -| 5 | If the doctor is available, raise an "Approval Task" for the doctor to confirm the appointment request | Automatic | Workflow | -| 6 | Log in to the application to access the appointment request | Manual | Doctor | -| 7 | Approve the appointment request | Manual | Doctor | -| 8 | Reject the appointment request | Manual | Doctor | -| 9 | If the doctor rejects, send a "No-Appointment" email to the patient and close the appointment request | Automatic | Workflow | -| 10 | If the doctor approves, enter appointment details in the system with the status 'Confirmed' | Automatic | Workflow | -| 11 | Check if the patient had a previous appointment with the same doctor in the last seven days | Automatic | Workflow | -| 12 | If the patient had a previous appointment, mark this as a follow-up visit, don't charge fees, and raise an invoice with zero payment request for the patient to confirm | Automatic | Workflow | -| 13 | If it's a new visit, raise an invoice with fees and payment request for the patient to confirm | Automatic | Workflow | -| 14 | In both cases, send an email notifying the patient of the appointment confirmation and the invoice request | Automatic | Workflow | -| 15 | Log in to the application to confirm the invoice | Manual | Patient | -| 16 | If the patient doesn't confirm the invoice within a specific period, send a "No-Appointment" email and close the appointment request | Automatic | Workflow | -| 17 | If the patient confirms the invoice, update the appointment status to "PAID" in the system of records | Automatic | Workflow | -| 18 | Wait until the appointment is completed | Automatic | Workflow | -| 19 | Raise a feedback request to the patient | Automatic | Workflow | -| 20 | Log in to the application and provide feedback | Manual | Patient | -| 21 | If the patient doesn't complete the feedback request within a specified period, close the appointment request | Automatic | Workflow | -| 22 | If the patient provides feedback, send a "Thank You" email to the patient and then close the appointment request | Automatic | Workflow | +| 1 | Schedule a doctor's appointment. | Manual | Patient | +| 2 | Login to the application, fill in patient details, and submit an appointment request on behalf of the patient. | Manual | Hospital Management Representative/Staff | +| 3 | Check doctor's availability for the requested appointment date/time. | Automatic | Workflow | +| 4 | If the doctor is busy, send a 'No-Appointment' email to the patient and close the appointment request. | Automatic | Workflow | +| 5 | If the doctor is available, raise an 'Approval Task' for the doctor to confirm the appointment request. | Automatic | Workflow | +| 6 | Log in to the application to access the appointment request. | Manual | Doctor | +| 7 | Approve the appointment request. | Manual | Doctor | +| 8 | Reject the appointment request. | Manual | Doctor | +| 9 | If the doctor rejects, send a 'No-Appointment' email to the patient and close the appointment request. | Automatic | Workflow | +| 10 | If the doctor approves, enter appointment details in the system with the status 'Confirmed'. | Automatic | Workflow | +| 11 | Check if the patient had a previous appointment with the same doctor in the last seven days. | Automatic | Workflow | +| 12 | If the patient had a previous appointment, mark this as a follow-up visit, don't charge fees, and raise an invoice with zero payment request for the patient to confirm. | Automatic | Workflow | +| 13 | If it's a new visit, raise an invoice with fees and payment request for the patient to confirm. | Automatic | Workflow | +| 14 | In both cases, send an email notifying the patient of the appointment confirmation and the invoice request. | Automatic | Workflow | +| 15 | Log in to the application to confirm the invoice. | Manual | Patient | +| 16 | If the patient doesn't confirm the invoice within a specific period, send a 'No-Appointment' email and close the appointment request. | Automatic | Workflow | +| 17 | If the patient confirms the invoice, update the appointment status to 'PAID' in the system of records | Automatic. | Workflow | +| 18 | Wait until the appointment is completed. | Automatic | Workflow | +| 19 | Raise a feedback request to the patient. | Automatic | Workflow | +| 20 | Log in to the application and provide feedback. | Manual | Patient | +| 21 | If the patient doesn't complete the feedback request within a specified period, close the appointment request. | Automatic | Workflow | +| 22 | If the patient provides feedback, send a 'Thank You' email to the patient and then close the appointment request. | Automatic | Workflow | This comprehensive breakdown illustrates the significance of workflow in managing complex business processes, making the system efficient and responsive. @@ -66,7 +64,7 @@ You now understand the significance of workflow in managing complex business pro ### What's Next -In our next labs, you will create a flowchart based on the automated steps, helping us visualize the flow of the business logic and its seamless execution. Stay tuned as we dive into the practical implementation of this intuitive doctor appointment management system! +In the next lab, you will create a flowchart based on the automated steps, helping us visualize the flow of the business logic and its seamless execution. Stay tuned as we dive into the practical implementation of this intuitive doctor appointment management system! You may now **proceed to the next Lab**. diff --git a/apex-workflows/introduction.md b/apex-workflows/introduction.md index b6320bd5..2063dbcf 100644 --- a/apex-workflows/introduction.md +++ b/apex-workflows/introduction.md @@ -1,28 +1,28 @@ -# Build a Doctor Appointments Made Easy App using Oracle APEX +# Build a 'Doctor Appointments Made Easy' App using Oracle APEX ## Introduction -APEX Workflow is a fresh addition to the larger APEX ecosystem, offering fundamental workflow capabilities for APEX Developers. +APEX Workflows is a relatively new addition to the larger APEX ecosystem, offering fundamental workflow capabilities for APEX Developers. -What is Workflow? +What are Workflows? -In this context, Workflow entails the automation of business processes, whether in their entirety or in part. It involves the seamless transfer of documents, information, or tasks from one participant to another for actions following a predefined set of procedural rules, including sequence flow and transition conditions (source). +In this context, Workflows entail the automation of business processes, whether in their entirety or in part. It involves the seamless transfer of documents, information, or tasks from one participant to another for actions following a predefined set of procedural rules, including sequence flow and transition conditions (source). -In the First release of APEX Workflow, you can harness the following capabilities: +With the first release of APEX Workflows, you can harness the following capabilities: -- Visual Workflow Designer: Craft and author workflow models with ease. -- Workflow Console: Monitor and administer workflows efficiently. -- Workflow Runtime (Engine): Execute workflows seamlessly. +- **Visual Workflow Designer**: Craft and author workflow models with ease +- **Workflow Console**: Monitor and administer workflows efficiently +- **Workflow Runtime (Engine)**: Execute workflows seamlessly -Estimated Time: 155 minutes +Estimated Time: 2 hours 35 minutes -## Simplify Business Process Management with Workflow +## Simplify Business Process Management with Workflows -The primary objective of Workflow is to simplify and automate the management of intricate business logic by breaking it down into simple, repeatable steps. In this blog series, we showcase the utility of APEX Workflow through a real-world use case prevalent in the healthcare industry. +The primary objective of Workflows is to simplify and automate the management of intricate business logic by breaking it down into simple, repeatable steps. In this workshop, we showcase the utility of APEX Workflows through a real-world use case prevalent in the healthcare industry. -Scheduling and managing consultations and appointments represent core operations for diagnostic clinics and hospital outpatient departments (OPDs). Throughout this series, you gain insights into constructing a smart, efficient, and low-code APEX application that adeptly handles these crucial healthcare processes using the Workflow component. +In diagnostic clinics and hospital outpatient departments (OPDs), scheduling and managing consultations and appointments becomes a challenging task. Throughout this workshop, you gain insights into building a smart, efficient, low-code APEX application that efficiently handles these crucial healthcare processes using the Workflow component. -Stay tuned for a journey into the world of streamlined business process management with APEX Workflow! +Stay tuned for a journey into the world of streamlined business process management with APEX Workflows! ### Objectives @@ -30,7 +30,7 @@ In this workshop, you will: - Identify the manual and automated steps of your business process - Create the APEX application - Create the Doctor Appointment Workflow -- Add the Human Tasks to the Workflow +- Add Human Tasks to the Workflow - Add Activities and Connections to the Workflow - Create Pages for the APEX application @@ -39,7 +39,7 @@ In this workshop, you will: ## Learn More - *Useful Links* -- [APEX on Autonomous](https://apex.oracle.com/autonomous) +- [APEX Workflows](https://docs.oracle.com/en/database/oracle/apex/23.2/htmdb/managing-workflows-and-tasks.html#GUID-C2149600-4A1C-4CC5-A149-DB5C6963A599) - [APEX Collateral](https://www.oracle.com/database/technologies/appdev/apex/collateral.html) - [Tutorials](https://apex.oracle.com/en/learn/tutorials) - [Community](https://apex.oracle.com/community) @@ -47,5 +47,4 @@ In this workshop, you will: ## Acknowledgements - **Author(s)** - Roopesh Thokala, Senior Product Manager & Ananya Chatterjee, Consulting Member of Technical Staff. -- **Contributor** - - **Last Updated By/Date** - Roopesh Thokala, Senior Product Manager, December 2023 diff --git a/apex-workflows/running-the-app/7-running-the-app.md b/apex-workflows/running-the-app/7-running-the-app.md index f68b3e3c..c2a60d20 100644 --- a/apex-workflows/running-the-app/7-running-the-app.md +++ b/apex-workflows/running-the-app/7-running-the-app.md @@ -1,4 +1,4 @@ -# Run the Doctor Appointments Made Easy! Application +# Run the 'Doctor Appointments Made Easy!' Application ## Introduction @@ -11,45 +11,40 @@ In this lab, you will run and understand the behavior of the **Doctor Appointmen Estimated Time: 20 minutes ### Prerequisites -1. Access to Oracle APEX. -2. Ensure that you have completed the Previous labs. +- All the previous Labs have been completed. -## Task 1: Setting Automatic Timezone for the Application +## Task 1: Set Automatic Timezone for the Application -To demonstrate the application's behavior, we will use an automatic timezone setup. This will ensure that the appointment dates and times are honored with respect to the End User's timezone. +To demonstrate the application's behavior, we will use an automatic timezone setup. This will ensure that the appointment dates and times are in sync with the End User's timezone. -1. To do this, Navigate to the Application Home Page and then go to Shared Components -> Globalization. +1. To do this, navigate to the Application Home Page and then go to **Shared Components > Globalization**. -2. Turn on the Automatic Time Zone setting. +2. Toggle the **Automatic Time Zone** button to ON. ![navigate to doctors app made easy](./images/change-global-attr.png " ") -3. Save the changes by clicking on Apply Changes. +3. Click **Apply Changes**. -## Task 2: Setting the APP_EMAIL Substitution String -1. Go to the Application Home Page. -2. Click on Edit Application Definition. +## Task 2: Set the APP_EMAIL Substitution String +1. Go to the Application Home Page and click **Edit Application Definition**. 3. Under Substitutions, add the following entry for APP_EMAIL settings. - - Substitution: APP_EMAIL - - Value: no-reply@abchospitals.com + - Substitution: **APP_EMAIL** + - Value: **no-reply@abchospitals.com** - ![set application Email](./images/set-app-email.png " ") + ![set application Email](./images/set-app-email.png " ") -4. Save the changes by clicking on Apply Changes. +4. Click **Apply Changes**. -## Task 3: Booking an Appointment -From the Application Home Page, click on Run Application. +## Task 3: Book an Appointment -Log In as STEVE (Hospital Staff). Click on New Appointment to Book a New Appointment for Rajesh. Select the problem from the drop-down menu as Psychiatric. - -1. From the Application Home Page, click on Run Application. +1. From the Application Home Page, click **Run Application**. 2. Log in as STEVE (Hospital Staff). ![login to the application](./images/login-to-app.png " ") -3. Click on **New Appointment** to book an appointment for **Rajesh**. +3. Click **New Appointment** to book an appointment for **Rajesh**. ![create appointment](./images/create-appointment.png " ") @@ -57,7 +52,7 @@ Log In as STEVE (Hospital Staff). Click on New Appointment to Book a New Appoint 5. Choose **ANACHATT** as the available doctor. -6. Fill in the **Age** (eg., 45) and click on **Book Appointment**. +6. Fill in the **Age** (example: 45) and click **Book Appointment**. ![create an appointment](./images/create-appointment1.png " ") @@ -65,66 +60,57 @@ Log In as STEVE (Hospital Staff). Click on New Appointment to Book a New Appoint ![appointment created](./images/appoint-created.png " ") -## Task 4: Monitoring the Workflow +## Task 4: Monitor the Workflow -1. Click on **Monitor Appointment Workflows** from the Application Home Page. +1. Click on **Monitor Appointment Workflows** from the left navigation menu. ![navigate to doctors app made easy](./images/monitor-appt.png " ") -2. Click on the entry and observe the Workflow Details Popup. - - Workflow is waiting at "Activity Raise Appointment Request." - - Observe Workflow Parameters. - - ![navigate to doctors app made easy](./images/monitor-appts.png " ") - +2. Click on the **Doctor Appointment Workflow for Patient Rajesh** entry and observe the Workflow Details Popup. + - Workflow is waiting at "Raise Appointment Request" Activity. + - Observe Workflow Parameters. -## Task 5: Approving the Appointment Request -1. Log in as ANACHATT, who is a Doctor in this workflow. -2. Click on "Doctor Tasks." + ![navigate to doctors app made easy](./images/monitor-appts.png " ") - ![navigate to doctors app made easy](./images/login-as-annchatt.png " ") -3. Click on "Approve" to approve the appointment request. +## Task 5: Approve the Appointment Request +1. Log in as **ANACHATT**, who is a Doctor in this workflow. +2. Select **Doctor Tasks** from the left navigation menu. + ![navigate to doctors app made easy](./images/login-as-annchatt.png " ") -## Task 6: Progressing the Workflow +3. Click **Approve** to approve the appointment request. -Log back in as STEVE (Hospital Staff) and click on Monitor Appointment Workflows to monitor the progress of the workflow. -Observe that the Workflow has progressed further and is now waiting at the Raise Invoice Request activity. This activity is waiting for the patient, RAJESH, to confirm and pay the invoice. Also, observe that the Workflow Variables: Approver, Fee, and TaskOutcome are correctly set. +## Task 6: Observe the Workflow -1. Log in as **STEVE** (Hospital Staff). -2. Click on **Monitor Appointment Workflows**. -3. Observe that the workflow is waiting at **Raise Invoice Request** activity. +1. Log out and log in as **STEVE** (Hospital Staff). +2. Click on **Monitor Appointment Workflows** from the left navigation menu. +3. Observe that the workflow is waiting at **Raise Invoice Request** activity. This activity is waiting for the patient (RAJESH), to confirm and pay the invoice. - ![navigate to doctors app made easy](./images/steve-monitor-appt.png " ") + ![navigate to doctors app made easy](./images/steve-monitor-appt.png " ") -4. Note the correctly set Workflow Variables. +4. Note the correctly set Workflow Variables: Approver, Fee, and TaskOutcome. -## Task 7: Completing the Workflow +## Task 7: Complete the Workflow -1. Log in as **RAJESH**. +1. Log out and log in as **RAJESH**. -2. Click on the entry in **Patient Tasks** to complete the request after confirming the invoice. +2. Navigate to **Patient Tasks** and click on the entry **Invoice for Rajesh for consultation....** to complete the request after confirming the invoice. ![navigate to doctors app made easy](./images/rajesh-patient-tasks.png " ") -3. Log out and log back in as STEVE to monitor the workflow. +3. Log out and log back in as **STEVE** to monitor the workflow. Observe that the workflow has completed the Raise Invoice Request and Update Appointment Activities. -4. Observe that the workflow has completed the Raise Invoice Request and Update Appointment Activities. - -5. Click on the next page button below the Activities. +5. Click on the **Next Page** button below the Activities. ![check appointment workflow](./images/check-appt-workflow.png " ") -## Task 8: Feedback Process - -On the next page, observe that the Workflow is now waiting for the Wait Before Requesting Feedback activity to complete. Recall that the Wait activity has a timeout setting which elapses once the Appointment Time is reached. +## Task 8: Request Feedback Process 1. On the next page, observe that the workflow is waiting at **Wait Before Requesting Feedback** activity to complete. - -2. Recall that the **Wait activity** has a timeout setting that elapses once the Appointment Time is reached. + Recall that the Wait activity has a timeout setting that elapses once the Appointment Time is reached. ![wait for appointment](./images/wait-for-feedback.png " ") @@ -132,41 +118,35 @@ On the next page, observe that the Workflow is now waiting for the Wait Before R ![wait for appointment1](./images/wait-for-appt1.png " ") -## Task 9: Patient Feedback +## Task 9: Provide Patient Feedback -1. Now that the Feedback Request has been raised, log out and log back in as RAJESH, the patient. +1. Now that the Feedback Request has been raised, log out and log back in as **RAJESH** (the patient). -2. Click on **Patient Tasks** and find the Feedback Request Task waiting for your action. +2. Click on **Patient Tasks** and find the Feedback Request Task (Feedback fro Consultation on ....) waiting for your action. -3. Fill in the **Feedback Form** and click **Complete**. +3. Fill in the Feedback Details and click **Complete**. ![wait for feedback](./images/check-feedback-form.png " ") -## Task 10: Workflow Completion -Log out and log back in as STEVE to monitor the workflow. Observe that the Workflow is now Completed. - +## Task 10: Complete the Workflow -1. Log out and log back in as STEVE to monitor the workflow. +1. Log out and log back in as **STEVE** to monitor the workflow. 2. Observe that the Workflow is now completed. ![wait for feedback](./images/observe-workflow-completed.png " ") -## Task 11: Email Confirmation - -Check the inbox of the mail ID used for the patient. - -You will find a Thank You Email. +## Task 11: Verify Email Confirmation -1. Check the inbox of the patient's email for a Thank You Email. +1. Check the inbox of the patient's email for a 'Thank You' email. ![thank you email](./images/thank-you-email.png " ") -2. Log in as RAJESH and verify the Feedback was entered successfully. +2. Log in as **RAJESH** and verify that the Feedback was entered successfully. ![wait for feedback](./images/rajesh-feedback-check.png " ") -## Additional Scenarios to Try +## [OPTIONAL] Additional Scenarios to Try 1. **Double Booking:** As a Hospital Staff, try to book 2 appointments for the same time for 2 different patients with the same doctor. Observe the workflow termination for the second patient. 2. **Doctor Rejects Appointment:** As a Doctor, reject an appointment request. Observe the workflow termination for the patient. @@ -175,16 +155,15 @@ You will find a Thank You Email. 4. **Delay in Invoice Response:** As a patient, after receiving an Invoice Request, do not act on the task. Observe the workflow termination and receive a No Appointment Email after one day. -5. **Delay in Feedback Response:** As a patient, after receiving a Feedback Request, do not act on the task. Observe the workflow completion, and no Thank You Note after 12 hours. +5. **Delay in Feedback Response:** As a patient, after receiving a Feedback Request, do not act on the task. Observe the workflow completion, and after 12 hours, 'Thank You' email is not received. ## Summary In this hands-on lab, you learned how to: -- Automate business processes using APEX Workflow. +- Automate business processes using APEX Workflows. - Define workflow activities, variables, parameters, additional data, and connections. - Start a new workflow through a Page Process. - Monitor the progress of initiated workflows. ## Acknowledgements -- **Author(s)** - Roopesh Thokala, Senior Product Manager & Ananya Chatterjee, Consulting Member of Technical Staff. -- **Contributor** - +- **Author(s)** - Roopesh Thokala, Senior Product Manager; Ananya Chatterjee, Consulting Member of Technical Staff. - **Last Updated By/Date** - Roopesh Thokala, Senior Product Manager, December 2023 diff --git a/apex-workflows/running-the-app/images/check-appt-workflow.png b/apex-workflows/running-the-app/images/check-appt-workflow.png index 02b0b500..98389811 100644 Binary files a/apex-workflows/running-the-app/images/check-appt-workflow.png and b/apex-workflows/running-the-app/images/check-appt-workflow.png differ diff --git a/apex-workflows/workshops/tenancy/manifest.json b/apex-workflows/workshops/tenancy/manifest.json index 11c65da4..7f822e30 100644 --- a/apex-workflows/workshops/tenancy/manifest.json +++ b/apex-workflows/workshops/tenancy/manifest.json @@ -1,5 +1,5 @@ { - "workshoptitle": "Simplify Business Process Management Using APEX Workflow", + "workshoptitle": "Simplify Business Process Management Using APEX Workflows", "help": "livelabs-help-apex_us@oracle.com", "tutorials": [ { @@ -7,15 +7,15 @@ "filename": "../../introduction.md" }, { - "title": "Get Started", - "filename": "../../../common-232/1-sign-up-apex/1-sign-up-apex.md" + "title": "Get Started", + "filename": "../../../common-232/1-sign-up-apex/1-sign-up-apex.md" }, { "title": "Lab 1: Identify Business Steps", "filename": "../../identify-business-steps/1-identify-business-steps.md" }, { - "title": "Lab 2: Create Task Definition", + "title": "Lab 2: Design the Application", "filename": "../../design-the-application/2-design-the-application.md" }, { @@ -23,7 +23,7 @@ "filename": "../../create-workflow/3-create-workflow.md" }, { - "title": "Lab 4: Add and Manage Task Definitions", + "title": "Lab 4: Add Human Tasks to the Workflow", "filename": "../../add-human-tasks/4-add-human-tasks.md" }, {