PO Approve Script

EBS PO Approve Script

declare
  x_po_head_id number ;
begin

select po_header_id
into   x_po_head_id
from po_headers_all where
segment1 = '&ponumber'
and org_id = &org_id;

update po_headers_all
set authorization_status = 'APPROVED',
approved_flag = 'Y',
approved_date = sysdate,
last_update_date= sysdate
where po_header_id = x_po_head_id;

update po_line_locations_all
set approved_flag = 'Y'
where po_header_id = x_po_head_id ;

commit;

end;



明白了!你提到的问题还包括: - 前端传入的操作是 `"Approve"`(首字母大写); - 但配置中操作是 `"APPROVE"`(全大写); - 导致 `transitions.get(action)` 匹配不到,出现异常。 --- ### ✅ 解决方案:对 `action` 也进行标准化处理 我们需要对传入的 `action` 也做类似处理,统一转换为大写格式,以匹配配置中的键。 --- ### ✅ 修改后的完整 `getNextState` 方法(包含状态和操作标准化) ```java public String getNextState(String currentState, String action) { // 标准化状态名:去除空格、转大写、下划线替换空格 String normalizedState = toUpperSnakeCase(currentState); // 标准化操作名:转为全大写 String normalizedAction = action == null ? null : action.toUpperCase(); Map<String, Map<String, String>> workflow = workflowConfig.getSignWorkflow(); Map<String, String> transitions = workflow.get(normalizedState); if (transitions == null) { throw new IllegalArgumentException("未知状态: " + normalizedState); } String nextState = transitions.get(normalizedAction); if (nextState == null) { throw new IllegalArgumentException("状态 " + normalizedState + " 不支持操作: " + normalizedAction); } return nextState; } /** * 将状态名标准化为 UPPER_SNAKE_CASE 格式 * 示例:"New Request" → "NEW_REQUEST" */ private String toUpperSnakeCase(String input) { if (input == null || input.isEmpty()) { return input; } return input.replaceAll("\\s+", "_").toUpperCase(); // 替换空格为下划线 + 转为大写 } ``` --- ### ✅ 示例匹配效果 | 输入状态 | 输入操作 | 标准化后状态 | 标准化后操作 | 配置是否匹配 ✅ | |----------|----------|----------------|----------------|------------------| | `"New Request"` | `"Approve"` | `"NEW_REQUEST"` | `"APPROVE"` | ✅ 是 | | `"Wait Pie"` | `"approve"` | `"WAIT_PIE"` | `"APPROVE"` | ✅ 是 | | `"Modify"` | `"submit"` | `"MODIFY"` | `"SUBMIT"` | ✅ 是 | --- ### ✅ 用法示例 ```java String currentState = "New Request"; String action = "Approve"; String nextState = workflowService.getNextState(currentState, action); System.out.println(nextState); // 输出 WAIT_PIE ✅ ``` --- ### ✅ 优点总结 | 特性 | 描述 | |------------------|------| | ✅ 状态标准化 | 支持前端传入带空格或大小写不一致的状态 | | ✅ 操作标准化 | 支持前端传入大小写不一致的操作 | | ✅ 健壮性增强 | 避免因格式问题导致的匹配失败 | | ✅ 易维护 | 配置统一使用大写/下划线格式,便于管理 | ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值