本章围绕 Oracle APEX 的工作流和人工任务能力,说明如何把跨人员、系统和时间跨度的业务流程自动化。内容覆盖工作流设计器、活动连接、参数变量、后台执行、人工审批、患者入院示例、业务实体生命周期、事件驱动继续执行,以及工作流和任务的调试、部署与清理。

25 自动化业务流程#

业务流程通常跨越多名同事、外部系统、等待时间和审批节点。APEX Workflows 的价值在于把这些步骤建模为可运行、可观察、可维护的流程实例。

本页按官方教程说明该主题的目的、配置路径和验证方式;阅读时应对照 APEX Builder 当前界面逐步复现。

25.1 使用工作流自动化流程#

本页是该章节层级中的一个具体操作点,应结合上下文把配置动作、运行时效果和验证方式串起来理解。

本页按官方教程说明该主题的目的、配置路径和验证方式;阅读时应对照 APEX Builder 当前界面逐步复现。

本页涉及的关键 APEX 标签或对象包括:Workflow Designer、Activities、Wait、Create Page Wizard。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

25.2 探索患者入院示例#

本页是该章节层级中的一个具体操作点,应结合上下文把配置动作、运行时效果和验证方式串起来理解。

本页按官方教程说明该主题的目的、配置路径和验证方式;阅读时应对照 APEX Builder 当前界面逐步复现。

本页涉及的关键 APEX 标签或对象包括:Workflow Designer、Automation。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

25.3 自动化业务实体生命周期逻辑#

本页是该章节层级中的一个具体操作点,应结合上下文把配置动作、运行时效果和验证方式串起来理解。

本页按官方教程说明该主题的目的、配置路径和验证方式;阅读时应对照 APEX Builder 当前界面逐步复现。

25.4 维护工作流流程#

本页是该章节层级中的一个具体操作点,应结合上下文把配置动作、运行时效果和验证方式串起来理解。

本页按官方教程说明该主题的目的、配置路径和验证方式;阅读时应对照 APEX Builder 当前界面逐步复现。

25.1.1 使用图表和活动面板#

这一组内容聚焦工作流建模基础:在 Workflow Designer 中放置活动、连接路径、设置参数变量,并让工作流在后台可靠执行。

本页按官方教程说明该主题的目的、配置路径和验证方式;阅读时应对照 APEX Builder 当前界面逐步复现。

本页涉及的关键 APEX 标签或对象包括:Workflow Designer、Activities、Property Editor、Switch。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

图 25.1.1-1 使用图表和活动面板

25.1.2 浏览原生活动#

这一组内容聚焦工作流建模基础:在 Workflow Designer 中放置活动、连接路径、设置参数变量,并让工作流在后台可靠执行。

本页按官方教程说明该主题的目的、配置路径和验证方式;阅读时应对照 APEX Builder 当前界面逐步复现。

本页涉及的关键 APEX 标签或对象包括:Activities、Human Task、Wait、Switch、Invoke API、SQL、PL/SQL。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

25.1.3 连接和路由活动#

这一组内容聚焦工作流建模基础:在 Workflow Designer 中放置活动、连接路径、设置参数变量,并让工作流在后台可靠执行。

本页按官方教程说明该主题的目的、配置路径和验证方式;阅读时应对照 APEX Builder 当前界面逐步复现。

本页涉及的关键 APEX 标签或对象包括:Activities、Property Editor、Switch。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

25.1.4 保存工作流前解决错误#

这一组内容聚焦工作流建模基础:在 Workflow Designer 中放置活动、连接路径、设置参数变量,并让工作流在后台可靠执行。

本页说明运行时数据处理。重点是页面项、任务参数、工作流变量和业务表列之间的数据流,以及提交前后的校验。

本页涉及的关键 APEX 标签或对象包括:Workflow Designer。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

图 25.1.4-1 保存工作流前解决错误

25.1.5 将表与工作流关联#

这一组内容聚焦工作流建模基础:在 Workflow Designer 中放置活动、连接路径、设置参数变量,并让工作流在后台可靠执行。

本页说明对象之间的关系和责任分配。关注参数传递、参与者来源、任务分配规则,以及特殊情况的处理。

本页涉及的关键 APEX 标签或对象包括:SQL。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

25.1.6 为活动检索数据#

这一组内容聚焦工作流建模基础:在 Workflow Designer 中放置活动、连接路径、设置参数变量,并让工作流在后台可靠执行。

本页说明如何查看或检索运行时信息。关注可用视图、页面入口、查询字段和展示范围,避免把内部状态误当成业务状态。

本页涉及的关键 APEX 标签或对象包括:SQL。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

25.1.7 定义参数和变量#

这一组内容聚焦工作流建模基础:在 Workflow Designer 中放置活动、连接路径、设置参数变量,并让工作流在后台可靠执行。

官方步骤的重点是配置属性:确认对象范围,设置必要参数、条件、可见性或行为,然后通过运行页面检查配置是否生效。

本页涉及的关键 APEX 标签或对象包括:Activities、Create Page Wizard、SQL、PL/SQL。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

25.1.8 理解后台执行#

这一组内容聚焦工作流建模基础:在 Workflow Designer 中放置活动、连接路径、设置参数变量,并让工作流在后台可靠执行。

本页偏概念说明,重点是理解该机制解决什么问题、何时使用,以及它与工作流、任务、页面或数据模型的边界。

本页涉及的关键 APEX 标签或对象包括:APEX_HUMAN_TASK。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

25.1.9 在工作流中获取审批或用户输入#

这一组内容聚焦工作流中的审批和用户输入。Human Task 活动把后台流程与用户任务列表连接起来。

本页按官方教程说明该主题的目的、配置路径和验证方式;阅读时应对照 APEX Builder 当前界面逐步复现。

本页涉及的关键 APEX 标签或对象包括:Wait。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

25.1.10 识别工作流参与者#

这一组内容聚焦工作流建模基础:在 Workflow Designer 中放置活动、连接路径、设置参数变量,并让工作流在后台可靠执行。

本页按官方教程说明该主题的目的、配置路径和验证方式;阅读时应对照 APEX Builder 当前界面逐步复现。

本页涉及的关键 APEX 标签或对象包括:SQL。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

25.1.11 列出工作流并查看详情#

这一组内容聚焦工作流建模基础:在 Workflow Designer 中放置活动、连接路径、设置参数变量,并让工作流在后台可靠执行。

本页说明如何查看或检索运行时信息。关注可用视图、页面入口、查询字段和展示范围,避免把内部状态误当成业务状态。

本页涉及的关键 APEX 标签或对象包括:Create Page Wizard、Page Designer。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

select * from table ( apex_workflow.get_workflows ( p_context => 'ADMIN_WORKFLOWS' --, p_application_id => :APP_ID ) )
Report Context Instances Where Current User Is API Constant
My Workflows Workflow Owner MY_WORKFLOWS
Admin Workflows Workflow Administrator ADMIN_WORKFLOWS
Initiated by Me Initiator INITIATED_BY_ME
图 25.1.11-1 列出工作流并查看详情
图 25.1.11-2 列出工作流并查看详情

25.2.1 理解当前流程#

这一组内容使用 Woods Clinic 患者入院作为完整示例,展示如何从手工流程识别自动化机会并逐步建立工作流。

本页偏概念说明,重点是理解该机制解决什么问题、何时使用,以及它与工作流、任务、页面或数据模型的边界。

25.2.2 识别自动化机会#

这一组内容使用 Woods Clinic 患者入院作为完整示例,展示如何从手工流程识别自动化机会并逐步建立工作流。

本页按官方教程说明该主题的目的、配置路径和验证方式;阅读时应对照 APEX Builder 当前界面逐步复现。

本页涉及的关键 APEX 标签或对象包括:Automation。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

25.2.3 启动患者入院工作流#

这一组内容使用 Woods Clinic 患者入院作为完整示例,展示如何从手工流程识别自动化机会并逐步建立工作流。

官方步骤的重点是创建或启动相应对象:先进入正确的 Builder 入口,设置名称、类型、来源和目标,再保存并运行验证。

本页涉及的关键 APEX 标签或对象包括:Workflow Designer、Property Editor、Page Designer。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

图 25.2.3-1 启动患者入院工作流

25.2.4 关联 Patients 表#

这一组内容使用 Woods Clinic 患者入院作为完整示例,展示如何从手工流程识别自动化机会并逐步建立工作流。

本页说明对象之间的关系和责任分配。关注参数传递、参与者来源、任务分配规则,以及特殊情况的处理。

图 25.2.4-1 关联 Patients 表

25.2.5 配置有意义的标题#

这一组内容使用 Woods Clinic 患者入院作为完整示例,展示如何从手工流程识别自动化机会并逐步建立工作流。

官方步骤的重点是配置属性:确认对象范围,设置必要参数、条件、可见性或行为,然后通过运行页面检查配置是否生效。

New Patient &FIRST_NAME. &LAST_NAME.
图 25.2.5-1 配置有意义的标题

25.2.6 用可视化方式构建患者入院流程#

这一组内容使用 Woods Clinic 患者入院作为完整示例,展示如何从手工流程识别自动化机会并逐步建立工作流。

本页按官方教程说明该主题的目的、配置路径和验证方式;阅读时应对照 APEX Builder 当前界面逐步复现。

本页涉及的关键 APEX 标签或对象包括:Activities、Property Editor、Human Task、Wait、Switch。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

25.3.1 学习医疗程序生命周期#

这一组内容把工作流用于医疗程序生命周期。业务表中的状态仍是业务事实,工作流负责协调跨步骤逻辑。

本页偏概念说明,重点是理解该机制解决什么问题、何时使用,以及它与工作流、任务、页面或数据模型的边界。

图 25.3.1-1 学习医疗程序生命周期
图 25.3.1-2 学习医疗程序生命周期

25.3.2 查看医疗程序生命周期#

这一组内容把工作流用于医疗程序生命周期。业务表中的状态仍是业务事实,工作流负责协调跨步骤逻辑。

本页按官方教程说明该主题的目的、配置路径和验证方式;阅读时应对照 APEX Builder 当前界面逐步复现。

图 25.3.2-1 查看医疗程序生命周期

25.3.3 建模医疗程序生命周期#

这一组内容把工作流用于医疗程序生命周期。业务表中的状态仍是业务事实,工作流负责协调跨步骤逻辑。

本页按官方教程说明该主题的目的、配置路径和验证方式;阅读时应对照 APEX Builder 当前界面逐步复现。

本页涉及的关键 APEX 标签或对象包括:Wait、Switch。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

图 25.3.3-1 建模医疗程序生命周期

25.3.4 启动生命周期工作流#

这一组内容把工作流用于医疗程序生命周期。业务表中的状态仍是业务事实,工作流负责协调跨步骤逻辑。

官方步骤的重点是创建或启动相应对象:先进入正确的 Builder 入口,设置名称、类型、来源和目标,再保存并运行验证。

本页涉及的关键 APEX 标签或对象包括:APEX_WORKFLOW、Invoke API、SQL、PL/SQL。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

-- in frc_onboarding package procedure completed_registration(p_patient_id number) is l_patient t_patient := patient(p_patient_id); l_new_procedure_id number; begin -- insert initial procedure for j in (select l_patient.id as patient_id, code, 'AwaitingSchedule' as status, price, duration_hours from frc_medical_procedures where code = l_patient.initial_procedure) loop insert into frc_patient_procedures( patient_id, medical_procedure, status, amount_due, duration_hours) values ( j.patient_id, j.code, j.status, j.price, j.duration_hours) return id into l_new_procedure_id; start_workflow_for(l_new_procedure_id); end loop; end;
-- internal in package frc_procedure_lifecycle ------------------------------------------------------------------ -- Start a procedure_lifecycle workflow instance associated with -- the supplied patient procedure id ------------------------------------------------------------------ procedure start_workflow_for( p_procedure_id in number) is l_workflow_id number; begin l_workflow_id := apex_workflow.start_workflow( p_application_id => frc_app.clinic_app_id, p_static_id => 'procedure_lifecycle', p_detail_pk => p_procedure_id, p_initiator => 'ADMIN'); end start_workflow_for;
PLS-00221: 'START_WORKFLOW' is not a procedure or is undefined

25.3.5 跟踪医疗程序生命周期#

这一组内容把工作流用于医疗程序生命周期。业务表中的状态仍是业务事实,工作流负责协调跨步骤逻辑。

本页按官方教程说明该主题的目的、配置路径和验证方式;阅读时应对照 APEX Builder 当前界面逐步复现。

25.3.6 通知工作流数据变更#

这一组内容把工作流用于医疗程序生命周期。业务表中的状态仍是业务事实,工作流负责协调跨步骤逻辑。

本页说明通知类配置。重点是收件人来源、模板占位符、深链接、触发事件,以及通知发出前应具备的业务上下文。

本页涉及的关键 APEX 标签或对象包括:Wait、Automation、Trigger。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

25.4.1 导入应用与删除应用的区别#

这一组内容说明工作流维护。发布前需要区分开发实例与生产实例,并理解版本、Debug、字典视图和清理策略。

本页属于维护和发布主题。重点是开发模式、版本状态、Debug 跟踪、导入升级、清理策略和生产部署边界。

25.4.2 识别开发模式#

这一组内容说明工作流维护。发布前需要区分开发实例与生产实例,并理解版本、Debug、字典视图和清理策略。

本页偏概念说明,重点是理解该机制解决什么问题、何时使用,以及它与工作流、任务、页面或数据模型的边界。

图 25.4.2-1 识别开发模式
图 25.4.2-2 识别开发模式

25.4.3 调试业务流程逻辑#

这一组内容说明工作流维护。发布前需要区分开发实例与生产实例,并理解版本、Debug、字典视图和清理策略。

本页属于维护和发布主题。重点是开发模式、版本状态、Debug 跟踪、导入升级、清理策略和生产部署边界。

本页涉及的关键 APEX 标签或对象包括:APEX_DEBUG。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

25.4.4 访问工作流和任务数据#

这一组内容说明工作流维护。发布前需要区分开发实例与生产实例,并理解版本、Debug、字典视图和清理策略。

本页说明如何查看或检索运行时信息。关注可用视图、页面入口、查询字段和展示范围,避免把内部状态误当成业务状态。

本页涉及的关键 APEX 标签或对象包括:Activities、APEX_WORKFLOW、APEX_HUMAN_TASK。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

Workflow View Parent View
Definitions APEX_APPL_WORKFLOWS APEX_APPLICATIONS
Parameter Definitions APEX_APPL_WORKFLOW_PARAMS APEX_APPL_WORKFLOWS
Process Parameter Values APEX_APPL_WORKFLOW_COMP_PARAMS APEX_APPLICATION_PAGE_PROC
Versions APEX_APPL_WORKFLOW_VERSIONS APEX_APPL_WORKFLOWS
Variable Definitions APEX_APPL_WORKFLOW_VARIABLES APEX_APPL_WORKFLOW_VERSIONS
Participant Definitions APEX_APPL_WORKFLOW_PARTICIPANTS APEX_APPL_WORKFLOW_VERSIONS
Activity Definitions APEX_APPL_WORKFLOW_ACTIVITIES APEX_APPL_WORKFLOW_VERSIONS
Activity Variable Definitions APEX_APPL_WORKFLOW_ACT_VARS APEX_APPL_WORKFLOW_ACTIVITIES
Branches APEX_APPL_WORKFLOW_BRANCHES APEX_APPL_WORKFLOW_ACTIVITIES
Transitions APEX_APPL_WORKFLOW_TRANSITIONS APEX_APPL_WORKFLOW_ACTIVITIES
Instances APEX_WORKFLOWS APEX_APPL_WORKFLOW_VERSIONS
Activities APEX_WORKFLOW_ACTIVITIES APEX_WORKFLOWS
Activity Variables APEX_WORKFLOW_ACTIVITY_VARS APEX_WORKFLOW_ACTIVITIES
Variables APEX_WORKFLOW_VARIABLES APEX_WORKFLOWS
Parameters APEX_WORKFLOW_PARMETERS APEX_WORKFLOWS
Participants APEX_WORKFLOW_PARTICIPANTS APEX_WORKFLOWS
Audit APEX_WORKFLOW_AUDIT APEX_WORKFLOWS
Task View Parent View
Definitions APEX_APPL_TASKDEFS APEX_APPLICATIONS
Parameter Definitions APEX_APPL_TASKDEF_PARAMS APEX_APPL_TASKDEFS
Participant Definitions APEX_APPL_TASKDEF_PARTICIPANTS APEX_APPL_TASKDEFS
Action Definitions APEX_APPL_TASKDEF_ACTIONS APEX_APPL_TASKDEFS
Instances APEX_TASKS APEX_APPL_TASKDEFS
Parameters APEX_TASK_PARMETERS APEX_TASKS
Participants APEX_TASK_PARTICIPANTS APEX_TASKS
History APEX_TASK_HISTORY APEX_TASKS
Comments APEX_TASK_COMMENTS APEX_TASKS
图 25.4.4-1 访问工作流和任务数据
图 25.4.4-2 访问工作流和任务数据

25.4.5 理解任务和工作流清理#

这一组内容说明工作流维护。发布前需要区分开发实例与生产实例,并理解版本、Debug、字典视图和清理策略。

本页偏概念说明,重点是理解该机制解决什么问题、何时使用,以及它与工作流、任务、页面或数据模型的边界。

25.4.6 激活开发中的工作流#

这一组内容说明工作流维护。发布前需要区分开发实例与生产实例,并理解版本、Debug、字典视图和清理策略。

本页属于维护和发布主题。重点是开发模式、版本状态、Debug 跟踪、导入升级、清理策略和生产部署边界。

本页涉及的关键 APEX 标签或对象包括:Property Editor。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

图 25.4.6-1 激活开发中的工作流

25.4.7 将工作流部署到生产#

这一组内容说明工作流维护。发布前需要区分开发实例与生产实例,并理解版本、Debug、字典视图和清理策略。

本页属于维护和发布主题。重点是开发模式、版本状态、Debug 跟踪、导入升级、清理策略和生产部署边界。

图 25.4.7-1 将工作流部署到生产

25.4.8 删除没有实例的工作流#

这一组内容说明工作流维护。发布前需要区分开发实例与生产实例,并理解版本、Debug、字典视图和清理策略。

本页属于维护和发布主题。重点是开发模式、版本状态、Debug 跟踪、导入升级、清理策略和生产部署边界。

本页涉及的关键 APEX 标签或对象包括:APEX_WORKFLOW、SQL。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

-- list procedure_lifecycle workflow versions in use select distinct workflow_version from apex_workflows where application_id = 103 and workflow_def_static_id = 'procedure_lifecycle' order by workflow_version

25.4.9 移除开发实例#

这一组内容说明工作流维护。发布前需要区分开发实例与生产实例,并理解版本、Debug、字典视图和清理策略。

本页属于维护和发布主题。重点是开发模式、版本状态、Debug 跟踪、导入升级、清理策略和生产部署边界。

本页涉及的关键 APEX 标签或对象包括:APEX_WORKFLOW。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

25.1.3.1 从面板添加活动#

这一组内容聚焦工作流建模基础:在 Workflow Designer 中放置活动、连接路径、设置参数变量,并让工作流在后台可靠执行。

官方步骤的重点是创建或启动相应对象:先进入正确的 Builder 入口,设置名称、类型、来源和目标,再保存并运行验证。

本页涉及的关键 APEX 标签或对象包括:Activities。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

图 25.1.3.1-1 从面板添加活动

25.1.3.2 命名新活动#

这一组内容聚焦工作流建模基础:在 Workflow Designer 中放置活动、连接路径、设置参数变量,并让工作流在后台可靠执行。

本页按官方教程说明该主题的目的、配置路径和验证方式;阅读时应对照 APEX Builder 当前界面逐步复现。

本页涉及的关键 APEX 标签或对象包括:Activities、Property Editor。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

图 25.1.3.2-1 命名新活动

25.1.3.3 更改连接的目标活动#

这一组内容聚焦工作流建模基础:在 Workflow Designer 中放置活动、连接路径、设置参数变量,并让工作流在后台可靠执行。

本页按官方教程说明该主题的目的、配置路径和验证方式;阅读时应对照 APEX Builder 当前界面逐步复现。

本页涉及的关键 APEX 标签或对象包括:Activities。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

图 25.1.3.3-1 更改连接的目标活动

25.1.3.4 使用锚点微调连线斜率#

这一组内容聚焦工作流建模基础:在 Workflow Designer 中放置活动、连接路径、设置参数变量,并让工作流在后台可靠执行。

本页按官方教程说明该主题的目的、配置路径和验证方式;阅读时应对照 APEX Builder 当前界面逐步复现。

本页涉及的关键 APEX 标签或对象包括:Activities。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

图 25.1.3.4-1 使用锚点微调连线斜率
图 25.1.3.4-2 使用锚点微调连线斜率

25.1.3.5 使用拖拽手柄移动连接#

这一组内容聚焦工作流建模基础:在 Workflow Designer 中放置活动、连接路径、设置参数变量,并让工作流在后台可靠执行。

本页按官方教程说明该主题的目的、配置路径和验证方式;阅读时应对照 APEX Builder 当前界面逐步复现。

本页涉及的关键 APEX 标签或对象包括:Activities。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

图 25.1.3.5-1 使用拖拽手柄移动连接

25.1.3.6 在活动之间添加连接#

这一组内容聚焦工作流建模基础:在 Workflow Designer 中放置活动、连接路径、设置参数变量,并让工作流在后台可靠执行。

官方步骤的重点是创建或启动相应对象:先进入正确的 Builder 入口,设置名称、类型、来源和目标,再保存并运行验证。

本页涉及的关键 APEX 标签或对象包括:Activities。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

图 25.1.3.6-1 在活动之间添加连接

25.1.3.7 使用折点弯折连接#

这一组内容聚焦工作流建模基础:在 Workflow Designer 中放置活动、连接路径、设置参数变量,并让工作流在后台可靠执行。

本页按官方教程说明该主题的目的、配置路径和验证方式;阅读时应对照 APEX Builder 当前界面逐步复现。

本页涉及的关键 APEX 标签或对象包括:Activities。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

图 25.1.3.7-1 使用折点弯折连接
图 25.1.3.7-2 使用折点弯折连接
图 25.1.3.7-3 使用折点弯折连接

25.1.3.8 从现有活动添加下一活动#

这一组内容聚焦工作流建模基础:在 Workflow Designer 中放置活动、连接路径、设置参数变量,并让工作流在后台可靠执行。

官方步骤的重点是创建或启动相应对象:先进入正确的 Builder 入口,设置名称、类型、来源和目标,再保存并运行验证。

本页涉及的关键 APEX 标签或对象包括:Activities、Property Editor、Switch。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

图 25.1.3.8-1 从现有活动添加下一活动
图 25.1.3.8-2 从现有活动添加下一活动

25.1.3.9 配置 Switch 连接#

这一组内容聚焦工作流建模基础:在 Workflow Designer 中放置活动、连接路径、设置参数变量,并让工作流在后台可靠执行。

官方步骤的重点是配置属性:确认对象范围,设置必要参数、条件、可见性或行为,然后通过运行页面检查配置是否生效。

本页涉及的关键 APEX 标签或对象包括:Activities、Switch。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

图 25.1.3.9-1 配置 Switch 连接

25.1.3.10 在现有活动之间插入活动#

这一组内容聚焦工作流建模基础:在 Workflow Designer 中放置活动、连接路径、设置参数变量,并让工作流在后台可靠执行。

官方步骤的重点是创建或启动相应对象:先进入正确的 Builder 入口,设置名称、类型、来源和目标,再保存并运行验证。

本页涉及的关键 APEX 标签或对象包括:Activities。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

图 25.1.3.10-1 在现有活动之间插入活动
图 25.1.3.10-2 在现有活动之间插入活动

25.1.3.11 移动一组活动#

这一组内容聚焦工作流建模基础:在 Workflow Designer 中放置活动、连接路径、设置参数变量,并让工作流在后台可靠执行。

本页按官方教程说明该主题的目的、配置路径和验证方式;阅读时应对照 APEX Builder 当前界面逐步复现。

本页涉及的关键 APEX 标签或对象包括:Activities。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

图 25.1.3.11-1 移动一组活动
图 25.1.3.11-2 移动一组活动

25.1.3.12 将连接置于活动前方#

这一组内容聚焦工作流建模基础:在 Workflow Designer 中放置活动、连接路径、设置参数变量,并让工作流在后台可靠执行。

本页按官方教程说明该主题的目的、配置路径和验证方式;阅读时应对照 APEX Builder 当前界面逐步复现。

本页涉及的关键 APEX 标签或对象包括:Activities。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

图 25.1.3.12-1 将连接置于活动前方
图 25.1.3.12-2 将连接置于活动前方

25.1.7.1 创建工作流参数#

这一组内容聚焦工作流建模基础:在 Workflow Designer 中放置活动、连接路径、设置参数变量,并让工作流在后台可靠执行。

官方步骤的重点是创建或启动相应对象:先进入正确的 Builder 入口,设置名称、类型、来源和目标,再保存并运行验证。

本页涉及的关键 APEX 标签或对象包括:Property Editor。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

25.1.7.2 创建工作流变量#

这一组内容聚焦工作流建模基础:在 Workflow Designer 中放置活动、连接路径、设置参数变量,并让工作流在后台可靠执行。

官方步骤的重点是创建或启动相应对象:先进入正确的 Builder 入口,设置名称、类型、来源和目标,再保存并运行验证。

本页涉及的关键 APEX 标签或对象包括:Property Editor、Human Task、Invoke API。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

25.1.9.1 将工作分配到用户任务收件箱#

这一组内容聚焦工作流中的审批和用户输入。Human Task 活动把后台流程与用户任务列表连接起来。

本页说明对象之间的关系和责任分配。关注参数传递、参与者来源、任务分配规则,以及特殊情况的处理。

本页涉及的关键 APEX 标签或对象包括:Human Task、Task Definition、Potential Owners、Page Designer。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

图 25.1.9.1-1 将工作分配到用户任务收件箱

25.1.9.2 等待信号后继续#

这一组内容聚焦工作流中的审批和用户输入。Human Task 活动把后台流程与用户任务列表连接起来。

本页说明异步流程控制。关注等待点、继续信号、超时或事件处理,以及重复触发和权限校验。

本页涉及的关键 APEX 标签或对象包括:APEX_WORKFLOW、Wait、Deep Linking。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

25.1.10.1 配置静态工作流参与者#

这一组内容聚焦工作流建模基础:在 Workflow Designer 中放置活动、连接路径、设置参数变量,并让工作流在后台可靠执行。

官方步骤的重点是配置属性:确认对象范围,设置必要参数、条件、可见性或行为,然后通过运行页面检查配置是否生效。

本页涉及的关键 APEX 标签或对象包括:Property Editor、SQL。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

图 25.1.10.1-1 配置静态工作流参与者

25.1.10.2 动态确定参与者#

这一组内容聚焦工作流建模基础:在 Workflow Designer 中放置活动、连接路径、设置参数变量,并让工作流在后台可靠执行。

本页说明对象之间的关系和责任分配。关注参数传递、参与者来源、任务分配规则,以及特殊情况的处理。

本页涉及的关键 APEX 标签或对象包括:APEX_WORKFLOW、SQL、PL/SQL。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

your_app_pkg .owners_for_workflow(:APEX$WORKFLOW_ID)

25.1.10.3 传入工作流参与者#

这一组内容聚焦工作流建模基础:在 Workflow Designer 中放置活动、连接路径、设置参数变量,并让工作流在后台可靠执行。

本页说明对象之间的关系和责任分配。关注参数传递、参与者来源、任务分配规则,以及特殊情况的处理。

本页涉及的关键 APEX 标签或对象包括:SQL。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

:P_ASSIGNEE_LIST
select column_value from apex_string.split(:P_ASSIGNEE_LIST,':')

25.2.1.1 咨询医疗程序#

这一组内容使用 Woods Clinic 患者入院作为完整示例,展示如何从手工流程识别自动化机会并逐步建立工作流。

本页按官方教程说明该主题的目的、配置路径和验证方式;阅读时应对照 APEX Builder 当前界面逐步复现。

图 25.2.1.1-1 咨询医疗程序
图 25.2.1.1-2 咨询医疗程序

25.2.1.2 手动为患者办理入院#

这一组内容使用 Woods Clinic 患者入院作为完整示例,展示如何从手工流程识别自动化机会并逐步建立工作流。

本页按官方教程说明该主题的目的、配置路径和验证方式;阅读时应对照 APEX Builder 当前界面逐步复现。

25.2.6.1 将活动应用到患者入院流程#

这一组内容使用 Woods Clinic 患者入院作为完整示例,展示如何从手工流程识别自动化机会并逐步建立工作流。

本页按官方教程说明该主题的目的、配置路径和验证方式;阅读时应对照 APEX Builder 当前界面逐步复现。

本页涉及的关键 APEX 标签或对象包括:Activities、Human Task、Wait、Switch、Invoke API。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

图 25.2.6.1-1 将活动应用到患者入院流程

25.2.6.2 使用 API 评估空间距离#

这一组内容使用 Woods Clinic 患者入院作为完整示例,展示如何从手工流程识别自动化机会并逐步建立工作流。

本页偏概念说明,重点是理解该机制解决什么问题、何时使用,以及它与工作流、任务、页面或数据模型的边界。

本页涉及的关键 APEX 标签或对象包括:Property Editor、Invoke API、SQL、PL/SQL。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

-- Result = 'Within Range' or 'Out of Range' function evaluate_proximity(p_patient_id number) return varchar2 is l_result_val varchar2(30); /* | Assume the clinic is located at: | 1244 Cotter Way, Hayward, CA 94541 */ c_clinic_lat constant number := 37.68255; c_clinic_long constant number := -122.09026; begin begin select case when sdo_geom.sdo_distance( sdo_geometry(2001,4326, sdo_point_type(pat.address_longitude, pat.address_latitude, null),null,null), sdo_geometry(2001,4326, sdo_point_type(c_clinic_long, c_clinic_lat, null),null,null), tol=>1, unit=>'unit=KM' ) > 400 /* Kilometers */ then 'Out of Range' else 'Within Range' end into l_result_val from frc_patients pat where pat.id = p_patient_id and address_latitude is not null and address_longitude is not null; exception when no_data_found then l_result_val := 'Within Range'; end; return l_result_val; end;
图 25.2.6.2-1 使用 API 评估空间距离
图 25.2.6.2-2 使用 API 评估空间距离
图 25.2.6.2-3 使用 API 评估空间距离

25.2.6.3 使用条件切换路径#

这一组内容使用 Woods Clinic 患者入院作为完整示例,展示如何从手工流程识别自动化机会并逐步建立工作流。

本页按官方教程说明该主题的目的、配置路径和验证方式;阅读时应对照 APEX Builder 当前界面逐步复现。

本页涉及的关键 APEX 标签或对象包括:Switch。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

Type Routes Based On Outbound Connections
Check Workflow Variable Distinct values of a variable One connection per unique value. Otherwise evaluated last.
Case Distinct values of an expression Any number of connections, each configured with an Execute Sequence. First in sequence to evaluate to true is used. Sequence Otherwise last if used.
True False Check True or false result of boolean expression One True, one False
If Elsif Else Evaluating connection conditions in execution sequence order Any number of connections, each with a Server-side Condition configured and an Execute Sequence. First in sequence to evaluate to true is used.
图 25.2.6.3-1 使用条件切换路径
图 25.2.6.3-2 使用条件切换路径

25.2.6.4 使用机器学习预测结果#

这一组内容使用 Woods Clinic 患者入院作为完整示例,展示如何从手工流程识别自动化机会并逐步建立工作流。

本页偏概念说明,重点是理解该机制解决什么问题、何时使用,以及它与工作流、任务、页面或数据模型的边界。

25.2.6.5 可视化工作流进度#

这一组内容使用 Woods Clinic 患者入院作为完整示例,展示如何从手工流程识别自动化机会并逐步建立工作流。

本页按官方教程说明该主题的目的、配置路径和验证方式;阅读时应对照 APEX Builder 当前界面逐步复现。

图 25.2.6.5-1 可视化工作流进度
图 25.2.6.5-2 可视化工作流进度

25.2.6.6 等待人工任务完成#

这一组内容使用 Woods Clinic 患者入院作为完整示例,展示如何从手工流程识别自动化机会并逐步建立工作流。

本页说明异步流程控制。关注等待点、继续信号、超时或事件处理,以及重复触发和权限校验。

本页涉及的关键 APEX 标签或对象包括:Human Task、Task Definition、Wait、Create Page Wizard。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

图 25.2.6.6-1 等待人工任务完成
图 25.2.6.6-2 等待人工任务完成
图 25.2.6.6-3 等待人工任务完成

25.2.6.7 通过邮件通知用户拒绝结果#

这一组内容使用 Woods Clinic 患者入院作为完整示例,展示如何从手工流程识别自动化机会并逐步建立工作流。

本页说明通知类配置。重点是收件人来源、模板占位符、深链接、触发事件,以及通知发出前应具备的业务上下文。

本页涉及的关键 APEX 标签或对象包括:Workflow Designer、Send Email。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

图 25.2.6.7-1 通过邮件通知用户拒绝结果
图 25.2.6.7-2 通过邮件通知用户拒绝结果

25.2.6.8 预配新用户账户#

这一组内容使用 Woods Clinic 患者入院作为完整示例,展示如何从手工流程识别自动化机会并逐步建立工作流。

本页按官方教程说明该主题的目的、配置路径和验证方式;阅读时应对照 APEX Builder 当前界面逐步复现。

本页涉及的关键 APEX 标签或对象包括:Wait、SQL、PL/SQL。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

图 25.2.6.8-1 预配新用户账户

25.2.6.9 等待患者完善档案#

这一组内容使用 Woods Clinic 患者入院作为完整示例,展示如何从手工流程识别自动化机会并逐步建立工作流。

本页说明异步流程控制。关注等待点、继续信号、超时或事件处理,以及重复触发和权限校验。

本页涉及的关键 APEX 标签或对象包括:Wait。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

图 25.2.6.9-1 等待患者完善档案

25.3.5.1 启动 Woods Clinic 应用#

这一组内容把工作流用于医疗程序生命周期。业务表中的状态仍是业务事实,工作流负责协调跨步骤逻辑。

官方步骤的重点是创建或启动相应对象:先进入正确的 Builder 入口,设置名称、类型、来源和目标,再保存并运行验证。

图 25.3.5.1-1 启动 Woods Clinic 应用
图 25.3.5.1-2 启动 Woods Clinic 应用
图 25.3.5.1-3 启动 Woods Clinic 应用
图 25.3.5.1-4 启动 Woods Clinic 应用

25.3.5.2 安排医疗程序#

这一组内容把工作流用于医疗程序生命周期。业务表中的状态仍是业务事实,工作流负责协调跨步骤逻辑。

本页按官方教程说明该主题的目的、配置路径和验证方式;阅读时应对照 APEX Builder 当前界面逐步复现。

图 25.3.5.2-1 安排医疗程序
图 25.3.5.2-2 安排医疗程序
图 25.3.5.2-3 安排医疗程序
图 25.3.5.2-4 安排医疗程序
图 25.3.5.2-5 安排医疗程序

25.3.5.3 接收医疗程序排期#

这一组内容把工作流用于医疗程序生命周期。业务表中的状态仍是业务事实,工作流负责协调跨步骤逻辑。

本页按官方教程说明该主题的目的、配置路径和验证方式;阅读时应对照 APEX Builder 当前界面逐步复现。

图 25.3.5.3-1 接收医疗程序排期

25.3.5.4 程序完成后让患者出院#

这一组内容把工作流用于医疗程序生命周期。业务表中的状态仍是业务事实,工作流负责协调跨步骤逻辑。

本页按官方教程说明该主题的目的、配置路径和验证方式;阅读时应对照 APEX Builder 当前界面逐步复现。

图 25.3.5.4-1 程序完成后让患者出院
图 25.3.5.4-2 程序完成后让患者出院
图 25.3.5.4-3 程序完成后让患者出院

25.3.5.5 准备像素级精确 PDF 发票#

这一组内容把工作流用于医疗程序生命周期。业务表中的状态仍是业务事实,工作流负责协调跨步骤逻辑。

本页说明文档或内容生成流程。关注数据查询、模板布局、后台执行和生成结果如何回写或交付。

25.3.5.6 与保险机构审核发票#

这一组内容把工作流用于医疗程序生命周期。业务表中的状态仍是业务事实,工作流负责协调跨步骤逻辑。

本页说明如何查看或检索运行时信息。关注可用视图、页面入口、查询字段和展示范围,避免把内部状态误当成业务状态。

图 25.3.5.6-1 与保险机构审核发票
图 25.3.5.6-2 与保险机构审核发票
图 25.3.5.6-3 与保险机构审核发票

25.3.5.7 在后台重新生成发票#

这一组内容把工作流用于医疗程序生命周期。业务表中的状态仍是业务事实,工作流负责协调跨步骤逻辑。

本页说明文档或内容生成流程。关注数据查询、模板布局、后台执行和生成结果如何回写或交付。

图 25.3.5.7-1 在后台重新生成发票
图 25.3.5.7-2 在后台重新生成发票
图 25.3.5.7-3 在后台重新生成发票

25.3.5.8 向患者开具余额发票#

这一组内容把工作流用于医疗程序生命周期。业务表中的状态仍是业务事实,工作流负责协调跨步骤逻辑。

本页按官方教程说明该主题的目的、配置路径和验证方式;阅读时应对照 APEX Builder 当前界面逐步复现。

图 25.3.5.8-1 向患者开具余额发票
图 25.3.5.8-2 向患者开具余额发票
图 25.3.5.8-3 向患者开具余额发票
图 25.3.5.8-4 向患者开具余额发票

25.3.5.9 确认收到付款#

这一组内容把工作流用于医疗程序生命周期。业务表中的状态仍是业务事实,工作流负责协调跨步骤逻辑。

本页按官方教程说明该主题的目的、配置路径和验证方式;阅读时应对照 APEX Builder 当前界面逐步复现。

图 25.3.5.9-1 确认收到付款
图 25.3.5.9-2 确认收到付款
图 25.3.5.9-3 确认收到付款

25.3.5.10 确认生命周期完成#

这一组内容把工作流用于医疗程序生命周期。业务表中的状态仍是业务事实,工作流负责协调跨步骤逻辑。

本页按官方教程说明该主题的目的、配置路径和验证方式;阅读时应对照 APEX Builder 当前界面逐步复现。

图 25.3.5.10-1 确认生命周期完成
图 25.3.5.10-2 确认生命周期完成

25.3.6.1 理解生命周期事件策略#

这一组内容把工作流用于医疗程序生命周期。业务表中的状态仍是业务事实,工作流负责协调跨步骤逻辑。

本页偏概念说明,重点是理解该机制解决什么问题、何时使用,以及它与工作流、任务、页面或数据模型的边界。

本页涉及的关键 APEX 标签或对象包括:APEX_WORKFLOW、Automation。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

图 25.3.6.1-1 理解生命周期事件策略

25.3.6.2 简化事件管理#

这一组内容把工作流用于医疗程序生命周期。业务表中的状态仍是业务事实,工作流负责协调跨步骤逻辑。

本页按官方教程说明该主题的目的、配置路径和验证方式;阅读时应对照 APEX Builder 当前界面逐步复现。

package frc_procedure_lifecycle is type t_lifecycle_event is record (id frc_patient_procedure_events.id%type); type t_lifecycle_events is table of t_lifecycle_event; ------------------------------------------------------------------ -- Add procedure lifecycle event to table processed by automation ------------------------------------------------------------------ procedure add_event( p_procedure_id in number, p_type in varchar2); ------------------------------------------------------------------ -- Process procedure lifecycle event (called by automation) ------------------------------------------------------------------ procedure process_event( p_event_id in number); ------------------------------------------------------------------ -- Return list of event ids to process (used in automation query) ------------------------------------------------------------------ function event_list return t_lifecycle_events pipelined; end frc_procedure_lifecycle;
-- external in package frc_procedure_lifecycle procedure add_event( p_procedure_id in number, p_type in varchar2) is begin insert into frc_patient_procedure_events(procedure_id, event_type) values (p_procedure_id, p_type); end add_event;
-- external in package frc_procedure_lifecycle procedure process_event( p_event_id in number) is l_success boolean := false; begin for j in (select id, procedure_id, event_type from frc_patient_procedure_events where id = p_event_id ) loop if j.event_type in ('STATUS','SCHEDULE') then l_success := notify_data_changed(j.procedure_id,j.event_type); if l_success then delete from frc_patient_procedure_events where id = p_event_id; end if; end if; end loop; end process_event;
function event_list return t_lifecycle_events pipelined is begin for j in (select id from (select id, row_number() over (partition by procedure_id order by created) as rn from frc_patient_procedure_events ) where rn = 1) loop pipe row (t_lifecycle_event(j.id)); end loop; exception when no_data_needed then null; end event_list;

25.3.6.3 使用触发器添加事件#

这一组内容把工作流用于医疗程序生命周期。业务表中的状态仍是业务事实,工作流负责协调跨步骤逻辑。

官方步骤的重点是创建或启动相应对象:先进入正确的 Builder 入口,设置名称、类型、来源和目标,再保存并运行验证。

本页涉及的关键 APEX 标签或对象包括:Trigger。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

trigger frc_patient_procedures_au after update on frc_patient_procedures for each row declare l_event_type varchar2(80); begin if :new.status != :old.status then l_event_type := 'STATUS'; elsif :new.procedure_date != :old.procedure_date or :new.doctor != :old.doctor or :new.duration_hours != :old.duration_hours then l_event_type := 'SCHEDULE'; end if; if l_event_type is not null then frc_procedure_lifecycle.add_event(:new.id, l_event_type); end if; end;

25.3.6.4 使用自动化处理事件#

这一组内容把工作流用于医疗程序生命周期。业务表中的状态仍是业务事实,工作流负责协调跨步骤逻辑。

本页按官方教程说明该主题的目的、配置路径和验证方式;阅读时应对照 APEX Builder 当前界面逐步复现。

本页涉及的关键 APEX 标签或对象包括:Automation。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

select id from table(frc_procedure_lifecycle.event_list)
frc_procedure_lifecycle.process_event(:ID);
图 25.3.6.4-1 使用自动化处理事件
图 25.3.6.4-2 使用自动化处理事件
图 25.3.6.4-3 使用自动化处理事件
图 25.3.6.4-4 使用自动化处理事件

25.3.6.5 继续等待中的生命周期工作流#

这一组内容把工作流用于医疗程序生命周期。业务表中的状态仍是业务事实,工作流负责协调跨步骤逻辑。

本页说明异步流程控制。关注等待点、继续信号、超时或事件处理,以及重复触发和权限校验。

本页涉及的关键 APEX 标签或对象包括:APEX_WORKFLOW、Wait。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

-- internal in package frc_procedure_lifecycle ------------------------------------------------------------------ -- Notify an instance of the procedure_lifecycle workflow associated -- with the supplied patient procedure id that ------------------------------------------------------------------ function notify_data_changed( p_procedure_id in number, p_event_type in varchar2) return boolean is l_workflow_id number := workflow_id_for_waiting_activity( 'procedure_lifecycle', 'status_or_date_changed', p_procedure_id); begin if l_workflow_id is not null then apex_workflow.continue_activity( p_instance_id => l_workflow_id, p_static_id => 'status_or_date_changed', p_activity_params => apex_global_application.vc_map( 'V_WHAT_CHANGED' => p_event_type)); return true; end if; return false; end notify_data_changed;
-- internal in package frc_procedure_lifecycle ------------------------------------------------------------------ -- Return the active workflow id of static def id type passed in -- associated with provided PK and having a waiting activity with -- supplied static id that can be continued. Otherwise, null ------------------------------------------------------------------ function workflow_id_for_waiting_activity( p_workflow_static_id in varchar2, p_waiting_activity_static_id in varchar2, p_details_pk in varchar2) return number is l_ret number; begin -- Only return the workflow id if the workflow is in ACTIVE -- state and the indicated continue activity is in WAITING state for wf in ( select workflow_id from apex_workflow_activities ac join apex_workflows wf using (workflow_id) where wf.detail_pk = p_details_pk and wf.workflow_def_static_id = p_workflow_static_id and ac.static_id = p_waiting_activity_static_id and ac.state = 'WAITING' and wf.state_code = 'ACTIVE') loop l_ret := wf.workflow_id; end loop; if l_ret is null then apex_debug.warn('workflow_id_for_waiting_activity: No active workflow (%s)' |' with activity (%s) waiting for pk (%s)', p_workflow_static_id, p_waiting_activity_static_id, p_workflow_static_id); end if; return l_ret; end workflow_id_for_waiting_activity;

25.4.3.1 查询最近的 Debug 消息#

这一组内容说明工作流维护。发布前需要区分开发实例与生产实例,并理解版本、Debug、字典视图和清理策略。

本页说明如何查看或检索运行时信息。关注可用视图、页面入口、查询字段和展示范围,避免把内部状态误当成业务状态。

本页涉及的关键 APEX 标签或对象包括:APEX_DEBUG、SQL。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

select apex_util.get_since(message_timestamp) as when, message from apex_debug_messages order by message_timestamp desc
select message_timestamp, elapsed_time, execution_time, message, page_id, workflow_instance_id, session_id, message_level, trim(replace(call_stack,'%')) as call_stack from apex_debug_messages where application_id = :APP_ID and apex_user = 'nobody' and call_stack like '%\%WORKFLOW.%' escape '\' and message_level < 9 order by message_timestamp desc

25.4.3.2 主动启用 Debug 跟踪#

这一组内容说明工作流维护。发布前需要区分开发实例与生产实例,并理解版本、Debug、字典视图和清理策略。

本页属于维护和发布主题。重点是开发模式、版本状态、Debug 跟踪、导入升级、清理策略和生产部署边界。

本页涉及的关键 APEX 标签或对象包括:Property Editor。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

图 25.4.3.2-1 主动启用 Debug 跟踪
图 25.4.3.2-2 主动启用 Debug 跟踪

25.4.3.3 查看 Debug 跟踪信息#

这一组内容说明工作流维护。发布前需要区分开发实例与生产实例,并理解版本、Debug、字典视图和清理策略。

本页说明如何查看或检索运行时信息。关注可用视图、页面入口、查询字段和展示范围,避免把内部状态误当成业务状态。

本页涉及的关键 APEX 标签或对象包括:APEX_WORKFLOW。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

start_workflow: ORA-20999: Additional data row … not found
图 25.4.3.3-1 查看 Debug 跟踪信息
图 25.4.3.3-2 查看 Debug 跟踪信息

25.4.3.4 添加自定义 Debug 消息#

这一组内容说明工作流维护。发布前需要区分开发实例与生产实例,并理解版本、Debug、字典视图和清理策略。

官方步骤的重点是创建或启动相应对象:先进入正确的 Builder 入口,设置名称、类型、来源和目标,再保存并运行验证。

本页涉及的关键 APEX 标签或对象包括:APEX_DEBUG。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

apex_debug.info('### somevar=(%s), someexpr=(%s), anotherexpr=(%s)', :SOMEVAR , some_expression , another_expression );
apex_debug.info('### somevar=(%2), someexpr=(%0), anotherexpr=(%1)', some_expression , another_expression , :SOMEVAR );

25.1.9.1.1 判断任务是否需要结果#

这一组内容聚焦任务参与者。参与者可以静态配置、动态计算或通过参数传入,决定谁能看到和处理任务。

本页偏概念说明,重点是理解该机制解决什么问题、何时使用,以及它与工作流、任务、页面或数据模型的边界。

本页涉及的关键 APEX 标签或对象包括:Task Definition。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

图 25.1.9.1.1-1 判断任务是否需要结果
图 25.1.9.1.1-2 判断任务是否需要结果
图 25.1.9.1.1-3 判断任务是否需要结果

25.1.9.1.2 将表与任务关联#

这一组内容聚焦患者入院自动化中的具体活动:API 调用、条件分支、人工审批、拒绝邮件、账户创建和等待资料补全。

本页说明对象之间的关系和责任分配。关注参数传递、参与者来源、任务分配规则,以及特殊情况的处理。

本页涉及的关键 APEX 标签或对象包括:SQL、PL/SQL。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

25.1.9.1.3 在参数中接收输入值#

这一组内容聚焦人工任务运行时体验:任务详情、审批人、时限、变更事件和通知链接共同决定用户如何完成工作。

本页说明运行时数据处理。重点是页面项、任务参数、工作流变量和业务表列之间的数据流,以及提交前后的校验。

update emp set sal = :P_PROPOSED_SAL where empno = :EMPNO;

25.1.9.1.4 确定任务参与者#

这一组内容聚焦 Wait 活动和外部信号:页面或应用逻辑可以在合适时机唤醒等待中的工作流,并把必要数据返回给后续步骤。

本页说明对象之间的关系和责任分配。关注参数传递、参与者来源、任务分配规则,以及特殊情况的处理。

25.1.9.1.5 理解任务状态#

这一组内容聚焦机器学习、通知和按需查询:工作流把预测结果、模板消息和活动数据组合进业务路径。

本页偏概念说明,重点是理解该机制解决什么问题、何时使用,以及它与工作流、任务、页面或数据模型的边界。

图 25.1.9.1.5-1 理解任务状态

25.1.9.1.6 为用户创建任务“收件箱”页面#

这一组内容聚焦患者入院示例的账户预配和等待逻辑:工作流可以调用 API、创建后台请求、发送通知,并等待患者完成资料。

官方步骤的重点是创建或启动相应对象:先进入正确的 Builder 入口,设置名称、类型、来源和目标,再保存并运行验证。

本页涉及的关键 APEX 标签或对象包括:Create Page Wizard。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

25.1.9.1.7 使用人工任务收集数据#

这一组内容聚焦 Task Definition:任务是否需要 Outcome、如何关联业务表、如何接收参数、如何确定参与者,以及任务状态如何演进。

本页按官方教程说明该主题的目的、配置路径和验证方式;阅读时应对照 APEX Builder 当前界面逐步复现。

本页涉及的关键 APEX 标签或对象包括:Human Task。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

25.1.9.1.8 使用并调优任务详情页#

这一组内容聚焦任务列表和任务详情页:用户需要能看到自己发起或需要处理的工作项,并在详情页安全地查看、编辑和提交参数。

本页按官方教程说明该主题的目的、配置路径和验证方式;阅读时应对照 APEX Builder 当前界面逐步复现。

25.1.9.1.9 允许发起人审批任务#

这一组内容聚焦工作流中的审批和用户输入。Human Task 活动把后台流程与用户任务列表连接起来。

本页按官方教程说明该主题的目的、配置路径和验证方式;阅读时应对照 APEX Builder 当前界面逐步复现。

25.1.9.1.10 处理有时限要求的任务#

这一组内容聚焦任务参与者。参与者可以静态配置、动态计算或通过参数传入,决定谁能看到和处理任务。

本页说明异步流程控制。关注等待点、继续信号、超时或事件处理,以及重复触发和权限校验。

本页涉及的关键 APEX 标签或对象包括:SQL。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

25.1.9.1.11 响应任务变更事件#

这一组内容聚焦任务事件和通知:任务创建、完成或变更时,应用可以基于事件执行动作、发送邮件或更新业务数据。

本页说明异步流程控制。关注等待点、继续信号、超时或事件处理,以及重复触发和权限校验。

本页涉及的关键 APEX 标签或对象包括:Human Task。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

25.1.9.2.1 启用指向特定页面的深链接#

这一组内容聚焦工作流中的审批和用户输入。Human Task 活动把后台流程与用户任务列表连接起来。

本页属于维护和发布主题。重点是开发模式、版本状态、Debug 跟踪、导入升级、清理策略和生产部署边界。

本页涉及的关键 APEX 标签或对象包括:Wait、Deep Linking。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

图 25.1.9.2.1-1 启用指向特定页面的深链接

25.1.9.2.2 为通知生成页面 URL#

这一组内容聚焦工作流中的审批和用户输入。Human Task 活动把后台流程与用户任务列表连接起来。

本页说明文档或内容生成流程。关注数据查询、模板布局、后台执行和生成结果如何回写或交付。

本页涉及的关键 APEX 标签或对象包括:Wait。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

function absolute_page_url( p_page in number, p_activity_static_id in varchar2) return varchar2 is c_workflow_page_item constant varchar2(255) := 'P'||p_page||'_WORKFLOW_ID'; c_activity_static_id_item constant varchar2(255) := 'P'||p_page||'_ACTIVITY_STATIC_ID'; begin return apex_page.get_url( p_page => p_page, p_items => c_workflow_page_item ||',' ||c_activity_static_id_item, p_values => v('APEX$WORKFLOW_ID') ||',' ||p_activity_static_id, p_absolute_url => true, p_session => 0, p_debug => 'NO'); end absolute_page_url;

25.1.9.2.3 通过邮件发送页面链接#

这一组内容聚焦工作流中的审批和用户输入。Human Task 活动把后台流程与用户任务列表连接起来。

本页说明通知类配置。重点是收件人来源、模板占位符、深链接、触发事件,以及通知发出前应具备的业务上下文。

本页涉及的关键 APEX 标签或对象包括:Wait。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

select workflow_user_input.absolute_page_url( 5, 'user_provide_two_values' ) as link_to_page, (select email from apex_workspace_apex_users where user_name = :P_REQUESTED_USERNAME) as requested_user_email from dual
图 25.1.9.2.3-1 通过邮件发送页面链接
图 25.1.9.2.3-2 通过邮件发送页面链接

25.1.9.2.4 发送包含页面链接的推送通知#

这一组内容聚焦工作流中的审批和用户输入。Human Task 活动把后台流程与用户任务列表连接起来。

本页说明通知类配置。重点是收件人来源、模板占位符、深链接、触发事件,以及通知发出前应具备的业务上下文。

本页涉及的关键 APEX 标签或对象包括:Wait。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

select workflow_user_input.absolute_page_url( 5, 'user_provide_two_values' ) as link_to_page from dual
图 25.1.9.2.4-1 发送包含页面链接的推送通知

25.1.9.2.5 等待应用逻辑继续#

这一组内容聚焦工作流中的审批和用户输入。Human Task 活动把后台流程与用户任务列表连接起来。

本页说明异步流程控制。关注等待点、继续信号、超时或事件处理,以及重复触发和权限校验。

本页涉及的关键 APEX 标签或对象包括:APEX_WORKFLOW、Wait。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

图 25.1.9.2.5-1 等待应用逻辑继续

25.1.9.2.6 使用邮件链接导航到页面#

这一组内容聚焦工作流中的审批和用户输入。Human Task 活动把后台流程与用户任务列表连接起来。

本页按官方教程说明该主题的目的、配置路径和验证方式;阅读时应对照 APEX Builder 当前界面逐步复现。

本页涉及的关键 APEX 标签或对象包括:Wait、Deep Linking。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

图 25.1.9.2.6-1 使用邮件链接导航到页面
图 25.1.9.2.6-2 使用邮件链接导航到页面

25.1.9.2.7 检索标题和活动标签#

这一组内容聚焦工作流中的审批和用户输入。Human Task 活动把后台流程与用户任务列表连接起来。

本页说明如何查看或检索运行时信息。关注可用视图、页面入口、查询字段和展示范围,避免把内部状态误当成业务状态。

本页涉及的关键 APEX 标签或对象包括:APEX_WORKFLOW、Wait、Invoke API。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

&P5_WORKFLOW_TITLE. - &P5_ACTIVITY_LABEL.
procedure get_labels_for_page( p_application_id in number default null, p_workflow_id in number, p_activity_static_id in varchar2, p_workflow_title out varchar2, p_activity_label out varchar2) is l_application_id apex_applications.application_id%type; begin l_application_id := coalesce(p_application_id,v('APP_ID')); select a.label as activity_label, w.title as workflow_title into p_activity_label, p_workflow_title from apex_workflow_activities a join apex_workflows w on w.workflow_id = a.workflow_id where a.application_id = l_application_id and w.workflow_id = p_workflow_id and a.type_code = 'NATIVE_WORKFLOW_WAIT' and a.state = 'WAITING' and a.static_id = p_activity_static_id; exception when no_data_found then null; end get_labels_for_page;
图 25.1.9.2.7-1 检索标题和活动标签

25.1.9.2.8 发送继续信号并返回数据#

这一组内容聚焦工作流中的审批和用户输入。Human Task 活动把后台流程与用户任务列表连接起来。

本页说明异步流程控制。关注等待点、继续信号、超时或事件处理,以及重复触发和权限校验。

本页涉及的关键 APEX 标签或对象包括:APEX_WORKFLOW、Wait、SQL、PL/SQL。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

declare l_user_input apex_application_global.vc_map; begin l_user_input('V_PROVIDING_USERNAME') := :APP_USER; l_user_input('V_VALUE1') := :P5_VALUE1; l_user_input('V_VALUE2') := :P5_VALUE2; apex_workflow.continue_activity( p_instance_id => :P5_WORKFLOW_ID, p_static_id => :P5_ACTIVITY_STATIC_ID, p_activity_params => l_user_input); end;
图 25.1.9.2.8-1 发送继续信号并返回数据

25.1.9.2.9 检查生成的工作流实例#

这一组内容聚焦工作流中的审批和用户输入。Human Task 活动把后台流程与用户任务列表连接起来。

本页说明如何查看或检索运行时信息。关注可用视图、页面入口、查询字段和展示范围,避免把内部状态误当成业务状态。

本页涉及的关键 APEX 标签或对象包括:APEX_WORKFLOW、Wait、Create Page Wizard。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

图 25.1.9.2.9-1 检查生成的工作流实例

25.1.9.2.10 评估改用任务的好处#

这一组内容聚焦工作流中的审批和用户输入。Human Task 活动把后台流程与用户任务列表连接起来。

本页偏概念说明,重点是理解该机制解决什么问题、何时使用,以及它与工作流、任务、页面或数据模型的边界。

本页涉及的关键 APEX 标签或对象包括:Human Task、Task Definition、Wait。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

25.2.6.4.1 为数据寻找最佳算法#

这一组内容使用 Woods Clinic 患者入院作为完整示例,展示如何从手工流程识别自动化机会并逐步建立工作流。

本页偏概念说明,重点是理解该机制解决什么问题、何时使用,以及它与工作流、任务、页面或数据模型的边界。

图 25.2.6.4.1-1 为数据寻找最佳算法
图 25.2.6.4.1-2 为数据寻找最佳算法
图 25.2.6.4.1-3 为数据寻找最佳算法

25.2.6.4.2 预测患者入院结果#

这一组内容使用 Woods Clinic 患者入院作为完整示例,展示如何从手工流程识别自动化机会并逐步建立工作流。

本页按官方教程说明该主题的目的、配置路径和验证方式;阅读时应对照 APEX Builder 当前界面逐步复现。

本页涉及的关键 APEX 标签或对象包括:Switch、Invoke API、SQL。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

-- Result = 'Low Risk' or 'Risky' function evaluate_risk(p_patient_id number) return varchar2 is l_result varchar2(30); begin /* | Machine Learning Model NN_CE379F672F was the winning model | automatically identified by using AutoML. */ select prediction (NN_CE379F672F using pat.insurance_provider as insurance_provider, pat.initial_procedure as initial_procedure ) into l_result from frc_patients pat where pat.id = p_patient_id; if l_result = 'AutoRejected' then return 'Risky'; else return 'Low Risk'; end if; end;
图 25.2.6.4.2-1 预测患者入院结果

25.2.6.7.1 通过邮件或推送通知用户#

这一组内容使用 Woods Clinic 患者入院作为完整示例,展示如何从手工流程识别自动化机会并逐步建立工作流。

本页说明通知类配置。重点是收件人来源、模板占位符、深链接、触发事件,以及通知发出前应具备的业务上下文。

本页涉及的关键 APEX 标签或对象包括:Workflow Designer、Activities。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

图 25.2.6.7.1-1 通过邮件或推送通知用户

25.2.6.7.2 使用带占位符的邮件模板#

这一组内容使用 Woods Clinic 患者入院作为完整示例,展示如何从手工流程识别自动化机会并逐步建立工作流。

本页按官方教程说明该主题的目的、配置路径和验证方式;阅读时应对照 APEX Builder 当前界面逐步复现。

图 25.2.6.7.2-1 使用带占位符的邮件模板

25.2.6.7.3 按需查询活动数据#

这一组内容使用 Woods Clinic 患者入院作为完整示例,展示如何从手工流程识别自动化机会并逐步建立工作流。

本页说明如何查看或检索运行时信息。关注可用视图、页面入口、查询字段和展示范围,避免把内部状态误当成业务状态。

本页涉及的关键 APEX 标签或对象包括:Workflow Designer、Property Editor、SQL。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

select prc.description, frc_app.get_sender_email as sender_email from frc_patients pat left join frc_medical_procedures prc on prc.code = pat.initial_procedure where pat.id = :ID
图 25.2.6.7.3-1 按需查询活动数据

25.2.6.7.4 接收拒绝邮件#

这一组内容使用 Woods Clinic 患者入院作为完整示例,展示如何从手工流程识别自动化机会并逐步建立工作流。

本页按官方教程说明该主题的目的、配置路径和验证方式;阅读时应对照 APEX Builder 当前界面逐步复现。

图 25.2.6.7.4-1 接收拒绝邮件

25.2.6.8.1 调用账户预配 API#

这一组内容使用 Woods Clinic 患者入院作为完整示例,展示如何从手工流程识别自动化机会并逐步建立工作流。

本页按官方教程说明该主题的目的、配置路径和验证方式;阅读时应对照 APEX Builder 当前界面逐步复现。

本页涉及的关键 APEX 标签或对象包括:Invoke API。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

procedure provision_account( p_patient_id number) is l_patient t_patient := patient(p_patient_id); l_clinic_app_id number := frc_app.clinic_app_id(); begin frc_apex_user.create_user( p_username => l_patient.username, p_email => l_patient.email, p_patient_id => p_patient_id ); apex_acl.add_user_role( p_application_id => l_clinic_app_id, p_user_name => l_patient.username, p_role_static_id => 'PATIENTS' ); end;
图 25.2.6.8.1-1 调用账户预配 API

25.2.6.8.2 插入账户创建请求#

这一组内容使用 Woods Clinic 患者入院作为完整示例,展示如何从手工流程识别自动化机会并逐步建立工作流。

官方步骤的重点是创建或启动相应对象:先进入正确的 Builder 入口,设置名称、类型、来源和目标,再保存并运行验证。

-- package frc_apex_user procedure create_user( p_username in varchar2, p_email in varchar2, p_patient_id in number) is l_group_id number := apex_util.get_group_id(p_group_name=>'Patients'); begin insert into frc_apex_users_queue( username, group_id, email, patient_id) values ( upper(p_username), l_group_id, p_email, p_patient_id); end;

25.2.6.8.3 安排创建新账户作业#

这一组内容使用 Woods Clinic 患者入院作为完整示例,展示如何从手工流程识别自动化机会并逐步建立工作流。

本页按官方教程说明该主题的目的、配置路径和验证方式;阅读时应对照 APEX Builder 当前界面逐步复现。

本页涉及的关键 APEX 标签或对象包括:SQL、PL/SQL。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

-- -- NOTA BENE: Run this outside of App Builder so that the -- ~~~~~~~~~ JOB_CREATOR ends up correctly reflecting WOODS -- instead of the APEX_PUBLIC_USER proxy user. -- BEGIN DBMS_SCHEDULER.CREATE_JOB ( job_name => 'APEX_CREATE_USER_JOB', job_type => 'PLSQL_BLOCK', job_action => 'begin frc_apex_user.handle_new_users_queue; end;', number_of_arguments => 0, repeat_interval => 'FREQ=MINUTELY', end_date => NULL, enabled => TRUE, auto_drop => TRUE, comments => '' ); END;

25.2.6.8.4 处理新账户请求#

这一组内容使用 Woods Clinic 患者入院作为完整示例,展示如何从手工流程识别自动化机会并逐步建立工作流。

本页说明异步流程控制。关注等待点、继续信号、超时或事件处理,以及重复触发和权限校验。

本页涉及的关键 APEX 标签或对象包括:SQL、PL/SQL。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

-- package frc_apex_user procedure handle_new_users_queue is l_temp_password varchar2(255); begin -- set workspace context apex_util.set_workspace('WOODS'); for x in (select * from frc_apex_users_queue) loop -- Generate temporary password l_temp_password := generate_password(); -- create the apex user in the supplied group if present apex_util.create_user ( p_user_name => x.username, p_web_password => l_temp_password, p_email_address => x.email, p_group_ids => x.group_id ); execute immediate q'~ begin frc_onboarding.send_approval_email( :PATIENT_ID, :TEMP_PASSWORD); end; ~' using x.patient_id, l_temp_password; -- remove the user from the queue delete from frc_apex_users_queue where id = x.id; end loop; end;

25.2.6.8.5 通知用户临时密码#

这一组内容使用 Woods Clinic 患者入院作为完整示例,展示如何从手工流程识别自动化机会并逐步建立工作流。

本页说明通知类配置。重点是收件人来源、模板占位符、深链接、触发事件,以及通知发出前应具备的业务上下文。

本页涉及的关键 APEX 标签或对象包括:SQL、PL/SQL。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

-- in package frc_onboarding procedure send_approval_email( p_patient_id in number, p_temporary_password in varchar2) is l_patient t_patient := patient(p_patient_id); ----------------------------------------------- function approval_placeholders( p_patient in t_patient, p_temporary_password in varchar2) return clob is l_json json_object_t := json_object_t; l_clinic_app_url varchar2(255); begin l_clinic_app_url := frc_app.url_for_page( frc_app.clinic_app_id,'home'); l_json.put('FIRST_NAME', p_patient.first_name); l_json.put('PROCEDURE_DESCRIPTION', p_patient.procedure_description); l_json.put('PORTAL_URL', l_clinic_app_url); l_json.put('USERNAME', lower(p_patient.username)); l_json.put('TEMPORARY_PASSWORD', p_temporary_password); return l_json.stringify(); end; begin apex_mail.send( p_to => l_patient.email, p_from => frc_app.get_sender_email, p_template_static_id => frc_app.c_approved_email_template, p_placeholders => approval_placeholders( l_patient, p_temporary_password), p_application_id => frc_app.onboarding_app_id()); -- Force mail to be sent immediately apex_mail.push_queue; end;

25.2.6.8.6 接收新账户邮件#

这一组内容使用 Woods Clinic 患者入院作为完整示例,展示如何从手工流程识别自动化机会并逐步建立工作流。

本页按官方教程说明该主题的目的、配置路径和验证方式;阅读时应对照 APEX Builder 当前界面逐步复现。

图 25.2.6.8.6-1 接收新账户邮件

25.2.6.9.1 无限期等待自定义信号#

这一组内容使用 Woods Clinic 患者入院作为完整示例,展示如何从手工流程识别自动化机会并逐步建立工作流。

本页说明异步流程控制。关注等待点、继续信号、超时或事件处理,以及重复触发和权限校验。

本页涉及的关键 APEX 标签或对象包括:APEX_WORKFLOW、Wait。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

图 25.2.6.9.1-1 无限期等待自定义信号

25.2.6.9.2 完成新患者档案#

这一组内容使用 Woods Clinic 患者入院作为完整示例,展示如何从手工流程识别自动化机会并逐步建立工作流。

本页说明运行时数据处理。重点是页面项、任务参数、工作流变量和业务表列之间的数据流,以及提交前后的校验。

本页涉及的关键 APEX 标签或对象包括:Wait。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

图 25.2.6.9.2-1 完成新患者档案
图 25.2.6.9.2-2 完成新患者档案
图 25.2.6.9.2-3 完成新患者档案

25.2.6.9.3 向工作流发送继续信号#

这一组内容使用 Woods Clinic 患者入院作为完整示例,展示如何从手工流程识别自动化机会并逐步建立工作流。

本页说明异步流程控制。关注等待点、继续信号、超时或事件处理,以及重复触发和权限校验。

本页涉及的关键 APEX 标签或对象包括:APEX_WORKFLOW、Wait、Invoke API。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

procedure complete_registration( p_patient_id in number, p_year_of_birth in number, p_month_of_birth in number, p_day_of_birth in number, p_insurance_policy_number in varchar2, p_scan_uploadname in varchar2, p_scan_latitude in number, p_scan_longitude in number) is l_scan_blob blob; l_params apex_application_global.vc_map; begin -- get uploaded insurance proof scan blob from temp storage for scan in (select blob_content from apex_application_temp_files where name = p_scan_upload_name) loop l_scan_blob := scan.blob_content; end loop; -- update patient to include insurance proof scan blob update frc_patients set insurance_proof_scan = l_scan_blob, date_of_birth = to_date( to_char(p_year_of_birth)|| to_char(p_month_of_birth,'00')|| to_char(p_day_of_birth,'00'), 'YYYYMMDD'), insurance_policy_number = p_insurance_policy_number, insurance_proof_latitude = p_scan_latitude, insurance_proof_longitude = p_scan_longitude where id = p_patient_id; -- Continue onboarding workflow that's waiting for new patient -- registration to be complete. Use workflow id from the most -- recent onboarding workflow associated with this patient id for wf in (select workflow_id from apex_workflows where workflow_def_static_id = 'patient_onboarding' and detail_pk = to_char(p_patient_id) order by start_time desc fetch first row only) loop -- Continue the complete_registration "Wait" activity apex_workflow.continue_activity( p_instance_id => wf.workflow_id, p_static_id => 'complete_registration', p_activity_params => l_params); end loop; end;

25.2.6.9.4 理解入院流程已经完成#

这一组内容使用 Woods Clinic 患者入院作为完整示例,展示如何从手工流程识别自动化机会并逐步建立工作流。

本页偏概念说明,重点是理解该机制解决什么问题、何时使用,以及它与工作流、任务、页面或数据模型的边界。

本页涉及的关键 APEX 标签或对象包括:Wait。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

图 25.2.6.9.4-1 理解入院流程已经完成
图 25.2.6.9.4-2 理解入院流程已经完成

25.3.5.5.1 从工作流打印文档#

这一组内容把工作流用于医疗程序生命周期。业务表中的状态仍是业务事实,工作流负责协调跨步骤逻辑。

本页说明文档或内容生成流程。关注数据查询、模板布局、后台执行和生成结果如何回写或交付。

图 25.3.5.5.1-1 从工作流打印文档

25.3.5.5.2 检索发票数据#

这一组内容把工作流用于医疗程序生命周期。业务表中的状态仍是业务事实,工作流负责协调跨步骤逻辑。

本页说明如何查看或检索运行时信息。关注可用视图、页面入口、查询字段和展示范围,避免把内部状态误当成业务状态。

本页涉及的关键 APEX 标签或对象包括:SQL。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

select invoice_number, invoice_date, procedure_id, patient_id, patient_name, address, doctor_name, medical_procedure, procedure_date, status, amount_due, insurance_provider, covered_amount, balance_due from frc_procedures_invoices_v where procedure_id = :PROCEDURE_ID_TO_INVOICE
图 25.3.5.5.2-1 检索发票数据
图 25.3.5.5.2-2 检索发票数据
图 25.3.5.5.2-3 检索发票数据

25.3.5.5.3 在布局中格式化发票#

这一组内容把工作流用于医疗程序生命周期。业务表中的状态仍是业务事实,工作流负责协调跨步骤逻辑。

本页说明文档或内容生成流程。关注数据查询、模板布局、后台执行和生成结果如何回写或交付。

图 25.3.5.5.3-1 在布局中格式化发票
图 25.3.5.5.3-2 在布局中格式化发票

25.3.5.5.4 生成数据驱动文档#

这一组内容把工作流用于医疗程序生命周期。业务表中的状态仍是业务事实,工作流负责协调跨步骤逻辑。

本页说明文档或内容生成流程。关注数据查询、模板布局、后台执行和生成结果如何回写或交付。

-- in frc_clinic package procedure generate_invoice( p_invoice_id in number) is l_pdf blob; l_procedure_id number; begin -- Lookup patient procedure id for invoice for report query bind var select patient_procedure_id into l_procedure_id from frc_invoices where id = p_invoice_id; -- Set application item used as a bind variable in report query apex_session_state.set_value('PROCEDURE_ID_TO_INVOICE',l_procedure_id); update_invoice_status(p_invoice_id,'Processing'); commit; -- Generate the pixel-perfect PDF invoice l_pdf := apex_print.generate_document( p_application_id => v('APP_ID'), p_report_query_static_id => 'invoice_query', p_report_layout_static_id => 'invoice_layout'); update frc_invoices set status = 'Prepared', document = l_pdf where id = p_invoice_id; exception when others then update_invoice_status(p_invoice_id,'Error'); commit; raise; end;

25.1.9.1.4.1 设置静态任务参与者#

这一组内容聚焦 Wait 活动和外部信号:页面或应用逻辑可以在合适时机唤醒等待中的工作流,并把必要数据返回给后续步骤。

官方步骤的重点是配置属性:确认对象范围,设置必要参数、条件、可见性或行为,然后通过运行页面检查配置是否生效。

本页涉及的关键 APEX 标签或对象包括:SQL。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

图 25.1.9.1.4.1-1 设置静态任务参与者

25.1.9.1.4.2 动态分配参与者#

这一组内容聚焦 Wait 活动和外部信号:页面或应用逻辑可以在合适时机唤醒等待中的工作流,并把必要数据返回给后续步骤。

本页说明对象之间的关系和责任分配。关注参数传递、参与者来源、任务分配规则,以及特殊情况的处理。

本页涉及的关键 APEX 标签或对象包括:SQL、PL/SQL。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

your_app_pkg .owners_for_task(:APEX$TASK_ID, :APEX$TASK_PK)

25.1.9.1.4.3 通过参数传递参与者#

这一组内容聚焦 Wait 活动和外部信号:页面或应用逻辑可以在合适时机唤醒等待中的工作流,并把必要数据返回给后续步骤。

本页说明对象之间的关系和责任分配。关注参数传递、参与者来源、任务分配规则,以及特殊情况的处理。

本页涉及的关键 APEX 标签或对象包括:SQL。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

:P_ASSIGNEE_LIST
select column_value from apex_string.split(:P_ASSIGNEE_LIST,':')

25.1.9.1.4.4 处理休假或缺勤情况#

这一组内容聚焦 Wait 活动和外部信号:页面或应用逻辑可以在合适时机唤醒等待中的工作流,并把必要数据返回给后续步骤。

本页说明对象之间的关系和责任分配。关注参数传递、参与者来源、任务分配规则,以及特殊情况的处理。

本页涉及的关键 APEX 标签或对象包括:APEX_HUMAN_TASK、SQL、PL/SQL。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

procedure your_vacation_rule ( p_param in apex_human_task.t_vacation_rule_input, p_result out apex_human_task.t_vacation_rule_result )
procedure handle_absences( p_param in apex_human_task.t_vacation_rule_input, p_result out apex_human_task.t_vacation_rule_result ) is l_participant apex_human_task.t_task_participant; l_change apex_human_task.t_task_participant_change; -------------------------------------------------------- function potential_owner( p_username in varchar2) return apex_human_task.t_task_participant is begin return apex_human_task.t_task_participant( apex_human_task.c_task_potential_owner, apex_human_task.c_task_identity_type_user, p_username); end potential_owner; -------------------------------------------------------- function absent_user_cover( p_original_username in varchar2, p_covering_username in varchar2, p_reason in varchar2) return apex_human_task.t_task_participant_change is begin return apex_human_task.t_task_participant_change( potential_owner(p_original_username), potential_owner(p_covering_username), p_reason); end absent_user_cover; begin -- Loop over original participants for j in 1..p_param.original_participants.count loop l_participant := p_param.original_participants(j); -- If the participant is DAVID as a potential owner if l_participant.type = apex_human_task.c_task_potential_owner and l_participant.value = 'DAVID' then -- Add participant change: SUSAN covers for DAVID's personal time off p_result.participant_changes(p_result.participant_changes.count + 1) := absent_user_cover('DAVID','SUSAN','Personal Time Off'); p_result.has_participant_changes := true; end if; end loop; end handle_absences;

25.1.9.1.6.1 按用途定制任务列表#

这一组内容聚焦患者入院示例的账户预配和等待逻辑:工作流可以调用 API、创建后台请求、发送通知,并等待患者完成资料。

官方步骤的重点是配置属性:确认对象范围,设置必要参数、条件、可见性或行为,然后通过运行页面检查配置是否生效。

本页涉及的关键 APEX 标签或对象包括:Page Designer。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

Report Context Instances Where Current User Is API Constant
My Tasks
  • Potential Owner (when task is not assigned)
  • Actual Owner (when task is assigned)
MY_TASKS
Admin Tasks Business Administrator ADMIN_TASKS
Initiated by Me Initiator INITIATED_BY_ME

25.1.9.1.6.2 只显示当前应用的任务#

这一组内容聚焦患者入院示例的账户预配和等待逻辑:工作流可以调用 API、创建后台请求、发送通知,并等待患者完成资料。

本页说明如何查看或检索运行时信息。关注可用视图、页面入口、查询字段和展示范围,避免把内部状态误当成业务状态。

本页涉及的关键 APEX 标签或对象包括:APEX_HUMAN_TASK、SQL、PL/SQL。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

select task_id, task_type, ⋮ badge_state from table ( apex_human_task.get_tasks ( p_context => 'MY_TASKS', p_show_expired_tasks => :P33_SHOW_EXPIRED --, p_application_id => :APP_ID ) )
select task_id, task_type, ⋮ badge_state from table ( apex_human_task.get_tasks ( p_context => 'MY_TASKS', p_show_expired_tasks => :P33_SHOW_EXPIRED , p_application_id => :APP_ID ) )

25.1.9.1.6.3 在任务列表中包含额外列#

这一组内容聚焦患者入院示例的账户预配和等待逻辑:工作流可以调用 API、创建后台请求、发送通知,并等待患者完成资料。

本页说明如何查看或检索运行时信息。关注可用视图、页面入口、查询字段和展示范围,避免把内部状态误当成业务状态。

本页涉及的关键 APEX 标签或对象包括:Page Designer。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

select * from table ( apex_human_task.get_tasks ( p_context => 'MY_TASKS', p_show_expired_tasks => :P33_SHOW_EXPIRED, p_application_id => :APP_ID ) )
Column Description
TASK_ID Unique ID of this task instance
SUBJECT Subject of this task instance
STATE_CODE Current state of this task instance (e.g. INFO_REQUESTED)
STATE Current state of this task instance (e.g. Information Requested)
INITIATOR Username who created the task instance
ACTUAL_OWNER Username of assigned potential owner
DETAIL_PK Details Primary Key for this instance's related business entity row
TASK_DEF_STATIC_ID Unique task definition identifier for this task instance
DETAILS_LINK_TARGET URL of the task details page for this instance

25.1.9.1.6.4 限制显示哪些任务类型#

这一组内容聚焦患者入院示例的账户预配和等待逻辑:工作流可以调用 API、创建后台请求、发送通知,并等待患者完成资料。

官方步骤的重点是配置属性:确认对象范围,设置必要参数、条件、可见性或行为,然后通过运行页面检查配置是否生效。

select task_id, task_type, ⋮ badge_state from table ( apex_human_task.get_tasks ( p_context => 'MY_TASKS', p_show_expired_tasks => :P33_SHOW_EXPIRED, p_application_id => :APP_ID ) ) where task_def_static_id in ('NEW_PATIENT','PURCHASE_OFFICE_SUPPLIES')

25.1.9.1.6.5 在任务列表中联接额外表#

这一组内容聚焦患者入院示例的账户预配和等待逻辑:工作流可以调用 API、创建后台请求、发送通知,并等待患者完成资料。

本页说明如何查看或检索运行时信息。关注可用视图、页面入口、查询字段和展示范围,避免把内部状态误当成业务状态。

select t. task_id, t. task_type, ⋮ t. badge_state, p.first_name||' '||p.last_name as patient_name from table ( apex_human_task.get_tasks ( p_context => 'MY_TASKS', p_show_expired_tasks => :P33_SHOW_EXPIRED, p_application_id => :APP_ID ) ) t left join frc_patients p on p.id = case task_def_static_id when 'NEW_PATIENT' then to_number(t.detail_pk) end where task_def_static_id in ('NEW_PATIENT','PURCHASE_OFFICE_SUPPLIES')

25.1.9.1.7.1 定义可更新任务参数#

这一组内容聚焦 Task Definition:任务是否需要 Outcome、如何关联业务表、如何接收参数、如何确定参与者,以及任务状态如何演进。

官方步骤的重点是配置属性:确认对象范围,设置必要参数、条件、可见性或行为,然后通过运行页面检查配置是否生效。

本页涉及的关键 APEX 标签或对象包括:Human Task、Task Definition、APEX_HUMAN_TASK。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

图 25.1.9.1.7.1-1 定义可更新任务参数

25.1.9.1.7.2 控制参数可见性#

这一组内容聚焦 Task Definition:任务是否需要 Outcome、如何关联业务表、如何接收参数、如何确定参与者,以及任务状态如何演进。

官方步骤的重点是配置属性:确认对象范围,设置必要参数、条件、可见性或行为,然后通过运行页面检查配置是否生效。

本页涉及的关键 APEX 标签或对象包括:Human Task。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

图 25.1.9.1.7.2-1 控制参数可见性

25.1.9.1.7.3 参数化任务分配人#

这一组内容聚焦 Task Definition:任务是否需要 Outcome、如何关联业务表、如何接收参数、如何确定参与者,以及任务状态如何演进。

官方步骤的重点是配置属性:确认对象范围,设置必要参数、条件、可见性或行为,然后通过运行页面检查配置是否生效。

本页涉及的关键 APEX 标签或对象包括:Human Task、Potential Owners。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

图 25.1.9.1.7.3-1 参数化任务分配人

25.1.9.1.7.4 创建人工任务实例#

这一组内容聚焦 Task Definition:任务是否需要 Outcome、如何关联业务表、如何接收参数、如何确定参与者,以及任务状态如何演进。

官方步骤的重点是创建或启动相应对象:先进入正确的 Builder 入口,设置名称、类型、来源和目标,再保存并运行验证。

本页涉及的关键 APEX 标签或对象包括:Human Task、Task Definition。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

图 25.1.9.1.7.4-1 创建人工任务实例

25.1.9.1.7.5 将工作流参数传给任务#

这一组内容聚焦 Task Definition:任务是否需要 Outcome、如何关联业务表、如何接收参数、如何确定参与者,以及任务状态如何演进。

本页说明对象之间的关系和责任分配。关注参数传递、参与者来源、任务分配规则,以及特殊情况的处理。

本页涉及的关键 APEX 标签或对象包括:Property Editor、Human Task、Task Definition。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

图 25.1.9.1.7.5-1 将工作流参数传给任务

25.1.9.1.7.6 将任务参数赋给变量#

这一组内容聚焦 Task Definition:任务是否需要 Outcome、如何关联业务表、如何接收参数、如何确定参与者,以及任务状态如何演进。

本页说明对象之间的关系和责任分配。关注参数传递、参与者来源、任务分配规则,以及特殊情况的处理。

本页涉及的关键 APEX 标签或对象包括:Human Task、APEX_HUMAN_TASK。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

:V_VALUE1 := apex_human_task.get_task_parameter_value( :V_TWO_NUMBERS_TASK_ID,'P_VALUE1'); :V_VALUE2 := apex_human_task.get_task_parameter_value( :V_TWO_NUMBERS_TASK_ID,'P_VALUE2');
图 25.1.9.1.7.6-1 将任务参数赋给变量

25.1.9.1.8.1 查看你请求的工作项#

这一组内容聚焦任务列表和任务详情页:用户需要能看到自己发起或需要处理的工作项,并在详情页安全地查看、编辑和提交参数。

本页说明如何查看或检索运行时信息。关注可用视图、页面入口、查询字段和展示范围,避免把内部状态误当成业务状态。

本页涉及的关键 APEX 标签或对象包括:Create Page Wizard。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

图 25.1.9.1.8.1-1 查看你请求的工作项

25.1.9.1.8.2 添加任务详情页#

这一组内容聚焦任务列表和任务详情页:用户需要能看到自己发起或需要处理的工作项,并在详情页安全地查看、编辑和提交参数。

官方步骤的重点是创建或启动相应对象:先进入正确的 Builder 入口,设置名称、类型、来源和目标,再保存并运行验证。

f?p= App : Page : Session : Request : Debug : ClearCache : itemNames : itemValues
f?p=&APP_ID.:6:&SESSION.::&DEBUG.:RP,6:P6_TASK_ID:&TASK_ID.
图 25.1.9.1.8.2-1 添加任务详情页
图 25.1.9.1.8.2-2 添加任务详情页

25.1.9.1.8.3 查看需要你处理的任务#

这一组内容聚焦任务列表和任务详情页:用户需要能看到自己发起或需要处理的工作项,并在详情页安全地查看、编辑和提交参数。

本页说明如何查看或检索运行时信息。关注可用视图、页面入口、查询字段和展示范围,避免把内部状态误当成业务状态。

图 25.1.9.1.8.3-1 查看需要你处理的任务

25.1.9.1.8.4 为任务请求更多信息#

这一组内容聚焦任务列表和任务详情页:用户需要能看到自己发起或需要处理的工作项,并在详情页安全地查看、编辑和提交参数。

本页按官方教程说明该主题的目的、配置路径和验证方式;阅读时应对照 APEX Builder 当前界面逐步复现。

图 25.1.9.1.8.4-1 为任务请求更多信息
图 25.1.9.1.8.4-2 为任务请求更多信息

25.1.9.1.8.5 回应信息请求#

这一组内容聚焦任务列表和任务详情页:用户需要能看到自己发起或需要处理的工作项,并在详情页安全地查看、编辑和提交参数。

本页按官方教程说明该主题的目的、配置路径和验证方式;阅读时应对照 APEX Builder 当前界面逐步复现。

图 25.1.9.1.8.5-1 回应信息请求
图 25.1.9.1.8.5-2 回应信息请求

25.1.9.1.8.6 编辑可更新参数#

这一组内容聚焦任务列表和任务详情页:用户需要能看到自己发起或需要处理的工作项,并在详情页安全地查看、编辑和提交参数。

本页说明运行时数据处理。重点是页面项、任务参数、工作流变量和业务表列之间的数据流,以及提交前后的校验。

图 25.1.9.1.8.6-1 编辑可更新参数

25.1.9.1.8.7 完成动作任务#

这一组内容聚焦任务列表和任务详情页:用户需要能看到自己发起或需要处理的工作项,并在详情页安全地查看、编辑和提交参数。

本页说明运行时数据处理。重点是页面项、任务参数、工作流变量和业务表列之间的数据流,以及提交前后的校验。

图 25.1.9.1.8.7-1 完成动作任务

25.1.9.1.8.8 检查整体工作流状态#

这一组内容聚焦任务列表和任务详情页:用户需要能看到自己发起或需要处理的工作项,并在详情页安全地查看、编辑和提交参数。

本页说明如何查看或检索运行时信息。关注可用视图、页面入口、查询字段和展示范围,避免把内部状态误当成业务状态。

图 25.1.9.1.8.8-1 检查整体工作流状态

25.1.9.1.8.9 微调任务详情页#

这一组内容聚焦任务列表和任务详情页:用户需要能看到自己发起或需要处理的工作项,并在详情页安全地查看、编辑和提交参数。

本页按官方教程说明该主题的目的、配置路径和验证方式;阅读时应对照 APEX Builder 当前界面逐步复现。

本页涉及的关键 APEX 标签或对象包括:Human Task、APEX_HUMAN_TASK。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

25.1.9.1.11.1 为动作选择事件#

这一组内容聚焦任务事件和通知:任务创建、完成或变更时,应用可以基于事件执行动作、发送邮件或更新业务数据。

官方步骤的重点是配置属性:确认对象范围,设置必要参数、条件、可见性或行为,然后通过运行页面检查配置是否生效。

本页涉及的关键 APEX 标签或对象包括:APEX_HUMAN_TASK、SQL、PL/SQL。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

Event Happens When
Create Initiator creates task
Claim Potential owner claims task
Delegate Business administrator delegates task
Update Comment A user adds a new comment to task
Update Priority Business administrator changes task priority
Update Parameter Actual owner sets the value of updatable task parameter
Release Actual owner releases task so another potential owner can claim it
Cancel Business administrator cancels task
Request Information Actual owner request more information, typically from task initiator
Submit Information User submits requested additional information
Before Expire Less than Before Expire Interval left before task expires
Expire Task expired
Complete Actual owner completes task

25.1.9.1.11.2 访问任务信息#

这一组内容聚焦任务事件和通知:任务创建、完成或变更时,应用可以基于事件执行动作、发送邮件或更新业务数据。

本页说明如何查看或检索运行时信息。关注可用视图、页面入口、查询字段和展示范围,避免把内部状态误当成业务状态。

本页涉及的关键 APEX 标签或对象包括:APEX_HUMAN_TASK、SQL、PL/SQL。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

Name Purpose
APEX$TASK_ID Unique ID of task instance
APEX$TASK_PK Details Primary Key value of related business entity row
APEX$TASK_STATE Mixed-case
APEX$TASK_OUTCOME In Complete action, outcome of APPROVED, REJECTED
APEX$TASK_CREATED_ON Date task instance was created
APEX$TASK_SUBJECT Task subject
APEX$TASK_DUE_ON Date task is due (or null if no due date)
APEX$TASK_INITIATOR Case-sensitive username of task initiator
APEX$TASK_OWNER Case-sensitive username of task's actual owner
APEX$TASK_RENEWAL_COUNT Number of times task has been renewed
APEX$TASK_MAX_RENEWAL_COUNT Maximum task renewal count
APEX$TASK_PREVIOUS_ID Unique ID of previous task in renewal "chain"
APEX$TASK_TEXT In Update Comment action, text of comment added.

25.1.9.1.11.3 创建时通知被分配人#

这一组内容聚焦任务事件和通知:任务创建、完成或变更时,应用可以基于事件执行动作、发送邮件或更新业务数据。

本页说明通知类配置。重点是收件人来源、模板占位符、深链接、触发事件,以及通知发出前应具备的业务上下文。

25.1.9.1.11.4 完成时更新列#

这一组内容聚焦任务事件和通知:任务创建、完成或变更时,应用可以基于事件执行动作、发送邮件或更新业务数据。

本页说明运行时数据处理。重点是页面项、任务参数、工作流变量和业务表列之间的数据流,以及提交前后的校验。

25.1.9.1.8.8.1 复查已完成任务#

这一组内容聚焦任务列表和任务详情页:用户需要能看到自己发起或需要处理的工作项,并在详情页安全地查看、编辑和提交参数。

本页说明如何查看或检索运行时信息。关注可用视图、页面入口、查询字段和展示范围,避免把内部状态误当成业务状态。

图 25.1.9.1.8.8.1-1 复查已完成任务
图 25.1.9.1.8.8.1-2 复查已完成任务

25.1.9.1.8.9.1 添加页面项以编辑参数#

这一组内容聚焦任务列表和任务详情页:用户需要能看到自己发起或需要处理的工作项,并在详情页安全地查看、编辑和提交参数。

官方步骤的重点是创建或启动相应对象:先进入正确的 Builder 入口,设置名称、类型、来源和目标,再保存并运行验证。

图 25.1.9.1.8.9.1-1 添加页面项以编辑参数
图 25.1.9.1.8.9.1-2 添加页面项以编辑参数

25.1.9.1.8.9.2 按条件将页面项设为只读#

这一组内容聚焦任务列表和任务详情页:用户需要能看到自己发起或需要处理的工作项,并在详情页安全地查看、编辑和提交参数。

官方步骤的重点是配置属性:确认对象范围,设置必要参数、条件、可见性或行为,然后通过运行页面检查配置是否生效。

select task_id from apex_tasks where task_id = :P6_TASK_ID and actual_owner = :APP_USER and state_code = 'ASSIGNED'
图 25.1.9.1.8.9.2-1 按条件将页面项设为只读

25.1.9.1.8.9.3 将参数值加载到页面项#

这一组内容聚焦任务列表和任务详情页:用户需要能看到自己发起或需要处理的工作项,并在详情页安全地查看、编辑和提交参数。

本页说明运行时数据处理。重点是页面项、任务参数、工作流变量和业务表列之间的数据流,以及提交前后的校验。

本页涉及的关键 APEX 标签或对象包括:SQL、PL/SQL。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

apex_human_task.get_task_parameter_value(:P6_TASK_ID,'P_VALUE1')
图 25.1.9.1.8.9.3-1 将参数值加载到页面项

25.1.9.1.8.9.4 验证参数页面项#

这一组内容聚焦任务列表和任务详情页:用户需要能看到自己发起或需要处理的工作项,并在详情页安全地查看、编辑和提交参数。

本页说明运行时数据处理。重点是页面项、任务参数、工作流变量和业务表列之间的数据流,以及提交前后的校验。

本页涉及的关键 APEX 标签或对象包括:SQL、PL/SQL。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

nv('P6_VALUE1') != nv('P6_VALUE2')
图 25.1.9.1.8.9.4-1 验证参数页面项
图 25.1.9.1.8.9.4-2 验证参数页面项

25.1.9.1.8.9.5 将页面项保存到任务参数#

这一组内容聚焦任务列表和任务详情页:用户需要能看到自己发起或需要处理的工作项,并在详情页安全地查看、编辑和提交参数。

本页说明运行时数据处理。重点是页面项、任务参数、工作流变量和业务表列之间的数据流,以及提交前后的校验。

apex_human_task.set_task_parameter_values( :P6_TASK_ID, apex_human_task.t_task_parameters( 1 => apex_human_task.t_task_parameter('P_VALUE1', :P6_VALUE1), 2 => apex_human_task.t_task_parameter('P_VALUE2', :P6_VALUE2)));
图 25.1.9.1.8.9.5-1 将页面项保存到任务参数

25.1.9.1.8.9.6 处理业务实体行#

这一组内容聚焦任务列表和任务详情页:用户需要能看到自己发起或需要处理的工作项,并在详情页安全地查看、编辑和提交参数。

本页按官方教程说明该主题的目的、配置路径和验证方式;阅读时应对照 APEX Builder 当前界面逐步复现。

select detail_pk from apex_tasks where task_id = :P6_TASK_ID

25.1.9.1.11.3.1 通用地确定被分配人#

这一组内容聚焦任务事件和通知:任务创建、完成或变更时,应用可以基于事件执行动作、发送邮件或更新业务数据。

本页说明对象之间的关系和责任分配。关注参数传递、参与者来源、任务分配规则,以及特殊情况的处理。

本页涉及的关键 APEX 标签或对象包括:Task Definition、SQL、PL/SQL。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

your_app_pkg.owners_for_task(:APEX$TASK_ID,:APEX$DETAILS_PK)
package your_app_pkg as ------------------------------------------------- -- Returns comma-separated list of case-sensitive -- usernames who are potential owners for task id -- passed in ------------------------------------------------- function owners_for_task( p_task_id in number, p_detail_pk in varchar2) return varchar2; ------------------------------------------------- -- Returns comma-separated list of email -- addresses of potential owners for task id -- passed in ------------------------------------------------- function owner_emails_for_task( p_task_id in number, p_detail_pk in varchar2) return varchar2; end your_app_pkg;
图 25.1.9.1.11.3.1-1 通用地确定被分配人

25.1.9.1.11.3.2 计算主题和动作值#

这一组内容聚焦任务事件和通知:任务创建、完成或变更时,应用可以基于事件执行动作、发送邮件或更新业务数据。

本页按官方教程说明该主题的目的、配置路径和验证方式;阅读时应对照 APEX Builder 当前界面逐步复现。

本页涉及的关键 APEX 标签或对象包括:Task Definition、SQL。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

Please Buy Coffee and Bagels at Zabar's
Please Buy 2GB Credit Card Sized Hard Drive
select 'Please Buy ' ||:P_ITEMS_TO_BUY ||case when :P_STORE is not null then ' at '||:P_STORE end as computed_subject, your_app_pkg.owner_emails_for_task(:APEX$TASK_ID, :APEX$DETAIL_PK) as potential_owners_emails from dual
图 25.1.9.1.11.3.2-1 计算主题和动作值
图 25.1.9.1.11.3.2-2 计算主题和动作值

25.1.9.1.11.3.3 使用模板格式化邮件#

这一组内容聚焦任务事件和通知:任务创建、完成或变更时,应用可以基于事件执行动作、发送邮件或更新业务数据。

本页说明文档或内容生成流程。关注数据查询、模板布局、后台执行和生成结果如何回写或交付。

图 25.1.9.1.11.3.3-1 使用模板格式化邮件
图 25.1.9.1.11.3.3-2 使用模板格式化邮件

25.1.9.1.11.3.4 创建任务时发送邮件#

这一组内容聚焦任务事件和通知:任务创建、完成或变更时,应用可以基于事件执行动作、发送邮件或更新业务数据。

本页说明通知类配置。重点是收件人来源、模板占位符、深链接、触发事件,以及通知发出前应具备的业务上下文。

本页涉及的关键 APEX 标签或对象包括:Task Definition、Send Email。这些名称在译文中保留英文,便于和 Builder UI、API 或源码对应。

图 25.1.9.1.11.3.4-1 创建任务时发送邮件
图 25.1.9.1.11.3.4-2 创建任务时发送邮件

25.1.9.1.11.3.5 研究通用分配人代码#

这一组内容聚焦任务事件和通知:任务创建、完成或变更时,应用可以基于事件执行动作、发送邮件或更新业务数据。

本页偏概念说明,重点是理解该机制解决什么问题、何时使用,以及它与工作流、任务、页面或数据模型的边界。

package body your_app_pkg as ------------------------------------------------- function owners_for_task( p_task_id in number, p_detail_pk in varchar2) return varchar2 is l_ret varchar2(4000); begin -- Your custom logic here to return comma-separated -- list of case-sensitive user names. return l_ret; end owners_for_task; ------------------------------------------------- function owner_emails_for_task( p_task_id in number, p_detail_pk in varchar2) return varchar2 is l_ret varchar2(4000); begin select listagg(distinct u.email,',') into l_ret from apex_task_participants p join apex_workspace_apex_users u on u.user_name = p.participant where p.task_id = p_task_id and p.participant_type = 'POTENTIAL_OWNER'; return l_ret; end owner_emails_for_task; end your_app_pkg;

25.1.9.1.11.4.1 完成时更新实体列#

这一组内容聚焦任务事件和通知:任务创建、完成或变更时,应用可以基于事件执行动作、发送邮件或更新业务数据。

本页说明运行时数据处理。重点是页面项、任务参数、工作流变量和业务表列之间的数据流,以及提交前后的校验。

Review &ENAME. Salary Change to &P_PROPOSED_SALARY.
-- If approved, update sal using Action Table EMPNO column value if :APEX$TASK_OUTCOME = 'APPROVED' then update emp set sal = :P_PROPOSED_SALARY where empno = :EMPNO; end if;

25.1.9.1.11.4.2 完成时更新请求列#

这一组内容聚焦任务事件和通知:任务创建、完成或变更时,应用可以基于事件执行动作、发送邮件或更新业务数据。

本页说明运行时数据处理。重点是页面项、任务参数、工作流变量和业务表列之间的数据流,以及提交前后的校验。

create table emp_sal_change_request ( id number generated by default on null as identity constraint emp_sal_change_request_id_pk primary key, empno number constraint emp_sal_change_request_empno_fk references emp, new_salary number, motivation varchar2(255 char), status varchar2(8 char) );
select r.id as request_id, r.empno, r.new_salary, e.ename, e.sal from emp_sal_change_request r join emp e on e.empno = r.empno where r.id = :APEX$TASK_PK
Review &ENAME. Salary Change from &SAL. to &NEW_SALARY.
-- Record the outcome in the salary change request row update emp_sal_change_request set status = :APEX$TASK_OUTCOME where id = :REQUEST_ID; -- If approved, update sal using Action Table query EMPNO column value if :APEX$TASK_OUTCOME = 'APPROVED' then update emp set sal = :NEW_SALARY where empno = :EMPNO; end if;