摘自:https://blog.csdn.net/chenxianping/article/details/45061781
Oracle EBS对客户启用信用额度,若某客户超出信用额度和销售订单行非关闭状态时,则所有销售订单或销售订单行暂挂提示Credit Check Failure。当客户的收款正常以后,需要对销售订单释放暂挂操作比较痛苦的事情。
通客制化开发调用API批量释放,API函数:OE_Holds_Pvt.Release_Holds
参数 | 描述 |
p_order_tbl | 定义记录表(或索引表)数据类型,有二列分别为Header_Id(销售订单题头ID:OE_ORDER_HEADERS.HEADER_ID%TYPE)和Line_Id(销售订单行ID:OE_ORDER_LINES.LINE_ID%TYPE) |
p_hold_id | 暂挂ID |
p_release_reason_code | 释放原因代码 |
p_release_comment | 释放备注说明 |
x_return_status | 输出参数,是否执行成功参数,若值为S,则表示成功。若执行失败,则输出为E或U |
x_msg_count | 输出参数,若执行成功,则为0;否则输出错误信息的个数 |
x_msg_data | 输出参数,若执行成功,则为空,否则输出错误说明信息 |
其主要核心代码例实如下:
-
Declare
-
l_return_status Varchar2(300);
-
l_msg_data Varchar2(3000);
-
l_msg_count Number;
-
l_order_tbl OE_HOLDS_PVT.order_tbl_type;
-
l_Org_id Number := 114;
-
l_hold_id Number;
-
i Number := 0;
-
l_release_reason_code OE_HOLD_RELEASES.RELEASE_REASON_CODE%TYPE; --释放原因
-
l_release_comment OE_HOLD_RELEASES.RELEASE_COMMENT%TYPE; --释放备注
-
Cursor Cr Is
-
SELECT hdra.header_id,
-
hdra.order_number,
-
hsrc.hold_source_id,
-
hsrc.hold_id,
-
hlda.line_id
-
FROM oe_order_headers_all hdra, --销售订单题头
-
oe_order_holds_all hlda, --销售订单行暂挂明细
-
oe_hold_sources_all hsrc, --暂挂解挂明细
-
oe_hold_definitions hdef --暂挂定义表
-
WHERE 1 = 1
-
AND hdra.order_number = '1110032000' --销售订单編码
-
AND hdra.header_id = hlda.header_id
-
AND hlda.hold_source_id = hsrc.hold_source_id
-
AND hsrc.hold_id = hdef.hold_id
-
AND hlda.released_flag = 'N'
-
Order By hsrc.hold_id;
-
Begin
-
fnd_client_info.set_org_context(l_Org_id);
-
l_release_reason_code := 'MANUAL_RELEASE_MARGIN_HOLD';
-
l_release_comment := '测试释放暂挂';
-
For Rs In Cr Loop
-
If (Nvl(l_hold_id, 0) > 0 And l_hold_id <> Rs.hold_id) Then
-
OE_Holds_Pvt.Release_Holds(p_order_tbl => l_order_tbl,
-
p_hold_id => l_hold_id,
-
p_release_reason_code => l_release_reason_code,
-
p_release_comment => l_release_comment,
-
x_return_status => l_return_status,
-
x_msg_count => l_msg_count,
-
x_msg_data => l_msg_data);
-
If (l_return_status = 'S') Then
-
Dbms_Output.put_line('Release Success!');
-
Commit;
-
Else
-
dbms_output.put_line('l_msg_data:' || l_msg_data);
-
dbms_output.put_line('l_msg_count:' || l_msg_count);
-
Rollback;
-
End If;
-
i := 0;
-
End If;
-
i := i + 1;
-
l_hold_id := Rs.hold_id;
-
l_order_tbl(i).header_id := Rs.header_id;
-
l_order_tbl(i).line_id := Rs.line_id;
-
End Loop;
-
--
-
If (Nvl(i, 0) > 0) Then
-
OE_Holds_Pvt.Release_Holds(p_order_tbl => l_order_tbl,
-
p_hold_id => l_hold_id,
-
p_release_reason_code => l_release_reason_code,
-
p_release_comment => l_release_comment,
-
x_return_status => l_return_status,
-
x_msg_count => l_msg_count,
-
x_msg_data => l_msg_data);
-
If (l_return_status = 'S') Then
-
Dbms_Output.put_line('Release Success!');
-
Commit;
-
Else
-
dbms_output.put_line('l_msg_data:' || l_msg_data);
-
dbms_output.put_line('l_msg_count:' || l_msg_count);
-
Rollback;
-
End If;
-
End If;
-
END;
其中“l_release_reason_code”来源释放原因代码:RELEASE_REASON
N:OM\Setup\QuickCodes\Order Management;
用户以根实需要可以添加原因代码。
个人建议客制化开发批量释放暂挂,调用如下二个API包,原因:部分暂挂系统强制不能释放或者设置某一些职责不能释放暂挂。
1.销售订单题头释放暂挂API包:OE_Holds_Pvt.process_release_holds_orders
参数 | 描述 |
p_num_of_records | 单个或多个销售订单题头ID的记录条数,与下面参数p_record_ids是对应的 |
p_record_ids | 单个或通过逗号分隔多销售订单题头ID,如:p_record_ids=>'345,235,326,984' |
p_hold_id | 暂挂ID |
p_release_reason_code | 释放原因代码 |
p_release_comment | 释放备注说明 |
x_return_status | 输出参数,是否执行成功参数,若值为S,则表示成功。若执行失败,则输出为E或U |
x_msg_count | 输出参数,若执行成功,则为0;否则输出错误信息的个数 |
x_msg_data | 输出参数,若执行成功,则为空,否则输出错误说明信息 |
2.销售订单行释放暂挂API包:OE_Holds_Pvt.process_release_holds_lines
参数 | 描述 |
p_num_of_records | 单个或多个销售订单行ID的记录条数,与下面参数p_record_ids是对应的 |
p_record_ids | 单个或通过逗号分隔多销售订单行ID,如:p_record_ids=>'2345,4235,5326,6984' |
p_hold_id | 暂挂ID |
p_release_reason_code | 释放原因代码 |
p_release_comment | 释放备注说明 |
x_return_status | 输出参数,是否执行成功参数,若值为S,则表示成功。若执行失败,则输出为E或U |
x_msg_count | 输出参数,若执行成功,则为0;否则输出错误信息的个数 |
x_msg_data | 输出参数,若执行成功,则为空,否则输出错误说明信息 |
系统强制不能释放暂挂的如下三种暂挂:
名称 | 描述 |
Pending Process Payment Hold | This hold is applied when Process Payment is deferred |
Epayment Failure Hold | This hold is for expected errors returned by iPayment, like invalid data |
Epayment Server Failure Hold | This hold is for any unxpected errors returned by ipayment, like failure to connect to the server |