惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
Microsoft Security Blog
Microsoft Security Blog
Recent Announcements
Recent Announcements
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Last Week in AI
Last Week in AI
罗磊的独立博客
腾讯CDC
云风的 BLOG
云风的 BLOG
月光博客
月光博客
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 三生石上(FineUI控件)
宝玉的分享
宝玉的分享
U
Unit 42
I
InfoQ
D
DataBreaches.Net
Blog — PlanetScale
Blog — PlanetScale
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
V
V2EX
美团技术团队
IT之家
IT之家
Stack Overflow Blog
Stack Overflow Blog
F
Fortinet All Blogs
GbyAI
GbyAI
S
SegmentFault 最新的问题

博客园 - 德仔

Win7环境下装SQL SERVER 2005 IIS的设置 C# Winform 使用 MYSQL 新增,读取数据乱码问题 gridview中的" "问题解决方法 [译]SQL2005/2008错误18456 登录失败的 解决方案 Compilation Error 解决方案汇集 KM知识管理推广方案 Oracle EBS: ASCP 学习 PL-SQL问题集锦 Global.asax文件失效的解决办法 一份DBA面试题 oracle:IF语句 Loop循环 Cursor的用法(二) Oracle:IF语句 Loop循环 Cursor的用法(一) Oracle EBS:PO行接收关闭后修改其它行自动打开 异常:HRESULT: 0x80070057 (E_INVALIDARG) 的处理 NPOI动态获取数据源绑定Gridview显示 Oracle EBS:SQL 失效一揽子PO协议 Web开发电子期刊 2010年第5期(第45期) [译]Oracle EBS:追踪PO全过程 Oracle PL/SQL:IF语句的基本使用
Oracle EBS: 获取PO审批人名字
德仔 · 2010-06-08 · via 博客园 - 德仔

PO审批的动作从数据库中去看有:    

OPEN    NO ACTION    REJECT    FORWARD      APPROVE
SUBMIT    CLOSE  RETURN  CANCEL  IMPORT  FINALLY CLOSE

通过查看po_action_history表就会发现很有意思的事情了

http://www.dezai.cn/blog/article.asp?id=343

假设基本的PO审批架构为

跟单员->采购员1审核->采购员2审核->采购总监审核

Sequence_Num   Action_Code  两列的数据就可以很清晰查看到整个审批流程了

而表中的object_id实际上跟po_header_all的po_header_id 及po_release_all 中的po_release_id也是有关联的.

有了以上这几个字段就可以串出来了,action_code实际上也可以做个变量,这样控制也就更灵活了。

这个应用在打印PO合同里面自动带出采购员中可以应用,省去手工签字的麻烦。

function GetChecker(p_object_id in number) return varchar2 as
  
    v_user_name Varchar2(50);
  
  begin
  
    Select PO_EMPLOYEES_SV.GET_EMP_NAME(POAH.EMPLOYEE_ID)
      into v_user_name
      FROM PO_ACTION_HISTORY POAH,
           PO_LOOKUP_CODES   POLC1,
           PO_LOOKUP_CODES   POLC2
     Where POLC1.LOOKUP_CODE(+) = POAH.ACTION_CODE
       AND POLC1.LOOKUP_TYPE(+) = 'APPROVER ACTIONS'
       AND POLC2.LOOKUP_CODE(+) = POAH.ACTION_CODE
       AND POLC2.LOOKUP_TYPE(+) = 'CONTROL ACTIONS'
       AND POAH.Sequence_Num = 2
       AND POAH.Action_Code = 'FORWARD'
       and poah.Object_Id = p_object_id
       and rownum = 1;
  
    return v_user_name;
  
  end;

我原来是用这个的,但后来发现有问题

function GetChecker(p_object_id in number) return varchar2 as
  
    v_user_name Varchar2(50);
  
  begin
  
    \* select fu.Description
     into v_user_name
     from Fnd_User fu
    where fu.Employee_Id = p_agent_id;*\
    select pahv.employee_name
      into v_user_name
      from PO_ACTION_HISTORY_V pahv
     where pahv.object_id = p_object_id
       and pahv.action_code = 'FORWARD'
       and pahv.sequence_num = 2
       and pahv.object_type_code = 'PO'
       and rownum = 1; --转发
    return v_user_name;
  
  end;