SAPABAPHR批量上传删除文件图片PDFWORD等.docx
《SAPABAPHR批量上传删除文件图片PDFWORD等.docx》由会员分享,可在线阅读,更多相关《SAPABAPHR批量上传删除文件图片PDFWORD等.docx(13页珍藏版)》请在冰豆网上搜索。
![SAPABAPHR批量上传删除文件图片PDFWORD等.docx](https://file1.bdocx.com/fileroot1/2023-2/1/6a45463c-9645-4b56-85a9-691b02d98f25/6a45463c-9645-4b56-85a9-691b02d98f251.gif)
SAPABAPHR批量上传删除文件图片PDFWORD等
通过一个文件夹批量上传文件,图片,PDF,WORd等,当同一个文件名的文档类型及业务对象相同时,删除旧文件。
上传的文件名为8位,文件名=员工号
输入屏幕
输出屏幕
*&---------------------------------------------------------------------*
*& Report ZRPT_HR_PA001 *
*& *
*&---------------------------------------------------------------------*
*& Program ID :
*
*& Program Name :
<批量上传人员的电子文档> *
*&---------------------------------------------------------------------*
REPORT ZRPT_HR_PA001 .
INCLUDE ZRPT_HR_PA001_TOP.
*---------------------------------------------------------------------*
* AT SELECTION-SCREEN
*---------------------------------------------------------------------*
AT SELECTION-SCREEN.
*屏幕输入正确性判断
PERFORM PER_CHECK_SCREEN.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_WQJ."上传路径
*取出上传路径
PERFORM PER_GET_P_WQJ.
*---------------------------------------------------------------------*
* START-OF-SELECTION
*---------------------------------------------------------------------*
START-OF-SELECTION.
*取出所选文件夹数据
PERFORM PER_GET_WQJ.
*上传文件
PERFORM PER_UPLOAD_DATA.
*ALV输出
PERFORM PER_ALV_OUT.
END-OF-SELECTION.
INCLUDE ZRPT_HR_PA001_FORM.
*&---------------------------------------------------------------------*
*& 包括 ZRPT_HR_PA001_TOP *
*&---------------------------------------------------------------------*
TABLES:
TOAOM,"业务对象
TOADV,"文档类型
PA0001,"员工主数据
TOAHR."文档类型
*类型池定义
TYPE-POOLS:
SLIS.
DATA:
G_PATH TYPE STRING,"
G_FILTER TYPE STRING,"文件类型
G_WQLX LIKE TOADD-DOC_TYPE,"文件类型
G_COUNT TYPE I,
G_FILENAME(40) TYPE C,
G_FILEEXT(10) TYPE C ,
G_LEN TYPE I,
G_SAPOBJID LIKE SAPB-SAPOBJID,"上传照片文件名
G_SAPPFAD LIKE SAPB-SAPPFAD,"上传路径
G_NUM(10) TYPE I,
G_FILE_NAME LIKE RLGRAP-FILENAME."SAP文件路径
*文件夹内容
DATA:
TAB_G_FILETAB TYPE TABLE OF FILE_INFO WITH HEADER LINE.
DATA:
TAB_G_TOAHR TYPE TOAHR .
*上传成功后得到的员工编号ID
DATA:
BEGIN OF TAB_G_TOAV0 OCCURS 1.
INCLUDE STRUCTURE TOAV0.
DATA:
END OF TAB_G_TOAV0.
*ALV输出
DATA:
BEGIN OF TAB_G_ALVOUT OCCURS 0.
INCLUDE STRUCTURE ZHR_LOG_PA001.
DATA:
END OF TAB_G_ALVOUT.
*ALV定义
DATA:
G_ALV_FIELD TYPE SLIS_FIELDCAT_ALV,
G_ALV_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
G_LAYOUT TYPE SLIS_LAYOUT_ALV.
*---------------------------------------------------------------------*
* SELECTION-SCREEN
*---------------------------------------------------------------------*
PARAMETERS:
P_YWDX LIKE TOAV0-AR_OBJECT DEFAULT 'PREL' OBLIGATORY,"业务对象
P_WDLX LIKE TOADV-AR_OBJECT OBLIGATORY,"文档类型
P_WQJ LIKE RLGRAP-FILENAME OBLIGATORY,"上传路径
P_ZHF AS CHECKBOX."可重复
*&---------------------------------------------------------------------*
*& 包括 ZRPT_HR_PA001_FORM *
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form PER_CHECK_SCREEN
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM PER_CHECK_SCREEN .
*业务对象判断正确性
CHECK P_YWDX IS NOT INITIAL.
SELECT SINGLE *
FROM TOAOM
WHERE SAP_OBJECT = P_YWDX.
IF SY-SUBRC <> 0.
MESSAGE '无此业务对象' TYPE 'E'.
EXIT.
ENDIF.
*文档类型判断正确性
CHECK P_WDLX IS NOT INITIAL.
CLEAR:
G_WQLX.
SELECT SINGLE DOC_TYPE
FROM TOADV
INTO G_WQLX
WHERE AR_OBJECT = P_WDLX.
IF SY-SUBRC <> 0.
MESSAGE '无此文档类型' TYPE 'E'.
EXIT.
ENDIF.
ENDFORM. " PER_CHECK_SCREEN
*&---------------------------------------------------------------------*
*& Form PER_GET_P_WQJ
*&---------------------------------------------------------------------*
* 读取文件夹
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM PER_GET_P_WQJ .
*读取文件夹
CALL METHOD CL_GUI_FRONTEND_SERVICES=>DIRECTORY_BROWSE
EXPORTING
WINDOW_TITLE = 'File Directory'
INITIAL_FOLDER = 'C:
\'
CHANGING
SELECTED_FOLDER = G_PATH.
CALL METHOD CL_GUI_CFW=>FLUSH.
CONCATENATE G_PATH '' INTO P_WQJ.
ENDFORM. " PER_GET_P_WQJ
*&---------------------------------------------------------------------*
*& Form PER_GET_WQJ
*&---------------------------------------------------------------------*
* 读取文件夹内容
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM PER_GET_WQJ .
*读取文件夹内容
CLEAR:
TAB_G_FILETAB,TAB_G_FILETAB[],G_FILTER.
*文件夹路径
G_PATH = P_WQJ .
* 读取文件类型
CONCATENATE '*.' G_WQLX INTO G_FILTER.
*取出文件夹数据
CALL METHOD CL_GUI_FRONTEND_SERVICES=>DIRECTORY_LIST_FILES
EXPORTING
DIRECTORY = G_PATH "文件夹路径
FILTER = G_FILTER "文件类型'*.jpg'
CHANGING
FILE_TABLE = TAB_G_FILETAB[] "输入文件
COUNT = G_COUNT
EXCEPTIONS
CNTL_ERROR = 1
DIRECTORY_LIST_FILES_FAILED = 2
WRONG_PARAMETER = 3
ERROR_NO_GUI = 4
NOT_SUPPORTED_BY_GUI = 5
OTHERS = 6.
*判断文件的长度
LOOP AT TAB_G_FILETAB.
SPLIT TAB_G_FILETAB-FILENAME AT '.' INTO G_FILENAME G_FILEEXT.
G_LEN = STRLEN( G_FILENAME ) .
IF G_LEN <> 8 .
MESSAGE E000(OO) WITH '文件名长度必须等于8位'.
ENDIF.
ENDLOOP.
ENDFORM. " PER_GET_WQJ
*&---------------------------------------------------------------------*
*& Form PER_UPLOAD_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM PER_UPLOAD_DATA .
CLEAR:
TAB_G_ALVOUT,TAB_G_ALVOUT[].
LOOP AT TAB_G_FILETAB.
*自动分配流水号
CALL FUNCTION 'QF05_RANDOM_INTEGER'
EXPORTING
RAN_INT_MAX = 99999999
RAN_INT_MIN = 1
IMPORTING
RAN_INT = G_NUM
EXCEPTIONS
INVALID_INPUT = 1
OTHERS = 2.
TAB_G_ALVOUT-ZHRSORT = G_NUM.
*判断是否有此员工号
SELECT SINGLE *
FROM PA0001
WHERE PERNR = TAB_G_FILETAB-FILENAME+0(8). "员工号
IF SY-SUBRC = 0.
*上传路径
CONCATENATE G_PATH '\' TAB_G_FILETAB-FILENAME INTO G_SAPPFAD.
*上传照片编号
CONCATENATE TAB_G_FILETAB-FILENAME+0(8) '0002' INTO G_SAPOBJID.
*判断是否可以重复上传
IF P_ZHF = ''.
*判断员工文档类型是否已存在
CLEAR:
TAB_G_TOAHR.
SELECT SINGLE *
FROM TOAHR
INTO TAB_G_TOAHR
WHERE OBJECT_ID = G_SAPOBJID "照片号
AND AR_OBJECT = P_WDLX "文档类型
AND SAP_OBJECT = P_YWDX. "业务对象
IF SY-SUBRC = 0.
TAB_G_ALVOUT-MANDT = SY-MANDT. "集团
TAB_G_ALVOUT-ZHRUNAME = SY-UNAME. "创建人
TAB_G_ALVOUT-ZHRDATUM = SY-DATUM. "创建日期
TAB_G_ALVOUT-ZHRUZEIT = SY-UZEIT. "创建日间
TAB_G_ALVOUT-PERNR = TAB_G_FILETAB-FILENAME+0(8). "员工号
TAB_G_ALVOUT-ZHRYWDX = P_YWDX. "文档对象
TAB_G_ALVOUT-ZHRWDLX = P_WDLX. "文档类型
TAB_G_ALVOUT-ZHRWQJ = G_SAPPFAD. "上传路径
TAB_G_ALVOUT-ZHRMSGTY = '已存在'.
APPEND TAB_G_ALVOUT.
CLEAR:
TAB_G_ALVOUT.
CONTINUE.
ENDIF.
ENDIF.
*上传照片
CLEAR:
TAB_G_TOAV0,TAB_G_TOAV0[].
CALL FUNCTION 'ZFUN_HR_ARCHIV_CREATE_FILE'
EXPORTING
AR_OBJECT = P_WDLX "文档类型
OBJECT_ID = G_SAPOBJID "照片
SAP_OBJECT = P_YWDX "业务对象
DOC_TYPE = G_WQLX "文件类型
PATH = G_SAPPFAD "上传路径
TABLES
TOAV0 = TAB_G_TOAV0 "输出ID
EXCEPTIONS
ERROR_CONECTIONTABLE = 1
ERROR_PARAMETER = 2
ERROR_ARCHIV = 3
ERROR_UPLOAD = 4
ERROR_KERNEL = 5
NO_ENTRY_POSSIBLE = 6
ERROR_COMUNICATIONTABLE = 7
OTHERS = 8.
IF SY-SUBRC <> 0.
*上传照片失败
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
MSGID = SY-MSGID
MSGNR = SY-MSGTY
MSGV1 = SY-MSGV1
MSGV2 = SY-MSGV2
MSGV3 = SY-MSGV3
MSGV4 = SY-MSGV4
IMPORTING
MESSAGE_TEXT_OUTPUT = TAB_G_ALVOUT-ZHRMSGTY.
TAB_G_ALVOUT-MANDT = SY-MANDT. "集团
TAB_G_ALVOUT-ZHRUNAME = SY-UNAME. "创建人
TAB_G_ALVOUT-ZHRDATUM = SY-DATUM. "创建日期
TAB_G_ALVOUT-ZHRUZEIT = SY-UZEIT. "创建日间
TAB_G_ALVOUT-PERNR = TAB_G_FILETAB-FILENAME+0(8). "员工号
TAB_G_ALVOUT-ZHRYWDX = P_YWDX. "业务对象
TAB_G_ALVOUT-ZHRWDLX = P_WDLX. "文档类型
TAB_G_ALVOUT-ZHRWQJ = G_SAPPFAD. "上传路径
TAB_G_ALVOUT-ZHRMESSAGE = 'E'.
CONCATENATE TAB_G_ALVOUT-ZHRMSGTY '存储上传失败' INTO TAB_G