OE_ORDER_LINES_ALL.LINE_TYPE_ID 在 OM 标准 API 中的使用全景
核心前提:
LINE_TYPE_ID用来读取OE_LINE_TYPES_B中的配置开关(INVENTORY_ITEM_FLAG、MODEL_FLAG、OPTION_FLAG、RETURN_FLAG、DEFAULT_LINE_FLOW_ID),所有履约、定价、库存、工作流分支判断都依赖它。 区分两种场景: 1)入参传入 LINE_TYPE_ID:创建 / 更新订单行; 2)内部读取 LINE_TYPE_ID:业务逻辑路由、校验、分支判断(绝大多数 API)。
一、核心公共 API(开发最常用)
1. OE_ORDER_PUB(OM 入口核心包)
PROCESS_ORDER
最关键 API,LINE_TYPE_ID 双重用途
- 创建 / 更新订单行:入参
l_line_tbl().LINE_TYPE_ID- 新建行必须传入;不传则通过默认规则自动推导;
- 更新行时,如果放开处理约束,可以修改 LINE_TYPE_ID;
- 内部校验逻辑
- 根据 LINE_TYPE_ID 读取行类型属性:
- 是否实物物料、是否模型行、是否退货行;
- 校验数量正负(销售行正数、RMA 退货行负数);
- 加载默认 Line Flow 工作流;
- 控制:是否允许 ATP、是否允许库存预留、是否允许发运;
- 控制处理约束(Processing Constraints)校验:能否修改字段、能否取消、能否调度。
- 根据 LINE_TYPE_ID 读取行类型属性:
GET_ORDER
根据 LINE_ID 读取订单完整行记录,返回结构中携带 LINE_TYPE_ID; 外部程序拿到行数据后,依靠 LINE_TYPE_ID 区分商品行 / 运费 / 模型行用于报表、二次逻辑。
LOCK_ORDER
锁定订单头行,加载行记录,内部缓存 LINE_TYPE_ID 用于后续业务校验。
2. OE_SCHEDULE_PUB(调度 / ATP / 库存预留)
SCHEDULE_LINE / UNSCHEDULE_LINE 内部逻辑:
sql
根据LINE_TYPE_ID关联OE_LINE_TYPES_B.INVENTORY_ITEM_FLAG
IF INVENTORY_ITEM_FLAG = 'Y' THEN
执行ATP检查、创建/删除MTL_RESERVATIONS库存预留
ELSE
跳过ATP、跳过库存预留(运费、服务费行不调度)
END IF
- 运费行、费用行调用调度 API 会直接返回警告,不生成调度行;
- MODEL 模型父行禁止创建预留,仅 Option 组件行参与调度。
3. OE_CANCEL_PUB(订单行取消)
CANCEL_LINE 读取 LINE_TYPE_ID 做分支判断:
- RMA 退货行取消逻辑与销售行不一样;
- 实物行取消 → 自动释放库存预留;
- 非库存行(运费)取消不触碰 INV;
- 判断是否为 Model 行,禁止直接取消顶层模型行(必须先取消子 Option 行)。
4. OE_HOLD_PUB(冻结 / 释放冻结)
APPLY_HOLD / RELEASE_HOLD 支持头级、行级冻结;API 内部读取 LINE_TYPE_ID: 部分冻结来源(信贷冻结)可配置只对实物销售行生效,忽略运费 / 费用行。
5. OE_PRICE_PUB(重新定价)
PRICE_LINE / REPRICE_ORDER LINE_TYPE_ID 作为定价上下文传入 QP 定价引擎; 价目表、修改器可以设置行类型过滤条件,不同行类型适用不同折扣规则; 运费行使用单独的定价逻辑。
6. OE_WF_API(工作流控制)
- START_LINE_FLOW:根据 LINE_TYPE_ID 读取
OE_LINE_TYPES_B.DEFAULT_LINE_FLOW_ID,启动对应行工作流; - CONTINUE_FLOW:履约节点(发运、开票)校验行类型,RMA 行走退货工作流,销售行走标准履约流程;
经典故障:LINE_TYPE_ID 配置错误 → 绑定错误 Line Flow,导致发运后无法自动推送 AR 接口。
二、集成与底层私有 PVT API(系统后台并发、模块集成调用)
7. OE_SHIPPING_INTEGRATION_PVT(OM ↔ WSH 发运集成)
挑库发放、Ship Confirm 核心内部包:
- 读取 LINE_TYPE_ID,非 INVENTORY_ITEM_FLAG 行不生成 WSH_DELIVERY_DETAILS 发运行;
- 运费行不会下发到仓库执行拣货;
- 区分销售出库行 vs RMA 退货接收行,传递不同方向给 WSH。
8. OE_BULK_PROCESS_LINE(Order Import 批量导入底层)
OE_HEADERS_IFACE_ALL / OE_LINES_IFACE_ALL 转正逻辑:
- 校验传入 LINE_TYPE_ID 是否有效、是否启用;
- 根据行类型校验数量符号、物料是否必填;
- 自动填充默认属性(MODEL_FLAG、OPTION_FLAG)。
9. OE_SCHEDULE_UTIL(调度底层工具包)
ATP 可用性计算、预留创建 / 释放; 依靠 LINE_TYPE_ID 过滤不需要参与供需规划的费用行。
10. OE_LINE_UTIL(订单行通用工具)
Query_Row、Validate_Line_Type; 几乎所有 OM API 都会调用此工具加载行类型缓存。
三、QP 定价模块联动 API(QP_PUB_PRICING.PRICE_REQUEST)
OM 调用 QP 时,会把 LINE_TYPE_ID 作为定价上下文传入; 高级定价修改器(Modifier)可以设置条件:仅对指定行类型生效。
四、RMA 退货相关 API
OE_RMA_PUB 创建退货行时,自动分配 RETURN_FLAG=Y 的 LINE_TYPE_ID; 后续收货、贷项通知单接口流程全部依靠 LINE_TYPE_ID 区分退货业务。
五、API 层面 LINE_TYPE_ID 两大典型使用模式
模式 A:【入参输入】创建 / 更新订单
plsql
l_line_tbl(i).LINE_TYPE_ID := xxx;
OE_ORDER_PUB.PROCESS_ORDER(..., p_line_tbl => l_line_tbl);
适用:新建 SO、新建 RMA、接口导入变更订单。
模式 B:【内部读取路由判断】(绝大多数业务 API)
plsql
--伪代码,所有调度/取消/发运/工作流通用逻辑
SELECT INVENTORY_ITEM_FLAG,MODEL_FLAG,RETURN_FLAG
INTO l_inv_flag,l_model_flag,l_return_flag
FROM OE_LINE_TYPES_B
WHERE LINE_TYPE_ID = l_line_rec.line_type_id;
IF l_inv_flag = 'Y' THEN
执行库存、ATP、挑库相关逻辑;
ELSE
跳过库存履约;
END IF;
六、开发高频踩坑点
- 调用 PROCESS_ORDER 更新订单时,不要随意修改 LINE_TYPE_ID 标准处理约束默认禁止,强行传值会报错;放开约束后修改,会重新加载一套全新 Line Flow,极易造成 Workflow 卡死。
- 不要硬编码 LINE_TYPE_ID 数字 开发报表 / 客户化 API,必须关联
OE_LINE_TYPES_B,用标志(INVENTORY_ITEM_FLAG)判断,不能直接写LINE_TYPE_ID=1001。 - 外部接口导入(Order Import)LINE_TYPE_ID 错误后果
- 运费行配成实物行:尝试 ATP、创建预留、挑库报错;
- 实物行配成费用行:无法生成发运行,不能发货。
- CTO PTO/ATO 场景 Model 父行与 Option 子行 LINE_TYPE_ID 不同,API 内部依靠该标识区分是否需要展开选配结构。
七、API 清单精简汇总(速查)
公共 API(对外推荐调用)
- OE_ORDER_PUB.PROCESS_ORDER 【读写传入 + 内部校验】
- OE_ORDER_PUB.GET_ORDER
- OE_SCHEDULE_PUB.SCHEDULE_LINE / UNSCHEDULE_LINE
- OE_CANCEL_PUB.CANCEL_LINE
- OE_HOLD_PUB.APPLY_HOLD / RELEASE_HOLD
- OE_PRICE_PUB.REPRICE_ORDER
- OE_WF_API.START_LINE_FLOW
私有 PVT / 底层工具(一般不直接客户化调用)
- OE_SHIPPING_INTEGRATION_PVT
- OE_BULK_PROCESS_LINE
- OE_LINE_UTIL
- OE_SCHEDULE_UTIL

2600

被折叠的 条评论
为什么被折叠?



