HR由于组织复杂等多种原因,很少有类似后勤模块的标准BAPI,一般采用直接往表里写数据或者BDC,HR的表分两个大类:pannnn和hrpnnnn,本文是将数据写入pannnn中
DATA:GS_2007 TYPE P2007."一定是参考你要插入表的结构,例如PA(nnnn)的结构是Pnnnn
DATA LS_BAPIRET2 TYPE BAPIRET2.
DATA: LS_BAPIRET1 TYPE BAPIRETURN1,
LS_BAPIRET3 TYPE BAPIRETURN1.
DATA LV_TABLE TYPE PRELP-INFTY.
GS_2007-PERNR = IS_RETURN-PERNR.
GS_2007-BEGDA = IS_RETURN-BEGDA.
GS_2007-ENDDA = IS_RETURN-ENDDA.
GS_2007-BEGUZ = IS_RETURN-BEGUZ.
GS_2007-ENDUZ = IS_RETURN-ENDUZ.
GS_2007-SUBTY = '01'. "根据业务场景填写
GS_2007-KTART = '01'.
GS_2007-VTKEN = ''.
GS_2007-VERSL = '1'.
"将数据写入信息类型中之前需要锁定
CALL FUNCTION 'HR_INITIALIZE_BUFFER'
EXPORTING
TCLAS = 'A'
PERNR = GS_2007-PERNR.
CALL FUNCTION 'HR_PSBUFFER_INITIALIZE'."清缓存
*锁人
CALL FUNCTION 'BAPI_EMPLOYEE_ENQUEUE'
EXPORTING
NUMBER = GS_2007-PERNR
IMPORTING
RETURN = LS_BAPIRET1.
*赋编号
LV_TABLE = '2007'.
IF LS_BAPIRET1 IS INITIAL.
CALL FUNCTION 'HR_INFOTYPE_OPERATION'
EXPORTING
INFTY = LV_TABLE
NUMBER = GS_2007-PERNR
SUBTYPE = '01'
VALIDITYEND = GS_2007-BEGDA
VALIDITYBEGIN = GS_2007-ENDDA
RECORD = GS_2007
OPERATION = 'INS' "插入用INS,
*如果需要删除某个信息类型的数据用DEL,修改用MOD
DIALOG_MODE = '0'
IMPORTING
RETURN = LS_BAPIRET3.
CALL FUNCTION 'BAPI_EMPLOYEE_DEQUEUE'
EXPORTING
NUMBER = GS_2007-PERNR
IMPORTING
RETURN = LS_BAPIRET1.
IF LS_BAPIRET3-TYPE = ''."空为成功
LS_BAPIRET2-TYPE = 'S'.
LS_BAPIRET2-ID = GS_2007-PERNR.
LS_BAPIRET2-MESSAGE = '成功!'.
APPEND LS_BAPIRET2 TO RETURN.
CLEAR LS_BAPIRET2.
ELSE.
LS_BAPIRET2-TYPE = 'E'.
LS_BAPIRET2-ID = GS_2007-PERNR.
CONCATENATE '创建信息类型' LV_TABLE
LS_BAPIRET3-MESSAGE INTO LS_BAPIRET2-MESSAGE.
APPEND LS_BAPIRET2 TO RETURN.
CLEAR LS_BAPIRET2.
ENDIF.
ELSE.
LS_BAPIRET2-TYPE = 'E'.
LS_BAPIRET2-ID = GS_2007-PERNR.
LS_BAPIRET2-MESSAGE = '该员工已被锁定!'.
APPEND LS_BAPIRET2 TO RETURN.
CLEAR LS_BAPIRET2.
ENDIF.
CLEAR: GS_2007,LS_BAPIRET1,LS_BAPIRET2,LS_BAPIRET3..
ENDLOOP.