Oracle EBS: 获取PO审批人名字

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

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


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

假设基本的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;
posted @ 2012-01-09 11:39  我不卖豆腐  阅读(1871)  评论(0编辑  收藏  举报