DECLARE
lv_return_status VARCHAR2(5);
ln_msg_count NUMBER;
lv_msg_data VARCHAR2(10000);
lr_changed_attributes wsh_delivery_details_pub.changedattributetabtype;
lr_serial_rangetab_rec wsh_glbl_var_strct_grp.ddserialrangetabtype;
BEGIN
lr_changed_attributes(1).delivery_detail_id := 142861; --物料单编号
lr_changed_attributes(1).shipped_quantity := 0; -- 发运的数量 如果之前有序列号 需要重新分配 如果要改变的shipped_quantity 数量和更新之前的一样,则会报错
--lr_changed_attributes(1).serial_number := 'B065'; --这里的序列号指定只能当发运的数量shipped quantity为1的时候可以使用
lr_changed_attributes(1).cycle_count_quantity := 2; -- backordered数量
--如果你要分配的物料单内有多个要发运的 而且需要 序列号 则可以加上下列数据
lr_serial_rangetab_rec(1).delivery_detail_id := 142821;
lr_serial_rangetab_rec(1).from_serial_number := 'B060';
lr_serial_rangetab_rec(1).to_serial_number := 'B060';
lr_serial_rangetab_rec(2).delivery_detail_id := 142821;
lr_serial_rangetab_rec(2).from_serial_number := 'B066';
lr_serial_rangetab_rec(2).to_serial_number := 'B066';
wsh_delivery_details_pub.update_shipping_attributes(p_api_version_number => 1.0,
p_init_msg_list => fnd_api.g_false,
p_commit => fnd_api.g_false,
x_return_status => lv_return_status,
x_msg_count => ln_msg_count,
x_msg_data => lv_msg_data,
p_changed_attributes => lr_changed_attributes,
--p_serial_range_tab => lr_serial_rangetab_rec, 这个可以没有
p_source_code => 'OE');
dbms_output.put_line('first ship confirm return status ' || lv_return_status || '--lv_msg_data ' || lv_msg_data ||
fnd_msg_pub.get(fnd_msg_pub.g_next, fnd_api.g_false));
IF lv_return_status <> 'S' THEN
FOR i IN 1 .. ln_msg_count LOOP
lv_msg_data := lv_msg_data || '|' || fnd_msg_pub.get(fnd_msg_pub.g_next, fnd_api.g_false);
END LOOP;
END IF;
dbms_output.put_line('lv_msg_data' || lv_msg_data);
END;
--这个api主要是用来更新物料单的一些信息, 要注意的是 当要更新的物料单时,如果物料是有序列号控制的,运行会报异常,让你重新分配序列号。