目录
1、新增、删除,修改:HR_INFOTYPE_OPERATION
新增:INS
备注:这里新增是以PA0008这个信息类型为例
DATA: ls_p0008 TYPE p0008.
"先把0008信息类型的字段赋值
ls_p0008-waers = iv_waers.
ls_p0008-pernr = lv_pernr.
ls_p0008-infty = '0008'.
ls_p0008-endda = '99991231'.
* ls_p0008-trfar = is_input-trfar.
ls_p0008-trfgb = 'NA'.
ls_p0008-trfgr = '无职级'.
ls_p0008-trfst = 'NA'.
ls_p0008-bsgrd = '100'.
ls_p0008-divgv = '174'.
IF ev_sspt = '17'.
ls_p0008-trfar = 'I1'.
ELSEIF ev_sspt = '12'.
ls_p0008-trfar = 'A5'.
ELSEIF ev_sspt = '10'.
ls_p0008-trfar = 'A6'.
ELSE.
ls_p0008-trfar = 'A4'.
ENDIF.
ls_p0008-lga01 = iv_lgart.
ls_p0008-bet01 = iv_salar.
DATA ls_return TYPE bapireturn1.
"清缓存
CALL FUNCTION 'HR_INITIALIZE_BUFFER'
EXPORTING
pernr = lv_pernr.
CALL FUNCTION 'HR_PSBUFFER_INITIALIZE'.
"加锁
CALL FUNCTION 'BAPI_EMPLOYEE_ENQUEUE'
EXPORTING
number = lv_pernr
IMPORTING
return = ls_return.
IF ls_return-type CA 'AEX'.
es_message-msgty = 'E'.
es_message-msgtx = ls_return-message.
EXIT .
ENDIF.
CLEAR ls_return.
CALL FUNCTION 'HR_INFOTYPE_OPERATION'
EXPORTING
infty = '0008'
number = ls_p0008-pernr
subtype = ls_p0008-subty "子信息类型
* objectid = ls_pskey-objps
* lockindicator = ls_pskey-sprps
validityend = ls_p0008-endda
validitybegin = ls_p0008-begda
* recordnumber = ls_pskey-seqnr
record = ls_p0008
operation = 'INS' "INS:新增 DEL:删除 MOD
tclas = 'A'
dialog_mode = '0'
* nocommit = 'X'
IMPORTING
return = ls_return.
IF ls_return-type CA 'AEX'.
es_message-msgty = 'E'.
es_message-msgtx = ls_return-message.
ELSE.
es_message-msgty = 'S'.
es_message-msgtx = '成功'.
ENDIF.
"解锁
CALL FUNCTION 'BAPI_EMPLOYEE_DEQUEUE'
EXPORTING
number = lv_pernr.
删除:DEL
"先获取PA0008的信息
DATA: lt_p0008 TYPE TABLE OF p0008,
ls_p0008 TYPE p0008.
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
pernr = iv_user "员工号
infty = '0008'
begda = iv_begda "查询的开始日期
endda = iv_endda "查询的结束日期
* BYPASS_BUFFER = ' '
* LEGACY_MODE = ' '
* importing
* subrc =
TABLES
infty_tab = lt_p0008
EXCEPTIONS
infty_not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
DATA ls_return TYPE bapireturn1.
"清缓存
CALL FUNCTION 'HR_INITIALIZE_BUFFER'
EXPORTING
pernr = lv_pernr.
CALL FUNCTION 'HR_PSBUFFER_INITIALIZE'.
"加锁
CALL FUNCTION 'BAPI_EMPLOYEE_ENQUEUE'
EXPORTING
number = lv_pernr
IMPORTING
return = ls_return.
IF ls_return-type CA 'AEX'.
es_message-msgty = 'E'.
es_message-msgtx = ls_return-message.
EXIT .
ENDIF.
CLEAR ls_return.
read table lt_p0008 into ls_p0008 index 1.
if sy-subrc = 0.
CALL FUNCTION 'HR_INFOTYPE_OPERATION'
EXPORTING
infty = '0008'
number = ls_p0008-pernr
subtype = ls_p0008-subty "子信息类型
* objectid = ls_pskey-objps
* lockindicator = ls_pskey-sprps
validityend = ls_p0008-endda
validitybegin = ls_p0008-begda
* recordnumber = ls_pskey-seqnr
record = ls_p0008
operation = 'DEL' " DEL:删除
tclas = 'A'
dialog_mode = '0'
* nocommit = 'X'
IMPORTING
return = ls_return.
IF ls_return-type CA 'AEX'.
es_message-msgty = 'E'.
es_message-msgtx = ls_return-message.
ELSE.
es_message-msgty = 'S'.
es_message-msgtx = '成功'.
ENDIF.
endif.
"解锁
CALL FUNCTION 'BAPI_EMPLOYEE_DEQUEUE'
EXPORTING
number = lv_pernr.
修改:MOD
DATA: ls_p0008 TYPE p0008.
"先把0008信息类型要修改的字段赋值
ls_p0008-waers = iv_waers.
ls_p0008-pernr = lv_pernr.
ls_p0008-infty = '0008'.
ls_p0008-endda = '99991231'.
* ls_p0008-trfar = is_input-trfar.
ls_p0008-trfgb = 'NA'.
ls_p0008-trfgr = '无职级'.
ls_p0008-trfst = 'NA'.
ls_p0008-bsgrd = '100'.
ls_p0008-divgv = '174'.
IF ev_sspt = '17'.
ls_p0008-trfar = 'I1'.
ELSEIF ev_sspt = '12'.
ls_p0008-trfar = 'A5'.
ELSEIF ev_sspt = '10'.
ls_p0008-trfar = 'A6'.
ELSE.
ls_p0008-trfar = 'A4'.
ENDIF.
ls_p0008-lga01 = iv_lgart.
ls_p0008-bet01 = iv_salar.
DATA ls_return TYPE bapireturn1.
"清缓存
CALL FUNCTION 'HR_INITIALIZE_BUFFER'
EXPORTING
pernr = lv_pernr.
CALL FUNCTION 'HR_PSBUFFER_INITIALIZE'.
"加锁
CALL FUNCTION 'BAPI_EMPLOYEE_ENQUEUE'
EXPORTING
number = lv_pernr
IMPORTING
return = ls_return.
IF ls_return-type CA 'AEX'.
es_message-msgty = 'E'.
es_message-msgtx = ls_return-message.
EXIT .
ENDIF.
CLEAR ls_return.
CALL FUNCTION 'HR_INFOTYPE_OPERATION'
EXPORTING
infty = '0008'
number = ls_p0008-pernr
subtype = ls_p0008-subty "子信息类型
* objectid = ls_pskey-objps
* lockindicator = ls_pskey-sprps
validityend = ls_p0008-endda
validitybegin = ls_p0008-begda
* recordnumber = ls_pskey-seqnr
record = ls_p0008
operation = MOD' " MOD:修改
tclas = 'A'
dialog_mode = '0'
* nocommit = 'X'
IMPORTING
return = ls_return.
IF ls_return-type CA 'AEX'.
es_message-msgty = 'E'.
es_message-msgtx = ls_return-message.
ELSE.
es_message-msgty = 'S'.
es_message-msgtx = '成功'.
ENDIF.
"解锁
CALL FUNCTION 'BAPI_EMPLOYEE_DEQUEUE'
EXPORTING
number = lv_pernr.
注: MOD有时也可以用于定界,目前可以确定,时间约束为2和3的,直接用MOD,传好结束日期后就可以直接定界了
2、读取PA信息类型:HR_READ_INFOTYPE
DATA: lt_p0001 TYPE TABLE OF p0001,
ls_p0001 TYPE p0001.
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
pernr = iv_user "员工号
infty = '0001'
begda = iv_begda "查询的开始日期
endda = iv_endda "查询的结束日期
* BYPASS_BUFFER = ' '
* LEGACY_MODE = ' '
* importing
* subrc =
TABLES
infty_tab = lt_p0001
EXCEPTIONS
infty_not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
** 得到的内表数据lt_p0001就是信息类型PA0001的数据 **
3、入职,生成新工号用:HR_PAD_HIRE_EMPLOYEE
在这里插入代码片
4、加锁:BAPI_EMPLOYEE_ENQUEUE
** 锁定员工,对员工操作前,都必须锁定**
CALL FUNCTION 'BAPI_EMPLOYEE_ENQUEUE'
EXPORTING
number = lv_pernr
IMPORTING
return = ls_return.
IF ls_return-type CA 'AEX'.
es_message-msgty = 'E'.
es_message-msgtx = ls_return-message.
EXIT .
ENDIF.
5、解锁:BAPI_EMPLOYEE_DEQUEUE
加锁和解锁是一起使用的,只要有加锁那必定要有解锁
"解锁
CALL FUNCTION 'BAPI_EMPLOYEE_DEQUEUE'
EXPORTING
number = lv_pernr.