注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Memory extender

Beautiful Day..

 
 
 

日志

 
 

Cancel PO的相关问题  

2012-01-06 23:57:38|  分类: EBS |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
PO走外挂审批流程,完毕后通过API更新PO状态及Action History记录。
其中,将审批结果为Reject的PO通过API Cancel掉。
Problem:
API没有正确执行,返回错误信息如下:
Please undo the changes to the document in the current revision before taking the cancel action.

Cause: You are trying to cancel a document that has been altered since its last archived revision.

Action: You must first undo the changes before you can cancel the document.

大意是讲试图cancel一个同最后一次存档的版本对比,已经做过更改的PO。需要先改回这些改动才能cancel此PO。

----------------------------------------------------------------------------------------------------------------------------------------
Application中重现的错误如图:
Cancel PO的相关问题 - Gabriel - Gabriel
进行此操作时候的Action History如图:
Cancel PO的相关问题 - Gabriel - Gabriel
 而如下的情景下去Cancel则是会正常完成的:
Cancel PO的相关问题 - Gabriel - Gabriel
 下文有关于此两情节的说明
 ----------------------------------------------------------------------------------------------------------------------------------------
经过一番测试发现:
在PO单被Approve的时候,会同时往归档表PO_HEADERS_ARCHIVE_ALL及PO_LINES_ARCHIVE_ALL归档此版PO数据。而在PO单被Reject的时候不会做归档。
CANCEL PO的时候,系统会将PO单的数据与归档表中的最近一个归档进行对比,如果有数据不匹配,则无法CANCEL。此时比较简单的解决方法就是先提交审批,通过审批层次对此PO进行一次Approve再去做CANCEL。
如果PO单没有被Approve过,第一次审批就被Reject,那么归档表中自然不会有记录。此时,可以在Reject的状态下直接实现CANCEL PO

所以,可以有如下两种可能性
1.Submit —— Forward —— Reject——>Cancel
第一次提交之后就被Reject,此时可以直接做Cancel操作
2.Submit —— Forward —— Approve——Submit —— Forward——Reject——Submit —— Forward——Approve——>Cancel
第一次提交之后被Approve,之后进行修改再重新提交,被Reject,此时如进行Cancel操作,会报上面的错误,需要重新提交且被审批通过之后才能进行Cancel操作


 ----------------------------------------------------------------------------------------------------------------------------------------
 ----------------------------------------------------------------------------------------------------------------------------------------
Cancel PO的API使用如下:
DECLARE
  x_return_status VARCHAR2(10);
  l               VARCHAR2(4000);
BEGIN
  --初始化环境
  fnd_global.apps_initialize(1808, 50293, 178);
  --API
  apps.po_document_control_pub.control_document(p_api_version      => 1.0, -- p_api_version
                                                p_init_msg_list    => fnd_api.g_true, -- p_init_msg_list
                                                p_commit           => fnd_api.g_true, -- p_commit
                                                x_return_status    => x_return_status, -- x_return_status
                                                p_doc_type         => 'PO', -- p_doc_type
                                                p_doc_subtype      => 'STANDARD', -- p_doc_subtype
                                                p_doc_id           => NULL, -- p_doc_id
                                                p_doc_num          => 'gab001', -- p_doc_num 
                                                p_release_id       => NULL, -- p_release_id
                                                p_release_num      => NULL, -- p_release_num
                                                p_doc_line_id      => NULL, -- p_doc_line_id
                                                p_doc_line_num     => NULL, -- p_doc_line_num
                                                p_doc_line_loc_id  => NULL, -- p_doc_line_loc_id
                                                p_doc_shipment_num => NULL, -- p_doc_shipment_num
                                                p_action           => 'CANCEL', -- p_action
                                                p_action_date      => SYSDATE, -- p_action_date
                                                p_cancel_reason    => 'API Cancel', -- p_cancel_reason
                                                p_cancel_reqs_flag => 'N', -- p_cancel_reqs_flag
                                                p_print_flag       => NULL, -- p_print_flag
                                                p_note_to_vendor   => NULL, -- p_note_to_vendor
                                                p_use_gldate       => 'N'); -- p_use_gldate
  dbms_output.put_line(x_return_status);
  IF x_return_status <> 'S' THEN
    --获取错误信息
    FOR i IN 1 .. FND_MSG_PUB.count_msg LOOP
      l := FND_MSG_PUB.Get(p_msg_index => i, p_encoded => 'F');
    END LOOP;
    --显示错误信息
    FOR j IN 0 .. lengthb(l) / 255 LOOP
      dbms_output.put_line(substr(l, j * 255 + 1, 255));
    END LOOP;
  END IF;
END;
  评论这张
 
阅读(1598)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017