以0185 个人证件的信息类型为例,
导入文件用以下的EXCEL,另存为TAB键分隔的TXT,便可以进行导入
*&---------------------------------------------------------------------*
*& Report ZHR1_INFOTYPE_UPLOAD
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Report ZHR1_INFOTYPE_UPLOAD
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT Z_INFOTYPE_UPLOAD.
TYPE-POOLS: SLIS, ABAP.
INFOTYPES: 0001,3211.
TABLES : DD03L.
FIELD-SYMBOLS: <DYN_TABLE> TYPE STANDARD TABLE,
<DYN_TABLE_SEC> TYPE STANDARD TABLE,
<DYN_WA>,
<DYN_FIELD>,
<DYN_TABLE1> TYPE STANDARD TABLE,
<DYN_WA1>,
<DYN_FIELD1>,
<DYN_TABLE2_SEC> TYPE STANDARD TABLE,
<DYN_WA_SEC>.
DATA: DY_TABLE TYPE REF TO DATA,
DY_TABLE_SEC TYPE REF TO DATA,
DY_LINE TYPE REF TO DATA,
XFC TYPE LVC_S_FCAT,
IFC TYPE LVC_T_FCAT,
DY_TABLE1 TYPE REF TO DATA,
DY_LINE1 TYPE REF TO DATA,
DY_LINE_SEC TYPE REF TO DATA,
XFC1 TYPE LVC_S_FCAT,
IFC1 TYPE LVC_T_FCAT.
* form get_structure.
DATA : IDETAILS TYPE ABAP_COMPDESCR_TAB, IDETAILS1 TYPE ABAP_COMPDESCR_TAB,
XDETAILS TYPE ABAP_COMPDESCR.
DATA : REF_TABLE_DES TYPE REF TO CL_ABAP_STRUCTDESCR.
DATA: TABLENAME TYPE DD02L-TABNAME,
G_TABLENAME TYPE DD02L-TABNAME, G_TABLENAME1 TYPE DD02L-TABNAME.
*data : rec_field like T_FIELDS.
RANGES S_FIELDNAME FOR DD03L-FIELDNAME.
DATA:
BEGIN OF IG_INFO OCCURS 0,
C01(10),
C02(8),
C03(8),
C04(40),
C05(40),
C06(40),
C07(40),
C08(40),
C09(40),
C10(40),
C11(40),
C12(40),
C13(40),
C14(40),
C15(40),
C16(40),
C17(40),
C18(40),
C19(40),
C20(40),
C21(40),
C22(40),
C23(40),
C24(40),
C25(40),
END OF IG_INFO,
WA_INFO LIKE IG_INFO,
BEGIN OF IG_MSG OCCURS 0,
PERNR TYPE PERNR_D,
NAME(40),
MSG(180),
END OF IG_MSG.
DATA: BEGIN OF IG_PERNR OCCURS 0,
PERNR(10),
END OF IG_PERNR.
DATA: WA_PE LIKE IG_PERNR.
DATA: WA_MSG LIKE IG_MSG.
DATA: G_PERNR TYPE PERNR_D.
DATA: G_COL(2) TYPE N.
DATA: TAB_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,
G_LAYOUT TYPE SLIS_LAYOUT_ALV,
G_EVENTS TYPE SLIS_T_EVENT,
G_SORT TYPE SLIS_T_SORTINFO_ALV,
G_LIST_TOP_OF_PAGE TYPE SLIS_T_LISTHEADER,
G_SELFIELD TYPE SLIS_SELFIELD.
DATA: G_SEC_INTYPE LIKE RP50I-INFTY,
G_SECONDARY_DBNAME LIKE T777D-PPNNN.
* G_VIEKN LIKE P0003-VIEKN.
DATA: BEGIN OF NAMETAB OCCURS 50.
INCLUDE STRUCTURE DNTAB.
DATA END OF NAMETAB.
DATA: WA_NAMETAB LIKE DNTAB.
***********************************************************************************************
PARAMETERS: P_FILE LIKE RLGRAP-FILENAME OBLIGATORY,
P_INTYPE LIKE RP50I-INFTY OBLIGATORY,
P_COL LIKE G_COL DEFAULT '30' NO-DISPLAY,
P_VIEKN LIKE P0003-VIEKN DEFAULT '28'. " no-display.
***********************************************************************************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
DATA: M_TMP LIKE FILEPATH.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
DEF_FILENAME = ''
DEF_PATH = 'C:\'
MASK = ',TXT FILES(*.TXT),*.TXT,ALL FILES(*.*),*.*,'
MODE = 'O'
IMPORTING
FILENAME = P_FILE
EXCEPTIONS
INV_WINSYS = 1
NO_BATCH = 2
SELECTION_CANCEL = 3
SELECTION_ERROR = 4
OTHERS = 5.
START-OF-SELECTION.
PERFORM FRM_UPLOAD_FILE.
PERFORM FRM_PROCESS_DATA.
PERFORM DISPLAY_TABLE.
*&---------------------------------------------------------------------*
*& Form DISPLAY_TABLE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
FORM DISPLAY_TABLE.
PERFORM FRM_FIELDCAT."构造FIELDCAT
PERFORM FRM_DISPLAY."ALV显示
ENDFORM. "DISPLAY_TABLE
*&--------------------------------------------------------------------*
*& Form frm_upload_file
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM FRM_UPLOAD_FILE.
FIELD-SYMBOLS: <FS_C> TYPE ANY, <FS_VALUE> TYPE ANY.
DATA: L_C(2),L_NAME(30),L_NAME1(30),L_LOC(2) TYPE N, L_IDX LIKE SY-TABIX..
CONCATENATE 'P' P_INTYPE INTO G_TABLENAME.
SELECT SINGLE TABNAME INTO TABLENAME FROM DD02L WHERE TABNAME EQ G_TABLENAME.
IF SY-SUBRC NE 0.
MESSAGE 'Infotype is error' TYPE 'S'.
STOP.
ENDIF.
* CALL FUNCTION 'WS_UPLOAD'
* EXPORTING
* FILENAME = P_FILE
* FILETYPE = 'DAT'
** DAT_D_FORMAT = 'YYYYMMDD'
* TABLES
* DATA_TAB = IG_INFO
* EXCEPTIONS
* CONVERSION_ERROR = 1
* FILE_OPEN_ERROR = 2
* FILE_READ_ERROR = 3
* INVALID_TYPE = 4
* NO_BATCH = 5
* UNKNOWN_ERROR = 6
* INVALID_TABLE_WIDTH = 7
* GUI_REFUSE_FILETRANSFER = 8
* CUSTOMER_ERROR = 9
* NO_AUTHORITY = 10
* OTHERS = 11.
* IF SY-SUBRC <> 0.
* MESSAGE 'File error' TYPE 'S'.
* STOP.
* ENDIF.
* delete describe.
DATA: LF_PATHR TYPE STRING.
LF_PATHR = P_FILE.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
FILENAME = LF_PATHR
FILETYPE = 'ASC'
HAS_FIELD_SEPARATOR = 'X'
* HEADER_LENGTH = '0'
* READ_BY_LINE = 'X'
* DAT_MODE = ' '
* CODEPAGE = ' '
* IGNORE_CERR = ABAP_TRUE
* REPLACEMENT = '#'
* CHECK_BOM = ' '
* VIRUS_SCAN_PROFILE =
* NO_AUTH_CHECK = ' '
* IMPORTING
* FILELENGTH = FILELENGTH
* HEADER = HEADER
TABLES
DATA_TAB = IG_INFO
* CHANGING
* ISSCANPERFORMED = ' '
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_READ_ERROR = 2
NO_BATCH = 3
GUI_REFUSE_FILETRANSFER = 4
INVALID_TYPE = 5
NO_AUTHORITY = 6
UNKNOWN_ERROR = 7
BAD_DATA_FORMAT = 8
HEADER_NOT_ALLOWED = 9
SEPARATOR_NOT_ALLOWED = 10
HEADER_TOO_LONG = 11
UNKNOWN_DP_ERROR = 12
ACCESS_DENIED = 13
DP_OUT_OF_MEMORY = 14
DISK_FULL = 15
DP_TIMEOUT = 16
OTHERS = 17.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
DELETE IG_INFO INDEX 1.
READ TABLE IG_INFO INTO WA_INFO WITH KEY C01 = 'PERNR'.
L_IDX = SY-TABIX.
IF SY-SUBRC = 0.
DO P_COL TIMES.
L_LOC = L_LOC + 1.
L_C = L_LOC .
CONCATENATE 'WA_INFO-C' L_C INTO L_NAME.
ASSIGN (L_NAME) TO <FS_C>.
IF <FS_C> <> ''.
S_FIELDNAME-SIGN = 'I'.
S_FIELDNAME-OPTION = 'EQ'.
S_FIELDNAME-LOW = <FS_C> .
APPEND S_FIELDNAME.
ELSE.
P_COL = L_LOC - 1.
EXIT.
ENDIF.
ENDDO.
DELETE IG_INFO INDEX L_IDX.
ELSE.
* MESSAGE S002(ZHR001) WITH 'PERNR'.
STOP.
ENDIF.
* Get the structure of the table. first infotype
REF_TABLE_DES ?=
CL_ABAP_TYPEDESCR=>DESCRIBE_BY_NAME( G_TABLENAME ).
IDETAILS[] = REF_TABLE_DES->COMPONENTS[].
****check sec infotype
PERFORM FRM_GET_SEC_INFOTYPE USING P_VIEKN P_INTYPE
CHANGING G_SEC_INTYPE
G_SECONDARY_DBNAME.
IF G_SECONDARY_DBNAME IS NOT INITIAL.
CALL FUNCTION 'NAMETAB_GET'
EXPORTING
ONLY = 'T'
TABNAME = G_SECONDARY_DBNAME
TABLES
NAMETAB = NAMETAB.
CREATE DATA DY_TABLE_SEC TYPE STANDARD TABLE OF (G_SECONDARY_DBNAME). "TYPE TABLE OF TYP_FORMULA .
ASSIGN DY_TABLE_SEC->* TO <DYN_TABLE_SEC>.
CREATE DATA DY_LINE_SEC LIKE LINE OF <DYN_TABLE_SEC>.
ASSIGN DY_LINE_SEC->* TO <DYN_WA_SEC>.
ENDIF.
**********end check sec infotype.
***check upload field name is correct. and build ALV fieldcat
LOOP AT S_FIELDNAME.
READ TABLE IDETAILS INTO XDETAILS WITH KEY NAME = S_FIELDNAME-LOW.
IF SY-SUBRC = 0.
CLEAR XFC.
XFC-FIELDNAME = XDETAILS-NAME .
XFC-DATATYPE = XDETAILS-TYPE_KIND.
XFC-INTTYPE = XDETAILS-TYPE_KIND.
* IF XFC-INTTYPE+0(1) NE 'C'.
SELECT SINGLE LENG INTO XFC-INTLEN FROM DD03L
WHERE TABNAME = G_TABLENAME
AND FIELDNAME = XDETAILS-NAME.
* ELSE.
* SELECT SINGLE INTLEN INTO XFC-INTLEN FROM DD03L
* WHERE TABNAME = G_TABLENAME
* AND FIELDNAME = XDETAILS-NAME.
* ENDIF.
* if xdetails-name = 'PERNR'.
* xfc-intlen = '8'.
* ELSE.
* xfc-intlen = xdetails-length.
* ENDIF.
XFC-DECIMALS = XDETAILS-DECIMALS.
APPEND XFC TO IFC.
ELSE.
READ TABLE NAMETAB INTO WA_NAMETAB WITH KEY FIELDNAME = S_FIELDNAME-LOW.
IF SY-SUBRC NE 0.
* MESSAGE S001(ZHR001) WITH S_FIELDNAME-LOW G_TABLENAME .
STOP.
ELSE.
CLEAR XFC.
XFC-FIELDNAME = WA_NAMETAB-FIELDNAME.
XFC-DATATYPE = WA_NAMETAB-INTTYPE.
XFC-INTTYPE = WA_NAMETAB-INTTYPE.
* IF XFC-INTTYPE+0(1) NE 'C'.
SELECT SINGLE LENG INTO XFC-INTLEN FROM DD03L
WHERE TABNAME = G_SECONDARY_DBNAME
AND FIELDNAME = WA_NAMETAB-FIELDNAME.
* ELSE.
* SELECT SINGLE INTLEN INTO XFC-INTLEN FROM DD03L
* WHERE TABNAME = G_SECONDARY_DBNAME
* AND FIELDNAME = WA_NAMETAB-FIELDNAME.
* ENDIF.
XFC-DECIMALS = WA_NAMETAB-DECIMALS.
APPEND XFC TO IFC.
ENDIF.
ENDIF.
ENDLOOP.
***** end check file field name.
** Create dynamic internal table and assign to FS , create dyn internal from ALV fieldcat is like upload field name
CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
EXPORTING
IT_FIELDCATALOG = IFC
IMPORTING
EP_TABLE = DY_TABLE.
ASSIGN DY_TABLE->* TO <DYN_TABLE>.
* Create dynamic work area and assign to FS
CREATE DATA DY_LINE LIKE LINE OF <DYN_TABLE>.
ASSIGN DY_LINE->* TO <DYN_WA>.
****************end create intertable from ALV FIELDCAT
* Create dynamic infotype table. create first infotype table
CREATE DATA DY_TABLE1 TYPE STANDARD TABLE OF (G_TABLENAME). "TYPE TABLE OF TYP_FORMULA .
* ASSIGN DY_TABLE_SEC->* TO <DYN_TABLE_SEC>.
* LOOP AT IDETAILS INTO XDETAILS.
* CLEAR XFC1.
* XFC1-FIELDNAME = XDETAILS-NAME .
* XFC1-DATATYPE = XDETAILS-TYPE_KIND.
* XFC1-INTTYPE = XDETAILS-TYPE_KIND.
* SELECT SINGLE LENG INTO XFC1-INTLEN FROM DD03L
* WHERE TABNAME = G_TABLENAME
* AND FIELDNAME = XDETAILS-NAME.
* XFC1-DECIMALS = XDETAILS-DECIMALS.
* COLLECT XFC1 INTO IFC1.
** APPEND XFC1 TO IFC1.
* ENDLOOP.
*
* CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
* EXPORTING
* IT_FIELDCATALOG = IFC1
* IMPORTING
* EP_TABLE = DY_TABLE1.
ASSIGN DY_TABLE1->* TO <DYN_TABLE1>.
* Create dynamic work area and assign to FS
CREATE DATA DY_LINE1 LIKE LINE OF <DYN_TABLE1>.
ASSIGN DY_LINE1->* TO <DYN_WA1>.
************end create first infotype
**mapping upload record to DYN intertable
LOOP AT IG_INFO INTO WA_INFO WHERE C01 NE ''.
CLEAR: <DYN_WA>,L_LOC,L_C.
DO P_COL TIMES.
L_LOC = L_LOC + 1.
L_C = L_LOC .
CONCATENATE 'WA_INFO-C' L_C INTO L_NAME.
ASSIGN (L_NAME) TO <FS_C>.
READ TABLE S_FIELDNAME INDEX L_LOC.
IF S_FIELDNAME-LOW = 'PERNR'.
IG_PERNR-PERNR = <FS_C>. "pernr number.
COLLECT IG_PERNR.
ENDIF.
ASSIGN COMPONENT S_FIELDNAME-LOW
OF STRUCTURE <DYN_WA> TO <FS_VALUE>.
IF SY-SUBRC = 0.
<FS_VALUE> = <FS_C>.
ENDIF.
ENDDO.
APPEND <DYN_WA> TO <DYN_TABLE>.
ENDLOOP.
ENDFORM. "frm_upload_file
*&---------------------------------------------------------------------*
*& Form FRM_PROCESS_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_PROCESS_DATA .
SORT IG_INFO BY C01.
* loop at ig_info.
* ig_pernr-pernr = ig_info-c01. "pernr number.
* collect ig_pernr.
* endloop.
IF IG_PERNR[] IS NOT INITIAL.
PERFORM FRM_UPDATE_INFO.
ENDIF.
ENDFORM. " FRM_PROCESS_DATA
*&---------------------------------------------------------------------*
*& Form FRM_UPDATE_INFO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_UPDATE_INFO .
DATA: MSG(40).
LOOP AT IG_PERNR INTO WA_PE.
CLEAR: MSG.
PERFORM FRM_LOCK_PERNR USING WA_PE-PERNR
CHANGING MSG.
IF MSG IS NOT INITIAL.
CONTINUE.
ENDIF.
PERFORM FRM_RECORD_UPDATE USING WA_PE-PERNR.
PERFORM FRM_UNLOCK_PERNR USING WA_PE-PERNR.
ENDLOOP.
ENDFORM. " FRM_UPDATE_INFO
*&---------------------------------------------------------------------*
*& Form FRM_LOCK_PERNR
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_WA_PE_PERNR text
*----------------------------------------------------------------------*
FORM FRM_LOCK_PERNR USING P_PERNR
CHANGING P_MSG.
DATA: RETURN LIKE BAPIRETURN1.
DATA: L_PERNR LIKE P0001-PERNR.
DATA: L_SUBRC LIKE SY-SUBRC.
CLEAR: P0001[],P0001.
L_PERNR = P_PERNR .
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
TCLAS = 'A'
PERNR = L_PERNR
INFTY = '0001'
BEGDA = SY-DATUM
ENDDA = SY-DATUM
* BYPASS_BUFFER = ' '
* LEGACY_MODE = ' '
IMPORTING
SUBRC = L_SUBRC
TABLES
INFTY_TAB = P0001
EXCEPTIONS
INFTY_NOT_FOUND = 1
OTHERS = 2.
IF L_SUBRC <> 0.
WA_MSG-PERNR = P_PERNR.
* wa_msg-NAME = .
WA_MSG-MSG = 'EE number is error'.
APPEND WA_MSG TO IG_MSG.
P_MSG = 'error'.
EXIT.
ENDIF.
*锁定用户记录
DO 1000 TIMES.
CALL FUNCTION 'HR_EMPLOYEE_ENQUEUE'
EXPORTING
NUMBER = L_PERNR
IMPORTING
RETURN = RETURN.
IF RETURN-NUMBER IS NOT INITIAL.
IF SY-INDEX = 1000.
WA_MSG-PERNR = P_PERNR.
WA_MSG-MSG = RETURN-MESSAGE.
APPEND WA_MSG TO IG_MSG.
P_MSG = 'error'.
ENDIF.
ELSE.
EXIT.
ENDIF.
ENDDO.
ENDFORM. " FRM_LOCK_PERNR
*&---------------------------------------------------------------------*
*& Form FRM_RECORD_UPDATE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_WA_PE_PERNR text
*----------------------------------------------------------------------*
FORM FRM_RECORD_UPDATE USING P_PERNR.
DATA: RETURN LIKE BAPIRETURN1,
PERSONALDATAKEY LIKE BAPIPAKEY.
FIELD-SYMBOLS: <L_FS1> TYPE ANY,
<L_FS2> TYPE ANY,
<L_FS3> TYPE ANY.
DATA: L_NUMBER TYPE PERNR_D, L_NUMBER1 TYPE PERNR_D,L_IDX LIKE SY-TABIX,
L_BEGDA LIKE P0001-BEGDA,
L_ENDDA LIKE P0001-ENDDA,
L_SUBTYPE LIKE P0001-SUBTY.
L_NUMBER = P_PERNR.
CLEAR:<DYN_TABLE1>,<DYN_TABLE1>[],L_SUBTYPE.
IF G_SECONDARY_DBNAME IS NOT INITIAL.
CLEAR: <DYN_TABLE_SEC>,
<DYN_TABLE_SEC>[],<DYN_WA_SEC>.
ENDIF.
ASSIGN DY_LINE1->* TO <DYN_WA1>.
LOOP AT <DYN_TABLE> ASSIGNING <DYN_WA> .
L_IDX = SY-TABIX.
ASSIGN COMPONENT 'PERNR'
OF STRUCTURE <DYN_WA> TO <L_FS1>.
L_NUMBER1 = <L_FS1> .
IF L_NUMBER1 = L_NUMBER.
* LOOP AT S_FIELDNAME. "DYN intertable
* ASSIGN COMPONENT S_FIELDNAME-LOW
* OF STRUCTURE <DYN_WA> TO <L_FS1>.
*
* ASSIGN COMPONENT S_FIELDNAME-LOW "first infotype table
* OF STRUCTURE <DYN_WA1> TO <L_FS2>.
* IF SY-SUBRC = 0.
* <L_FS2> = <L_FS1>.
* else.
*
* ENDIF.
*
* ENDLOOP.
MOVE-CORRESPONDING <DYN_WA> TO <DYN_WA1>.
APPEND <DYN_WA1> TO <DYN_TABLE1>.
IF G_SECONDARY_DBNAME IS NOT INITIAL.
MOVE-CORRESPONDING <DYN_WA> TO <DYN_WA_SEC> .
APPEND <DYN_WA_SEC> TO <DYN_TABLE_SEC>.
ENDIF.
DELETE <DYN_TABLE> INDEX L_IDX.
ENDIF.
ENDLOOP.
LOOP AT <DYN_TABLE1> ASSIGNING <DYN_WA1>.
ASSIGN COMPONENT 'BEGDA'
OF STRUCTURE <DYN_WA1> TO <L_FS3>.
L_BEGDA = <L_FS3>.
ASSIGN COMPONENT 'ENDDA'
OF STRUCTURE <DYN_WA1> TO <L_FS3>.
L_ENDDA = <L_FS3>.
IF G_TABLENAME = 'P0185'.
ASSIGN COMPONENT 'ICTYP'
OF STRUCTURE <DYN_WA1> TO <L_FS3>.
L_SUBTYPE = <L_FS3>.
ENDIF.
IF G_TABLENAME = 'P2006'.
ASSIGN COMPONENT 'KTART'
OF STRUCTURE <DYN_WA1> TO <L_FS3>.
L_SUBTYPE = <L_FS3>.
ENDIF.
IF <DYN_TABLE_SEC> IS ASSIGNED.
LOOP AT <DYN_TABLE_SEC> INTO <DYN_WA_SEC> .
ASSIGN COMPONENT 'BEGDA'
OF STRUCTURE <DYN_WA1> TO <L_FS3>.
IF <L_FS3> EQ L_BEGDA. "GET SAME begda record.
EXIT.
ENDIF.
ENDLOOP.
ENDIF.
CLEAR: RETURN, PERSONALDATAKEY.
IF G_SECONDARY_DBNAME IS NOT INITIAL.
CALL FUNCTION 'HR_INFOTYPE_OPERATION'
EXPORTING
INFTY = P_INTYPE
NUMBER = L_NUMBER
* SUBTYPE = P9007-AWART
SUBTYPE = L_SUBTYPE
VALIDITYEND = L_BEGDA
VALIDITYBEGIN = L_ENDDA
RECORD = <DYN_WA1>
OPERATION = 'INS'
NOCOMMIT = ''
TCLAS = 'A'
VIEW_IDENTIFIER = P_VIEKN
SECONDARY_RECORD = <DYN_WA_SEC>
* DIALOG_MODE = '2'<
IMPORTING
RETURN = RETURN
KEY = PERSONALDATAKEY
EXCEPTIONS
OTHERS = 0.
ELSE.
CALL FUNCTION 'HR_INFOTYPE_OPERATION'
EXPORTING
INFTY = P_INTYPE
NUMBER = L_NUMBER
* SUBTYPE = P9007-AWART
SUBTYPE = L_SUBTYPE
VALIDITYEND = L_BEGDA
VALIDITYBEGIN = L_ENDDA
RECORD = <DYN_WA1>
OPERATION = 'INS'
NOCOMMIT = ''
TCLAS = 'A'
* VIEW_IDENTIFIER = P_VIEKN
* SECONDARY_RECORD = <DYN_WA_SEC>
* DIALOG_MODE = '2'
IMPORTING
RETURN = RETURN
KEY = PERSONALDATAKEY
EXCEPTIONS
OTHERS = 0.
ENDIF.
*提交或回滚事务
IF RETURN-NUMBER IS INITIAL.
COMMIT WORK AND WAIT. "提交事务
WA_MSG-PERNR = L_NUMBER .
* REC_MESSAGE-ENAME = P_L_REC_OFC-ENAME.
WA_MSG-MSG = 'Updated complete'.
COLLECT WA_MSG INTO IG_MSG.
ELSE.
WA_MSG-PERNR = L_NUMBER.
* wa_msg-ENAME = P_L_REC_OFC-ENAME.
WA_MSG-MSG = RETURN-MESSAGE.
COLLECT WA_MSG INTO IG_MSG.
ROLLBACK WORK. "回滚事务
ENDIF.
ENDLOOP.
ENDFORM. " FRM_RECORD_UPDATE
*&---------------------------------------------------------------------*
*& Form FRM_FIELDCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_FIELDCAT .
* 定义宏
DEFINE LW_FIELDCAT.
* tab_fieldcat-ref_tabname = 'TAB_OUTPUT'.
TAB_FIELDCAT-FIELDNAME = &1.
TAB_FIELDCAT-SELTEXT_L = &2.
TAB_FIELDCAT-OUTPUTLEN = &3.
TAB_FIELDCAT-DO_SUM = &4.
TAB_FIELDCAT-DATATYPE = &5.
TAB_FIELDCAT-KEY = &6.
TAB_FIELDCAT-NO_OUT = &7.
APPEND TAB_FIELDCAT.
CLEAR TAB_FIELDCAT.
END-OF-DEFINITION. "lw_fieldcat
* 设定表格字段
LW_FIELDCAT 'PERNR' 'EE Number' '8' '' '' 'X' ''.
LW_FIELDCAT 'MSG' 'Error message' '8' '' '' '' ''.
ENDFORM. " FRM_FIELDCAT
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_DISPLAY .
DATA: L_LINE TYPE SLIS_LISTHEADER.
DATA HINFO TYPE SLIS_T_LISTHEADER.
DATA FIELDCAT TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE.
DATA LAYOUT TYPE SLIS_LAYOUT_ALV .
DATA SORTABLE TYPE SLIS_T_SORTINFO_ALV WITH HEADER LINE.
DATA: WL_LVC_S_GLAYA TYPE LVC_S_GLAY.
DATA: IL_EVENTSA TYPE SLIS_T_EVENT.
LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
*---------------Begin of SortTable info
* CLEAR sortable.
* sortable-fieldname = 'STR_DW'.
* sortable-up = 'X'.
* sortable-down = space.
* sortable-subtot = 'X'.
* APPEND sortable.
* PERFORM frm_make_alv_eventsa CHANGING il_eventsa.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_INTERFACE_CHECK = ''
I_CALLBACK_PROGRAM = SY-REPID
IS_LAYOUT = LAYOUT
* i_callback_pf_status_set = 'SET_PF_STATUS'
* i_callback_user_command = cb_usercommand
IT_FIELDCAT = TAB_FIELDCAT[]
*--------这里是动态嵌入的代码,用于ALV控制头部和尾部数据
* i_callback_html_top_of_page = 'ALV_TOP_OF_PAGE'
* it_sort = sortable[]
* i_grid_settings = wl_lvc_s_glaya
* it_events = il_eventsa[]
*---------------动态代码结束
TABLES
T_OUTTAB = IG_MSG
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
ENDFORM. " FRM_DISPLAY
*&---------------------------------------------------------------------*
*& Form FRM_UNLOCK_PERNR
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_WA_PE_PERNR text
*----------------------------------------------------------------------*
FORM FRM_UNLOCK_PERNR USING P_PERNR.
* HR_EMPLOYEE_DEQUEUE
DATA: L_NUM LIKE BAPIP0001-PERNR.
L_NUM = P_PERNR.
CALL FUNCTION 'HR_EMPLOYEE_DEQUEUE'
EXPORTING
NUMBER = L_NUM
* IMPORTING
* RETURN =
.
ENDFORM. " FRM_UNLOCK_PERNR
*&---------------------------------------------------------------------*
*& Form FRM_GET_SEC_INFOTYPE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_0520 text
* -->P_P_INTYPE text
* <--P_G_SEC_INTYPE text
*----------------------------------------------------------------------*
FORM FRM_GET_SEC_INFOTYPE USING VALUE(VIEW_IDENTIFIER)
INFTY
CHANGING SECONDARY_INFTY
SECONDARY_DBNAME.
DATA: BEGIN OF I582V OCCURS 0,
MOLGA LIKE T582V-MOLGA,
INFTY LIKE T582V-INFTY,
VINFT LIKE T582V-VINFT,
END OF I582V.
DATA: I582W LIKE T582W OCCURS 0 WITH HEADER LINE.
DATA: BEGIN OF I777D OCCURS 10,
INFTY LIKE T777D-INFTY,
PPNNN LIKE T777D-DBTAB,
DBTAB LIKE T777D-DBTAB,
APTAB LIKE T777D-DBTAB,
END OF I777D.
DESCRIBE TABLE I777D LINES SY-TABIX.
IF SY-TABIX EQ 0.
SELECT INFTY PPNNN DBTAB APTAB FROM T777D INTO TABLE I777D.
SORT I777D.
ENDIF.
*--- T582v ---------------------------------------------------------
DESCRIBE TABLE I582V LINES SY-TABIX.
IF SY-TABIX EQ 0.
SELECT MOLGA INFTY VINFT FROM T582V INTO TABLE I582V.
SORT I582V.
ENDIF.
*--- T582w ---------------------------------------------------------
DESCRIBE TABLE I582W LINES SY-TABIX.
IF SY-TABIX EQ 0.
SELECT * FROM T582W INTO TABLE I582W.
SORT I582W.
ENDIF.
READ TABLE I582V WITH KEY MOLGA = VIEW_IDENTIFIER INFTY = INFTY
BINARY SEARCH.
IF SY-SUBRC = 0.
READ TABLE I582W WITH KEY VINFT = I582V-VINFT
SEQNR = '1'
INFTY = INFTY
BINARY SEARCH.
IF SY-SUBRC = 0.
READ TABLE I582W WITH KEY VINFT = I582V-VINFT
SEQNR = '2'
BINARY SEARCH.
IF SY-SUBRC = 0.
MOVE I582W-INFTY TO SECONDARY_INFTY.
ENDIF.
ENDIF.
ENDIF.
IF NOT SECONDARY_INFTY IS INITIAL.
READ TABLE I777D WITH KEY INFTY = SECONDARY_INFTY
BINARY SEARCH.
SECONDARY_DBNAME = I777D-PPNNN.
ENDIF.
ENDFORM. " FRM_GET_SEC_INFOTYPE