HR-将数据写入PA(nnnn)表

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.

你可能感兴趣的:(HR-将数据写入PA(nnnn)表)