ABAP HR 工作经历 bapi & bdc
接口:先存入数据表ZOA_RZJL
再用bapi&bdc写入 HR_INFOTYPE_OPERATION
REPORT ZHR136_01.
TABLES:ZOA_RZJL,PA0023,PA3528.
DATA: CTU LIKE APQI-PUTACTIVE VALUE 'X',
MODE LIKE APQI-PUTACTIVE VALUE 'N',
UPDATE LIKE APQI-PUTACTIVE VALUE 'L',
NODATA LIKE APQI-PUTACTIVE VALUE '/'.
DATA:OPT LIKE CTU_PARAMS.
*----------------------------------------------------------------------*
* Batchinputdata of single transaction
DATA: BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE.
DATA: NODATA_CHARACTER VALUE ''.".'/'
DATA: MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
*INCLUDE BDCRECX1.
DATA:P0023 TYPE P0023,
WA_P0023 TYPE STANDARD TABLE OF PA0023 WITH HEADER LINE.
DATA:P3528 TYPE P3528,
WA_P3528 TYPE STANDARD TABLE OF PA3528 WITH HEADER LINE.
DATA:GS_TAB TYPE ZOA_RZJL,
GT_TAB TYPE STANDARD TABLE OF ZOA_RZJL WITH HEADER LINE.
DATA: REC_RETURN TYPE BAPIRET1,
KEY TYPE BAPIPAKEY.
START-OF-SELECTION.
SELECT * INTO CORRESPONDING FIELDS OF TABLE GT_TAB FROM ZOA_RZJL
WHERE PASS = 'N' AND PERNR NE ''.
SORT GT_TAB ASCENDING BY PERNR BEGDA.
LOOP AT GT_TAB WHERE PASS = 'N'.
PERFORM HR_BAPI_BDC.
IF SY-SUBRC = 0.
UPDATE ZOA_RZJL SET PASS = 'Y' WHERE SPD = GT_TAB-SPD AND BEGDA = GT_TAB-BEGDA AND ENDDA = GT_TAB-ENDDA.
ENDIF.
ENDLOOP.
FORM HR_BAPI_BDC.
CLEAR :MESSTAB[], NODATA.
CLEAR: BDCDATA,BDCDATA[].
CALL FUNCTION 'BAPI_EMPLOYEE_ENQUEUE' "加锁
EXPORTING
NUMBER = GT_TAB-PERNR
IMPORTING
RETURN = REC_RETURN.
CLEAR:P0023.
*P0023-PERNR = '00000011'.
P0023-BEGDA = GT_TAB-BEGDA.
P0023-ENDDA = GT_TAB-ENDDA.
P0023-ARBGB = GT_TAB-ARBGB.
P0023-BRANC = GT_TAB-BRANC.
P0023-ORT01 = GT_TAB-ORT01.
P0023-LAND1 = 'CN'.
P0023-ZZ_XZZE1 = GT_TAB-ZZ_XZZE.
P0023-ZZ_LZYY2 = GT_TAB-ZZ_LZYY1.
*P3528-BEGDA = '20190618'.
*P3528-ENDDA = '20191231'.
* P3528-DEPTN = .
* P3528-JOBINFO = .
* P3528-REFER = .
* P3528-REFCO = .
CALL FUNCTION 'HR_INFOTYPE_OPERATION'
EXPORTING
INFTY = '0023'"信息类型
NUMBER = GT_TAB-PERNR
* SUBTYPE = WAP0016-SUBTY
RECORD = P0023
VALIDITYEND = GT_TAB-ENDDA
VALIDITYBEGIN = GT_TAB-BEGDA
OPERATION = 'INS'
* DIALOG_MODE = '1'"对话框出现 2调试模式
* TCLAS = 'A'
IMPORTING
RETURN = REC_RETURN.
IF REC_RETURN-TYPE <> 'E'.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = ABAP_TRUE.
ENDIF.
CALL FUNCTION 'BAPI_EMPLOYEE_DEQUEUE' "解锁
EXPORTING
NUMBER = GT_TAB-PERNR
IMPORTING
RETURN = REC_RETURN.
*
WAIT UP TO 5 SECONDS.
PERFORM BDC_DYNPRO USING 'SAPMP50A' '1100'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_FIELD USING 'RP50G-PERNR'
GT_TAB-PERNR.
PERFORM BDC_FIELD USING 'RP50G-TIMR6'
'X'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'RP50G-CHOIC'.
PERFORM BDC_FIELD USING 'RP50G-CHOIC'
'0023'.
PERFORM BDC_DYNPRO USING 'SAPMP50A' '1100'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'RP50G-PERNR'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=MOD'.
PERFORM BDC_FIELD USING 'RP50G-PERNR'
GT_TAB-PERNR.
PERFORM BDC_FIELD USING 'RP50G-TIMR6'
'X'.
PERFORM BDC_FIELD USING 'RP50G-CHOIC'
'0023'.
PERFORM BDC_DYNPRO USING 'MP002300' '2028'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=UPD'.
PERFORM BDC_FIELD USING 'P0023-BEGDA'
GT_TAB-BEGDA.
PERFORM BDC_FIELD USING 'P0023-ENDDA'
GT_TAB-ENDDA.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'P3528-REFCO'.
* PERFORM BDC_FIELD USING 'P0023-ARBGB'
* RECORD-ARBGB_006.
* PERFORM BDC_FIELD USING 'P0023-BRANC'
* RECORD-BRANC_007.
PERFORM BDC_FIELD USING 'P3528-DEPTN'
GT_TAB-DEPTN.
PERFORM BDC_FIELD USING 'P3528-JOBINFO'
GT_TAB-JOBINFO.
* PERFORM BDC_FIELD USING 'P0023-LAND1'
* RECORD-LAND1_010.
* PERFORM BDC_FIELD USING 'P0023-ORT01'
* RECORD-ORT01_011.
PERFORM BDC_FIELD USING 'P3528-REFER'
GT_TAB-REFER.
PERFORM BDC_FIELD USING 'P3528-REFCO'
GT_TAB-REFCO.
PERFORM BDC_DYNPRO USING 'MP002300' '2028'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'/E'.
OPT-DISMODE = 'N'.
OPT-UPDMODE = 'S'.
OPT-DEFSIZE = 'X'.
OPT-NOBINPT = 'X'.
*PERFORM BDC_TRANSACTION USING 'PA30'.
CALL TRANSACTION 'PA30' USING BDCDATA
* MODE ctumode
* UPDATE cupdate
OPTIONS FROM OPT
MESSAGES INTO MESSTAB.
ENDFORM.
*----------------------------------------------------------------------*
* Insert field *
*----------------------------------------------------------------------*
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
CLEAR BDCDATA.
BDCDATA-PROGRAM = PROGRAM.
BDCDATA-DYNPRO = DYNPRO.
BDCDATA-DYNBEGIN = 'X'.
APPEND BDCDATA.
ENDFORM.
*----------------------------------------------------------------------*
* Insert field *
*----------------------------------------------------------------------*
FORM BDC_TRANSACTION TABLES P_MESSTAB
USING P_TCODE
P_CTU
P_MODE
P_UPDATE.
DATA: L_SUBRC LIKE SY-SUBRC.
IF P_CTU <> 'X'.
CALL FUNCTION 'BDC_INSERT'
EXPORTING
TCODE = P_TCODE
TABLES
DYNPROTAB = BDCDATA
EXCEPTIONS
OTHERS = 1.
ELSE.
CALL TRANSACTION P_TCODE USING BDCDATA
MODE P_MODE
UPDATE P_UPDATE
MESSAGES INTO P_MESSTAB.
ENDIF.
L_SUBRC = SY-SUBRC.
REFRESH BDCDATA.
SY-SUBRC = L_SUBRC.
ENDFORM.
FORM BDC_FIELD USING FNAM FVAL.
IF FVAL <> NODATA_CHARACTER.
CLEAR BDCDATA.
BDCDATA-FNAM = FNAM.
BDCDATA-FVAL = FVAL.
APPEND BDCDATA.
ENDIF.
ENDFORM.