今天有人说SCMS_DOC_READ_FILES下载下来居然是文件夹,我琢磨了很久,发现是由于传递的PATH参数长度有问题,因此根据路径的实际长度动态创建变量就完美解决了这个问题。我相信肯定还有更好的方式,我觉得这样解决太2B了。
REPORT Z_TEST.
DATA: COMPS2 TYPE STANDARD TABLE OF SCMS_DOINF WITH HEADER LINE,
COMP_NAMES TYPE STANDARD TABLE OF SCMS_DONAM WITH HEADER LINE.
DATA:BEGIN OF GT_PERNR OCCURS 0,
OBJECT_ID TYPE TOAHR-OBJECT_ID,
END OF GT_PERNR.
DATA:G_PERNR TYPE PA0001-PERNR.
DATA:G_PATH TYPE STRING.
DATA: LEN TYPE I.
DATA: DREF TYPE REF TO DATA,
CTYPE TYPE REF TO CL_ABAP_ELEMDESCR.
FIELD-SYMBOLS:<FS>.
SELECT OBJECT_ID FROM TOAHR INTO TABLE GT_PERNR WHERE SAP_OBJECT = 'PREL' AND AR_OBJECT = 'HRICOLFOTO'.
LOOP AT GT_PERNR.
CONDENSE GT_PERNR-OBJECT_ID.
G_PERNR = GT_PERNR-OBJECT_ID.
CONCATENATE 'D:\' G_PERNR '.JPG' INTO G_PATH.
**************************************************************************************************
"根据路径长度动态创建C类型,否则将会下载成文件夹
LEN = STRLEN( G_PATH ).
CTYPE = CL_ABAP_ELEMDESCR=>GET_C( LEN ).
CREATE DATA DREF TYPE HANDLE CTYPE.
ASSIGN DREF->* TO <FS>.
<FS> = G_PATH.
**************************************************************************************************
PERFORM PHOTO_DOWN
USING
G_PERNR
'A'
'18000101'
'99991231'
"'D:\000000052.JPG'.
<FS>.
ENDLOOP.
*&---------------------------------------------------------------------*
*& Form PHOTO_DOWN
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_PERNR text
* -->P_TCLAS text
* -->P_BEGDA text
* -->P_ENDDA text
* -->PATH text
*----------------------------------------------------------------------*
FORM PHOTO_DOWN USING P_PERNR LIKE PRELP-PERNR
P_TCLAS LIKE PSPAR-TCLAS
P_BEGDA LIKE PRELP-BEGDA
P_ENDDA LIKE PRELP-ENDDA
PATH TYPE C.
DATA: L_CONNECT_INFO LIKE TOAV0,
L_EXISTS(1) TYPE C.
CALL FUNCTION'HR_IMAGE_EXISTS'
EXPORTING
P_PERNR = P_PERNR
P_TCLAS = P_TCLAS
P_BEGDA = P_BEGDA
P_ENDDA = P_ENDDA
IMPORTING
P_EXISTS = L_EXISTS
P_CONNECT_INFO = L_CONNECT_INFO
EXCEPTIONS
OTHERS = 2.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4 .
EXIT.
ENDIF.
CALL FUNCTION'SCMS_DOC_READ_FILES'
EXPORTING
STOR_CAT = SPACE
CREP_ID = L_CONNECT_INFO-ARCHIV_ID
DOC_ID = L_CONNECT_INFO-ARC_DOC_ID
PATH = PATH
FRONTEND = 'X'
TABLES
COMPS = COMPS2
COMP_NAMES = COMP_NAMES
EXCEPTIONS
BAD_STORAGE_TYPE = 1
BAD_REQUEST = 2
UNAUTHORIZED = 3
NOT_FOUND = 4
CONFLICT = 5
INTERNAL_SERVER_ERROR = 6
ERROR_HTTP = 7
ERROR_SIGNATURE = 8
ERROR_CONFIG = 9
ERROR_HIERARCHY = 10
ERROR_DOWNLOAD = 11
ERROR_OPEN = 12
ERROR_PARAMETER = 13
ERROR = 14
OTHERS = 15.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4 .
ENDIF.
ENDFORM "PHOTO_DOWN
.
"photo_down
By 小熊东东