应客户需求,需要写个脚本,批量关闭Bonus Item类型的采购订单,在metalink上搜索到一些方法,但是都测试不通。原来需要将代码生成一个并发程序。下面是测试成功的代码。
1.首先创建一个存储过程,然后在存储过程中调用PO_ACTIONS.CLOSE_PO
2.注册一个存储过程类型的并发程序
3.在application中测试结果。
1.首先创建一个存储过程,然后在存储过程中调用PO_ACTIONS.CLOSE_PO
2.注册一个存储过程类型的并发程序
3.在application中测试结果。
create or replace procedure xx_po_close
(
err_buff out varchar2,
retcode out number,
p_reason_desc varchar2,
p_po_from varchar2,
p_po_to varchar2)
as
l_return_code varchar2(2000);
l_result boolean;
cursor po_close_cur
is
select poh.segment1,
poll.po_header_id,
poll.po_line_id,
poll.line_location_id
from po_line_locations_all poll,
po_headers_all poh,
po_lines_all pol
where poll.po_header_id = poh.po_header_id
and poll.po_line_id = pol.po_line_id
and pol.po_header_id = poh.po_header_id
and upper(poh.authorization_status) = 'APPROVED'
and upper(poll.closed_code) = 'CLOSED FOR RECEIVING'
and (pol.unit_price = 0 or
poh.quantity_billed - poh.quantity >= 0)
and poh.segment1 between p_po_from and p_po_to;
begin
for po_close_rec in po_close_cur
loop
l_result := po_actions.close_po(
p_docid => po_close_rec.po_header_id,
p_doctyp => 'PO',
p_docsubtyp => 'STANDARD',
p_lineid => po_close_rec.po_line_id,
p_shipid => po_close_rec.line_location_id,
p_action => 'CLOSE',
p_reason => p_reason_desc,
p_calling_mode => 'PO',
p_conc_flag => 'N',
p_return_code => l_return_code,
p_auto_close => 'N',
p_action_date => sysdate,
p_origin_doc_id => null);
if l_result then
fnd_file.put_line(fnd_file.output,
po_close_rec.segment1 ' is Closed. ');
else
fnd_file.put_line(fnd_file.output,
po_close_rec.segment1 ' is not Closed. ');
end if;
end loop;
end;