简介:本资源是一份面向PeopleSoft开发工程师与HCM系统实施人员的AWE(Approval Workflow Engine)工作流配置实战指南,聚焦费用报销审批流程的完整落地。文档以PT8.50+FSCM9.1+Oracle技术栈为基础,详细拆解从用户权限建模、基础对象(Record/Page/Component/Menu)创建,到AWE核心配置(交叉引用表、自定义Approval Event Handler类继承与方法重载)的全流程,覆盖金额分级审批(<500元单级、≥500元双级)等典型业务逻辑。资源为单文件PDF,大小1.59MB,内容结构清晰,含关键截图示意、许可权列表绑定规则、EOAW_CORE包继承说明及附录级PeopleCode与SQL参考。目前已有155人学习下载,适合具备PeopleSoft基础、正开展HCM审批模块二次开发或AWE定制化实施的技术人员快速掌握可复用的配置范式与排错要点。
1. PeopleSoft工作流配置不是“点几下就完事”的操作,而是对业务审批逻辑的结构化建模
很多人拿到《PeopleSoft工作流配置[整理].pdf》第一反应是“找按钮、填表单、保存发布”,结果在测试环境反复触发失败,日志里满屏AWE_ERROR或EOAW_CORE: Invalid node type。根本原因在于:PeopleSoft 的工作流(Workflow)本质不是图形化流程图工具,而是基于Approval Workflow Engine(AWE)构建的一套状态机驱动的审批引擎——它要求你先定义「谁在什么条件下能做什么」,再把业务规则翻译成 AWE 能识别的节点类型、条件表达式和事件绑定。这份 PDF 之所以需要“整理”,正是因为原始配置散落在 Component Interface、Application Package、Workflow Definition、AWE Rule Set 等至少 5 类对象中,且跨 PeopleTools 版本(8.54~8.59)存在关键参数语义差异。适合刚接手 HRMS 或 FSCM 模块升级的实施顾问、需要定制采购审批链的系统管理员,以及正在排查EOAW_CORE表中STATUS字段卡在PENDING的运维工程师。
2. 从 AWE 核心对象出发:理解 PeopleSoft 工作流的三层配置骨架
PeopleSoft 工作流配置不是单点操作,而是由引擎层(AWE Runtime)→ 规则层(Rule Set & Conditions)→ 实例层(Workflow Definition)三层耦合构成。跳过任一层直接修改 Workflow Definition,轻则审批不触发,重则导致EOAW_CORE表数据异常堆积。以下按实际配置顺序展开,每一步都对应EOAW_CORE表中关键字段的写入逻辑。
2.1 AWE 引擎必须启用且与业务组件正确绑定
AWE 不是默认激活的模块。在 PeopleTools > Web Profile > Web Profile Configuration 中,需确认Enable Approval Workflow Engine已勾选;更重要的是,在业务组件(如PURCHASE_ORDER)的 Component Properties > Workflow 页签中,必须指定Workflow Definition Name和AWE Enabled为 Yes。否则即使 Workflow Definition 配置完整,EOAW_CORE表也不会生成任何记录。
提示:
EOAW_CORE表的WORKFLOW_ID字段为空,或STATUS始终为NOT_STARTED,90% 是此步遗漏。检查命令:SELECT WORKFLOW_ID, STATUS, INSTANCE_ID, LAST_UPDATE_DTTM FROM PS_EOAW_CORE WHERE BUSINESS_KEY = 'YOUR_PO_ID' ORDER BY LAST_UPDATE_DTTM DESC;若无返回结果,优先排查 Component 的 Workflow 绑定。
2.2 Rule Set 是审批逻辑的“决策中枢”,而非简单条件判断
AWE Rule Set(通过PeopleTools > Workflow > Rule Sets访问)不是 SQL WHERE 条件拼接器,而是基于Expression Language(PEL)的状态路由引擎。例如采购订单金额超 50 万需三级审批,不能只写&PO_AMT > 500000,而必须定义:
- Rule Group:
PO_APPROVAL_LEVELS - Rules:
RULE_LEVEL_1(金额 ≤ 10 万)、RULE_LEVEL_2(10 万 < 金额 ≤ 50 万)、RULE_LEVEL_3(金额 > 50 万) - 每个 Rule 的 Action:指向不同 Workflow Definition(如
WF_PO_LVL1/WF_PO_LVL2/WF_PO_LVL3)
关键参数说明:
| 字段 | 必填 | 说明 |
|---|---|---|
| Rule Set Name | 是 | 全局唯一,需在 Workflow Definition 的Rule Set ID字段引用 |
| Expression | 是 | 使用 PEL 语法,&PO_HDR.PO_AMT取值,不可用%Bind() |
| Action Type | 是 | Workflow Definition(最常用),Component Interface(调用后台服务) |
| Action Value | 是 | 对应 Workflow Definition 名称,大小写敏感 |
2.3 Workflow Definition 定义节点流转,但节点类型决定EOAW_CORE行为
在PeopleTools > Workflow > Workflow Definitions中新建 Workflow Definition 后,其节点(Node)类型直接控制EOAW_CORE表的NODE_TYPE和STATUS更新逻辑:
| Node Type | EOAW_CORE.NODE_TYPE值 | 典型用途 | 注意事项 |
|---|---|---|---|
| Start | START | 流程入口 | 必须有且仅有一个,Next Node指向第一个审批节点 |
| Approve/Reject | APPROVE,REJECT | 人工审批动作 | Approver Type设为User ID时,EOAW_CORE.APPROVER_ID存具体用户;设为Role时,存角色名,运行时解析 |
| Decision | DECISION | 自动分支判断 | Expression 必须返回True/False,True Path/False Path指向不同节点 |
| End | END | 流程终止 | EOAW_CORE.STATUS设为COMPLETED或CANCELLED |
注意:若
EOAW_CORE.STATUS卡在IN_PROGRESS且NODE_TYPE为APPROVE,大概率是Approver Type设为Role但该角色下无有效用户,或Approver ID字段硬编码了已离职员工 ID。
3. 配置落地:用最小可运行示例验证 AWE 与 EOAW_CORE 的联动
以下以「采购申请单(REQ)自动触发两级审批」为例,给出可直接复现的配置路径。所有操作均在 PeopleTools 8.56+ 环境验证,避免 PDF 中常见版本混淆陷阱。
3.1 创建 Rule Set:RS_REQ_APPROVAL
进入PeopleTools > Workflow > Rule Sets→ 新建:
- Rule Set Name:
RS_REQ_APPROVAL - Description:
Req approval based on amount - Add Rule→Rule Name:
RULE_REQ_LVL1- Expression:
&REQ_HDR.TOTAL_AMT <= 100000 - Action Type:
Workflow Definition - Action Value:
WF_REQ_LVL1
- Expression:
- Add Rule→Rule Name:
RULE_REQ_LVL2- Expression:
&REQ_HDR.TOTAL_AMT > 100000 - Action Type:
Workflow Definition - Action Value:
WF_REQ_LVL2
- Expression:
逻辑说明:AWE 运行时按 Rule 顺序匹配,首个 Expression 为 True 的 Rule 生效。
&REQ_HDR.TOTAL_AMT是 Component Interface 中REQ_HDRRecord 的字段,必须确保该字段在 CI 中已暴露为 Public Property。
3.2 定义 Workflow Definition:WF_REQ_LVL1
进入PeopleTools > Workflow > Workflow Definitions→ 新建:
- Workflow Definition Name:
WF_REQ_LVL1 - Rule Set ID:
RS_REQ_APPROVAL(必须与上步一致) - Nodes:
START→Next Node:APPROVE_MGRAPPROVE_MGR(Node Type:Approve/Reject)- Approver Type:
Role - Role Name:
PURCHASING_MANAGER - Next Node (if Approved):
END_SUCCESS - Next Node (if Rejected):
END_REJECTED
- Approver Type:
END_SUCCESS(Node Type:End)→ Status:COMPLETEDEND_REJECTED(Node Type:End)→ Status:CANCELLED
3.3 绑定到业务组件并触发测试
- 进入
PeopleTools > Portal > Structure and Content→ 找到REQ组件 → Properties → Workflow 页签:- Workflow Definition Name:
WF_REQ_LVL1 - AWE Enabled:
Yes
- Workflow Definition Name:
- 在测试页面提交一笔
TOTAL_AMT = 80000的采购申请; - 查询
EOAW_CORE验证:
SELECT WORKFLOW_ID, STATUS, NODE_TYPE, APPROVER_ID, BUSINESS_KEY, LAST_UPDATE_DTTM FROM PS_EOAW_CORE WHERE BUSINESS_KEY = 'YOUR_REQ_ID' ORDER BY LAST_UPDATE_DTTM;预期结果:
- 第一行:
STATUS = 'PENDING',NODE_TYPE = 'APPROVE',APPROVER_ID = 'PURCHASING_MANAGER' - 第二行(审批后):
STATUS = 'COMPLETED',NODE_TYPE = 'END'
提示:若
APPROVER_ID为空,检查PURCHASING_MANAGER角色是否已分配给至少一个有效用户(PeopleTools > Security > Roles > Assign Users)。
4. 排查 EOAW_CORE 数据异常的三大高频场景与修复指令
当EOAW_CORE表出现数据滞留、状态错乱或重复记录时,不要盲目清表。以下是最常被 PDF 文档忽略但实际发生率最高的三类问题,附带精准定位命令与修复逻辑。
4.1 场景一:STATUS = 'ERROR'且ERROR_MSG包含Invalid Node Type
这是 Workflow Definition 中 Node Type 与 AWE 版本不兼容的典型表现。例如在 PT 8.54 中误用了Escalation节点(PT 8.57+ 才支持),AWE 会拒绝执行并写入错误。
定位命令:
SELECT WORKFLOW_ID, STATUS, ERROR_MSG, NODE_TYPE, LAST_UPDATE_DTTM FROM PS_EOAW_CORE WHERE STATUS = 'ERROR' AND LAST_UPDATE_DTTM > SYSDATE - 1 ORDER BY LAST_UPDATE_DTTM DESC;修复步骤:
- 查出
WORKFLOW_ID对应的 Workflow Definition(PS_EOAW_DEFINITION表); - 进入
PeopleTools > Workflow > Workflow Definitions,打开该定义; - 将报错的 Node Type 改为兼容类型(如
Escalation→Decision+ 手动设置超时逻辑); - 必须点击
Validate按钮(PDF 常漏写此步),成功后Status变为Validated; - 重新提交业务单据触发。
4.2 场景二:STATUS = 'PENDING'持续超过 24 小时,APPROVER_ID为角色但无用户
EOAW_CORE中APPROVER_ID存角色名,但PSROLEUSER表中该角色未关联任何USERID,导致审批无法分发。
定位命令:
SELECT a.BUSINESS_KEY, a.APPROVER_ID AS ROLE_NAME, COUNT(b.USERID) AS USER_COUNT FROM PS_EOAW_CORE a LEFT JOIN PSROLEUSER b ON a.APPROVER_ID = b.ROLENAME WHERE a.STATUS = 'PENDING' AND a.LAST_UPDATE_DTTM < SYSDATE - 1 GROUP BY a.BUSINESS_KEY, a.APPROVER_ID HAVING COUNT(b.USERID) = 0;修复指令:
-- 临时修复:为角色添加测试用户(生产环境需走权限流程) INSERT INTO PSROLEUSER (ROLENAME, USERID, DYNAMIC_SW, LASTUPDDTTM, LASTUPDOPRID) VALUES ('PURCHASING_MANAGER', 'PS', 'N', SYSDATE, 'PS'); COMMIT;注意:
DYNAMIC_SW = 'N'表示静态分配,避免与动态角色解析冲突;LASTUPDOPRID必须为有效 Operator ID。
4.3 场景三:同一BUSINESS_KEY出现多条STATUS = 'PENDING'记录
这是并发提交未加锁导致的 AWE 实例重复创建。EOAW_CORE表设计允许同一业务单据存在多个待处理实例,但正常流程应只有一条PENDING。
根因分析表:
| 现象 | 可能原因 | 验证方法 |
|---|---|---|
多条PENDING且INSTANCE_ID不同 | 用户快速连续提交 | 检查PS_EOAW_INSTANCE表中BUSINESS_KEY对应的INSTANCE_ID数量 |
多条PENDING且NODE_TYPE相同 | Workflow Definition 中Start节点被多次触发 | 查看PS_EOAW_DEFINITION_NODE中START节点的NEXT_NODE是否指向循环路径 |
多条PENDING且CREATED_DTTM时间差 < 1 秒 | 应用服务器未配置AWE Lock Timeout | 检查Web Profile中AWE Lock Timeout (sec)是否 ≥ 30 |
强制清理脚本(仅限测试环境):
DELETE FROM PS_EOAW_CORE WHERE BUSINESS_KEY IN ( SELECT BUSINESS_KEY FROM ( SELECT BUSINESS_KEY, COUNT(*) cnt FROM PS_EOAW_CORE WHERE STATUS = 'PENDING' GROUP BY BUSINESS_KEY HAVING COUNT(*) > 1 ) ) AND STATUS = 'PENDING' AND ROWID NOT IN ( SELECT MIN(ROWID) FROM PS_EOAW_CORE WHERE STATUS = 'PENDING' GROUP BY BUSINESS_KEY ); COMMIT;5. 利用 EOAW_CORE 的LAST_UPDATE_DTTM和STATUS实现审批时效监控
EOAW_CORE表不仅是日志存储,更是实时审批健康度的传感器。通过解析LAST_UPDATE_DTTM与当前时间的差值,可构建免代码的 SLA 监控看板,无需依赖第三方工具。
5.1 提取超时审批单据的标准化 SQL
以下 SQL 直接输出「超时未处理」的采购申请单,字段可对接 BI 工具:
SELECT a.BUSINESS_KEY AS REQ_ID, a.STATUS, a.NODE_TYPE, a.APPROVER_ID, TO_CHAR(a.LAST_UPDATE_DTTM, 'YYYY-MM-DD HH24:MI:SS') AS LAST_ACTION_TIME, ROUND((SYSDATE - a.LAST_UPDATE_DTTM) * 24, 1) AS HOURS_SINCE_LAST_ACTION, b.DESCR AS REQ_DESCRIPTION FROM PS_EOAW_CORE a JOIN PS_REQ_HDR b ON a.BUSINESS_KEY = b.REQ_ID WHERE a.STATUS = 'PENDING' AND (SYSDATE - a.LAST_UPDATE_DTTM) * 24 > 24 -- 超过24小时 AND a.NODE_TYPE = 'APPROVE' ORDER BY HOURS_SINCE_LAST_ACTION DESC;5.2 为EOAW_CORE添加函数索引提升查询性能
当EOAW_CORE表数据量超 100 万行时,上述查询可能全表扫描。在 Oracle 环境下,为STATUS和LAST_UPDATE_DTTM组合创建函数索引:
CREATE INDEX PS_EOAW_CORE_SL_IDX ON PS_EOAW_CORE ( CASE WHEN STATUS = 'PENDING' THEN LAST_UPDATE_DTTM END ) TABLESPACE PSINDEX;逻辑说明:该索引仅对
STATUS = 'PENDING'的记录建立LAST_UPDATE_DTTM有序结构,查询超时单据时WHERE STATUS = 'PENDING' AND LAST_UPDATE_DTTM < ...可直击索引叶节点,避免扫描全部PENDING记录。
5.3 用 PeopleCode 在审批节点注入时效预警
在APPROVE_MGR节点的OnExecute事件中添加 PeopleCode,实现审批前主动提醒:
/* 在 Workflow Node 的 PeopleCode 中 */ Local string &reqId = %BusinessKey; Local number &hoursSinceSubmit; SQLExec("SELECT ROUND((SYSDATE - MIN(LAST_UPDATE_DTTM)) * 24, 1) FROM PS_EOAW_CORE WHERE BUSINESS_KEY = :1 AND STATUS = 'PENDING'", &reqId, &hoursSinceSubmit); If &hoursSinceSubmit > 24 Then /* 发送邮件或写入预警表 */ SQLExec("INSERT INTO PS_EOAW_ALERT (REQ_ID, ALERT_TIME, ALERT_TYPE) VALUES (:1, SYSDATE, 'URGENT')", &reqId); End-If;此代码在审批人打开待办任务时触发,比定时扫描更及时,且不增加数据库负担。
审批时效不是靠催促实现的,而是靠EOAW_CORE表中每一行LAST_UPDATE_DTTM的精确刻度来定义的。
本文还有配套的精品资源,点击获取