You are browsing the archive for Oracle EBS功能和流程.

HR人员信息导入(2)

九月 27, 2008 in Oracle EBS功能和流程

本文紧接 HR人员信息导入(1) 进行描述HR人员信息导入过程。

Oracle EBS 11.5.10.2

一、基本必备信息

通过第一部分的手工录入数据,我们知道录入一个员工的信息时,界面上必须输入的字段有:

  1. 员工的姓 LAST_NAME
  2. 身份证号 NATIONAL_IDENTIFIER
  3. 员工编号 EMPLOYEE_NUMBER
  4. 员工类型 PERSON_TYPE_ID
  5. 性别SEX
  6. *移居国外者 (中国时需要) LOC_ITEM08
  7. *户口类型 (中国时需要) LOC_ITEM04
  8. *户口所在地 (中国时需要) LOC_ITEM05

二、APIs主要参数描述

hr_employee_api.create_employee过程的参数非常丰富,包含了一个员工几乎所有涉及到的属性,除了上述几个介绍的必备字段外,另外还有一些重要字段,下面介绍该过程的部分重要参数:

  1. p_validate 必填,该参数可选值TRUEFALSE,当参数输入TRUE时该过程仅对所填数据进行校验,并给出信息反馈,即使通过校验也不提交到数据库;FALSE时对输入的参数进行校验,当验证通过时将导入信息存入数据库
  2. p_hire_date 必填,雇佣日期,Oracle日期格式
  3. p_business_group_id 必填,当前创建人员所在的业务组ID
  4. p_last_name 必填,员工的姓
  5. p_sex 必填,员工性别,可以填入”M“或”F“表示男性或女性,系统会使用”SEX” HR快速编码中存在的值进行验证
  6. p_person_type_id 必填,所创建的员工类别的ID
  7. p_employee_number 必填,员工号,由当前业务组的员工编号生成方法来决定是输入值或得到值。当该生成方法设定为自动生成时,填入该参数的变量将会获得到一个由系统根据序列生成的员工编号。当业务组的生成方法设定为需要输入时,就需要给代入该参数的变量先赋值,然后传递给该参数,系统会校验该员工号是否有重复
  8. p_per_information4 条件必填,户口类型,当使用中国HRMS管理时该字段将为必填选项,输入员工的户口类型。当判断到当前位中国时会调用per_cn_emp_leg_hook.check_int_employee进行校验,对应参数p_hukou_type
  9. p_per_information5条件必填,户口所在地,当使用中国HRMS管理时该字段将为必填选项,输入员工的户口所在地。当判断到当前位中国时会调用per_cn_emp_leg_hook.check_int_employee进行校验,对应参数p_hukou_location
  10. p_per_information8条件必填,是否出国标示,当使用中国HRMS管理时该字段将为必填选项。当判断到当前位中国时会调用per_cn_emp_leg_hook.check_int_employee进行校验,对应参数p_expatriate_indicator
  11. p_original_date_of_hire 必填,原始雇佣日期
  12. p_date_of_birth 条件必填,当在该员工的分配信息中定义了工资单,就必须在员工信息界面输入该员工的出生日期

注:如果系统启用了描述性弹性域,而且其中包括了必填的字段,那也需要提供相关信息

三、常见APIs调用的错误及原因

a) ORA-20001: The mandatory argument XXXX value cannot be null

必填参数XXXX没有填写,注意当使用中国HRMS时p_per_information4/5/8均为必填项

b) ORA-20001: The value XXXX not valid for the XXXX field.

不同字段有其自己的验证规则,有些使用hr_lookups中的快速编码验证,有些根据Value Set中的值验证。

c) ORA-20001: You must enter the gender for an employee.

员工性别为填。

d) ORA-20001: Employee Number already exists.

员工工号在系统中已经存在,需要使用新的工号。

四、APIs调用实例

导入时的各变量定义及调用格式请参考附属脚本:hr_people_imp.tst

相关脚本下载:Download HR人员信息导入 Version 1

-

HR人员信息导入(1)

九月 26, 2008 in Oracle EBS功能和流程

 

Oracle EBS 11.5.10.2

 

本文讲述Oracle EBS HR项目实施时,通过开发导入的各种HR相关数据及API导入方法。这里描述HR人员基本信息导入的方法。

 

HR人事模块在上线前会导入大量人员基本信息。一般通过使用Oracle HR模块的标准API进行人员信息的导入, 一般导入步骤如下:

  1. 通常在系统中会先建立客户化临时表
  2. 将客户整理好的数据导入临时表中
  3. 在临时表进行数据的校验,校验根据当前客户的需求和系统的实际情况来完成
  4. 完成校验后的数据逐行调用API导入系统

 

 

利用标准界面创建员工

 

录入员工信息是在标准的员工的录入界面。

 

1. 完成了HR模块的基础模块设置后进入“中国HRMS管理员”或其他具有相关权限的职责

2. 打开标准Form,路径:中国HRMS管理员–>人员–>输入和维护;英文环境:China HRMS Manager–>People–>Enter and Maintain

3. 打开人员输入维护界面后如下图所示,会弹出查询窗口让用户新增数据或查找

hr_people_enter_and_maintain_find

 

4. 点击新建(New)按钮后就会进入人员的输入界面,这个时候我们可以看到主界面上有哪些是必输项,这些项都会以黄色标识。但实际在输入时会有一些项根据当前实际数据信息也动态变成必须

hr_people_enter_and_maintain_new

 

5. 首先我们在界面上输入当前所见的黄色区域,包括“”和“身份证号”,并切换一些Tab页面将其中的必输字段也填写完整后保存,回出现如下“在首次创建记录时,您必须选择活动类型的值”的提示信息

hr_people_enter_and_maintain_error

 

6. 在主界面右上方选择“操作(Action)”,选择创建雇佣后,就需要输入员工号并且自动带出右下方的起始日期。然后再保存的时候系统会提示必须设置员工性别,我们在使用下拉框“Gender”选择性别。完成上述选择后保存员工保存成功。(如果此时还有其他提示信息标识当前环境可能有部分不同的基础设置导致)

7. 员工信息建立后我们可以看到同时创建的信息包括1条默认主分配信息,从主界面下方点击Assignment按钮进入分配界面

hr_people_assignment

 

8. 同时还创建了一条员工服务期记录,同国主界面点击“Others”选择“Person Type Usage”打开界面

hr_people_perso_type_usage

 

9. 在第一节中我们描述了如何利用系统界面进行单条员工最少信息的录入。但是往往在项目实施阶段会有大批量的员工信息需要录入系统,通过手工录入或一些键盘指令软件如Dataload进行数据录入都是非常低效的,当涉及到上万条员工信息的时候需要消耗大量的时间。

因此我们使用Orocle标准的API,通过一些程序逻辑将数据进行导入。

当一条员工记录保存后通过第一节的内容,我们知道会同时生成3条数据包括1条员工基本信息,1条分配信息以及1条员工服务期记录。分别被保存在3张系统表中:

per_all_people_f
per_all_assignments_f
per_person_type_usages_f

10. 使用hr_employee_api.create_employee 过程,程序包版本$Header: peempapi.pkh 115.30 2006/03/03 05:38:37 lsilveir noship $ 创建员工信息,成功后也会在这三张表中生成记录。

 

后续将介绍如何使用hr_employee_api将人员信息导入系统

总账数据访问安全性控制(5)

九月 23, 2008 in Oracle EBS功能和流程

 

本文介绍在客户化开发的程序中需要考虑总账数据访问安全性的控制

 

一、Form界面开发

如果Form界面中需要引用账户组合,同时希望账户组合受到数据安全性控制,需要增加如下的工作:

  1. 添加GLCORE.pll库文件到Form中
  2. 在账户组合字段的WHEN-VALIDATE-ITEM触发器中添加如下的代码来验证权限

gl_flexfield. validate(ledger_id NUMBER, flexmode VARCHAR2, flexvalue VARCHAR2, alevel VARCHAR2, full_validation BOOLEAN, edate DATE)

 

这个过程验证如果失败后,过程中会抛出这个消息:GLCORE_NO_ACCESS

ledger_id:分类账ID
flexmode:账户组合模式,指弹性域包括:所有段组合,账户段,平衡段和管理段
                  对应可以提供的值:gl_flexfield.ALL_SEGMENTS, gl_flexfield.ACCOUNT, gl_flexfield.BALANCING, gl_flexfield.MANAGEMENT
flexvalue
:账户的段值,根据账户组合模式不同提供不同的值
alevel:数据访问权限级别:完全、写、只读和无权限。
             对应的值:gl_access_set.FULL_ACCESS, gl_access_set.WRITE_ACCESS, gl_access_set.READ_ONLY_ACCESS, gl_access_set.NO_ACCESS
full_validation
:段值是否需要验证
edate:验证段值的日期,此值为null时跳过值的验证

下面是一个实际的代码例子:

gl_flexfield.validate(:HEADER.ledger_id,
         gl_flexfield.ALL_SEGMENTS, :LINES.accounting_flexfield,
         gl_access_set.WRITE_ACCESS, TRUE, :HEADER.default_effective_date);

 

二、SQL编写

 

如果希望编写的SQL执行结果受到数据安全性的控制,需要特别添加限制。

 

1)凭证相关

如果在程序中希望SQL取出的凭证数据受到数据安全性的控制,那需要连接数据库表

GL_JE_SEGMENT_VALUES来过滤数据,主要的字段:

je_header_id:凭证头ID
segment_type_code:段值类型,有B代表平衡段;M代表管理段
segment_value:段值

 

表关系图:

 gl_access_set_je_erd

 

同时检查数据安全性设置表GL_ACCESS_SET_ASSIGNMENTS中的设置:
access_set_id = fnd_profile.value(‘GL_ACCESS_SET_ID’)
ledger_id
segment_value
access_privilege_code

 

下面是一个使用的例子:

SELECT *
  FROM gl_je_batches_headers_v
WHERE chart_of_accounts_id = 101
   AND period_set_name = ‘Accounting’
   AND accounted_period_type = ‘Month’
   AND (gl_je_batches_headers_v.ledger_id IN
       (SELECT acc.ledger_id
           FROM gl_access_set_ledgers acc
          WHERE acc.access_set_id = fnd_profile.value(‘GL_ACCESS_SET_ID’)) AND EXISTS
        (SELECT ‘readable line’
           FROM gl_je_segment_values sv, gl_access_set_assignments acc
          WHERE sv.je_header_id = gl_je_batches_headers_v.je_header_id
            AND sv.segment_type_code = ‘B’
            AND acc.access_set_id = fnd_profile.value(‘GL_ACCESS_SET_ID’)
            AND acc.ledger_id = gl_je_batches_headers_v.ledger_id
            AND acc.segment_value = sv.segment_value))
   AND (je_batch_id = header_je_batch_id_qry + 0)
   AND (header_name = ’06-NOV-02 Project Mfg To Consolidation USD’)
ORDER BY batch_name, period_name

 

2)分类帐相关

如果在程序中希望SQL取出的分类账数据受到数据安全性的控制,那需要连接数据库表
XLA_AE_SEGMENT_VALUES

ae_header_id:分类账头ID
segment_type_code:段值类型,有B代表平衡段;M代表管理段
segment_value:段值

 

表关系图:

 gl_access_set_xla_erd

 

同时检查数据安全性设置表GL_ACCESS_SET_ASSIGNMENTS中的设置:
access_set_id = fnd_profile.value(‘GL_ACCESS_SET_ID’)
ledger_id
segment_value
access_privilege_code

 

一个使用的例子:

SELECT *
  FROM xla_ae_headers xah
WHERE (ledger_id IN
       (SELECT acc.ledger_id
           FROM gl_access_set_ledgers acc
          WHERE acc.access_set_id = fnd_profile.VALUE(‘GL_ACCESS_SET_ID’)) AND
       EXISTS
        (SELECT ‘readable line’
           FROM xla_ae_segment_values sv, gl_access_set_assignments acc
          WHERE sv.ae_header_id = xah.ae_header_id
            AND sv.segment_type_code = ‘B’
            AND acc.access_set_id = fnd_profile.VALUE(‘GL_ACCESS_SET_ID’)
            AND acc.ledger_id = xah.ledger_id
            AND acc.segment_value = sv.segment_value))

 

三、PL/SQL编写

 

如果在客户化编写的PL/SQL程序中需要考虑总账数据安全性控制,使用数据库包GL_FORMSINFO中所提供的过程与方法,下面是它的声明:

SQL> descr GL_FORMSINFO;
Element                   Type     
————————- ———
FULL_ACCESS               CONSTANT 
WRITE_ACCESS              CONSTANT 
READ_ACCESS               CONSTANT 
NO_ACCESS                 CONSTANT 
GET_COA_INFO              PROCEDURE
GET_ACCESS_INFO           PROCEDURE
CHECK_ACCESS              FUNCTION 
GET_LEDGER_TYPE           FUNCTION 
GET_DEFAULT_LEDGER        FUNCTION 
HAS_SINGLE_LEDGER         FUNCTION 
WRITE_ANY_LEDGER          FUNCTION 
GET_LEDGER_INFO           PROCEDURE
VALID_BSV                 FUNCTION 
VALID_MSV                 FUNCTION 
MULTI_ORG                 FUNCTION 
INSTALL_INFO              FUNCTION 
GET_IEA_INFO              PROCEDURE
GET_USAGE_INFO            PROCEDURE
GET_BUSINESS_DAYS_PATTERN PROCEDURE
IEA_DISABLED_SUBSIDIARY   FUNCTION 
GET_INDUSTRY_MESSAGE      FUNCTION 
SESSION_ID                FUNCTION 
SERIAL_ID                 FUNCTION 

程序中使用 CHECK_ACCESS方法即可以检查数据访问安全性。

 

四、凭证导入

 

如果客户化程序需要通过总账接口来导入凭证,那需要注意导入凭证受到数据访问权限设置的控制,因此插入到GL_INTERFACE中的数据要充分考虑这点,一般可以采取如下方式:

  1. 如果运行导入程序的职责不具备完全访问分类账的权限,那可以包装一下导入程序,在调用导入程序之前进行数据的过滤
  2. 如果不希望受到数据访问权限的限制,也可以专门设置一个完整权限访问的职责,用它来进行凭证的导入

 

至此整个“总账数据访问安全性控制”系列已全部结束,下面是系列文章的链接:

 

总账数据访问安全性控制(5)

总账数据访问安全性控制(4)

总账数据访问安全性控制(3)

总账数据访问安全性控制(2)

总账数据访问安全性控制(1)

 

-

总账数据访问安全性控制(4)

九月 22, 2008 in Oracle EBS功能和流程

 

下面介绍启用了数据访问安全性控制之后可能会遇到的问题

 

一、凭证导入失败

 

如果职责设置了受限制的数据访问权限集,很有可能在进行凭证导入的过程中发生错误,由于导入过程中导入程序会检测用户是否有读取数据的权限,如果发现GL_INTERFACE表中包括了一些用户无法在总账模块操作的数据,导入程序会报出如下的错误代码和信息:
EM29 You do not have access to this ledger and account combination.

 

二、无法打开会计期

 

无法打开会计期,打开会计期的按钮是灰色的,如下图:

gl_access_set_cannot_open_period

 

这是由于用户的职责不具备完全访问分类账数据的权限,只要切换到具备完整数据访问权限的职责即可打开会计期了。

 

==

总账数据访问安全性控制(3)

九月 19, 2008 in Oracle EBS功能和流程

 

下面介绍数据访问安全性控制两个不足的地方

 

一、凭证查找

 

在凭证查找的窗口中,凭证批号和凭证号的列表没有按照数据安全的设置进行屏蔽,因此会出现列表能够选择出来的凭证批和凭证是无法查找出来的,这样给用户的使用带来了一定的不方便。如下:

 

gl_access_set_journal_entry

注:此凭证通过具有权限的职责查询出来

 

如上图的凭证:06-NOV-02 Project Mfg To Consolidation USD
此凭证所有的凭证行的账户组合的平衡段值都是03的,而我的职责分配了数据权限集只能访问平衡段值为:01的。但是这个凭证名称在查找窗口的凭证列表中还是出现的,只是我选择了它之后查找没有结果,如下图:

 

gl_access_set_journal_entry_find

 

gl_access_set_journal_find_no_result 

 

二、账户组合录入

 

在总账模块输入账户组合时,如果设置了数据安全性屏蔽是按照平衡段或者管理段来进行屏蔽的时候,在录入账户组合的时候,用户可以看到不该看到的段值,只是在确认段组合的时候提示没有权限操作账户组合,无法完成录入,这样也给操作人员带来一定的麻烦。
数据访问权限集中设置了只能访问平衡段值为:01的。但是选择平衡段的时候还是能够看到所有的段值。只有确认账户组合的时候才会弹出:您无权访问此账户。如下图:

 

  gl_access_set_gcc_segment_val

 

gl_access_set_gcc_no_access

 

==