http://www.itpub.net/thread-1168695-1-1.html
how to download a service object attachment to app server?
I found some postings / blogs to download an attachment (service objects). This tells to download to local drive or to a mapped network drive . How do I download to an applications erver? Thanks,
销售订单会随销售单号上传一份合同,合同格式可以是doc、jpg、pdf等格式,现在我们要将这些销售订单中的合同让非SAP系统读取到,所以就产生一个这样的需求。
下面是我收集的一些信息:
1、CG3Z 可以将文件从本地上传到服务器目录
2、CG3Y 可以将服务器中文件下载到本地目录
3、AL11 可以查看服务器目录文件
4、下载到本地的函数为:SO_OBJECT_DOWNLOAD
不幸的是函数SO_OBJECT_DOWNLOAD不能将附件下载到服务器或FTP服务器,试图修改SO_OBJECT_DOWNLOAD函数中的用到的函数SCMS_R3_TO_CLIENT第105行,以CG3Z中用于上传至服务器函数C13Z_RAWDATA_WRITE 替换,虽然可以上传至SAP服务器,但由于二者采用的格式编码不同,从服务器再下载到本地时无法读取,所以宣告失败。(以word文档为例
fengleihen 实现附件方式保存到服务器上,ftp的话也应该可以实现
Z_FENGLEIHEN_TEST.
PARAMETERS: PA_ONAME TYPE SY-UNAME. "receiver
PARAMETERS: PA_SNAME TYPE SY-UNAME. "sender
PARAMETERS: PA_DATUM TYPE SY-DATUM. "sender date
PARAMETERS: PA_DESCR TYPE SO_OBJ_DES."description
PARAMETERS: PA_FNAME TYPE RLGRAP-FILENAME."file path
START-OF-SELECTION.
DATA: TAB LIKE TABLE OF SOLIX.
DATA: REC LIKE LINE OF TAB.
DATA: USR LIKE SOUDNAMEI1.
DATA: USR_DATA LIKE SOUDATAI1.
DATA: G_OBJ TYPE SOODK.
USR-SAPNAME = PA_ONAME.
* 读取用户inbox
CALL FUNCTION 'SO_USER_READ_API1'
EXPORTING
USER = USR
IMPORTING
USER_DATA = USR_DATA
EXCEPTIONS
USER_NOT_EXIST = 1
PARAMETER_ERROR = 2
X_ERROR = 3
OTHERS = 4.
IF SY-SUBRC <> 0.
ENDIF.
DATA: WA_CON LIKE SOFOLENTI1,
CONTENT LIKE TABLE OF SOFOLENTI1.
*读取文件
CALL FUNCTION 'SO_FOLDER_READ_API1'
EXPORTING
FOLDER_ID = USR_DATA-INBOXFOL
TABLES
FOLDER_CONTENT = CONTENT
EXCEPTIONS
FOLDER_NOT_EXIST = 1
OPERATION_NO_AUTHORIZATION = 2
X_ERROR = 3
OTHERS = 4
.
IF SY-SUBRC <> 0.
ENDIF.
READ TABLE CONTENT INTO WA_CON WITH KEY OBJ_DESCR = PA_DESCR
SEND_NAM = PA_SNAME
SEND_DATE = PA_DATUM.
G_OBJ-OBJTP = WA_CON-OBJECT_ID+0(3).
G_OBJ-OBJYR = WA_CON-OBJECT_ID+3(2).
G_OBJ-OBJNO = WA_CON-OBJECT_ID+5(12).
DATA: OBJ LIKE TABLE OF SOOD5,
WA_OBJ LIKE SOOD5.
* 附件id取得
CALL FUNCTION 'SO_ATTACHMENT_LIST_READ'
EXPORTING
OBJECT_ID = G_OBJ
TABLES
OBJECTS = OBJ
EXCEPTIONS
SYSTEM_FAILURE = 1
COMMUNICATION_FAILURE = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
ENDIF.
READ TABLE OBJ INTO WA_OBJ INDEX 1.
DATA: ATT LIKE SOATTLSTI1-ATTACH_ID.
DATA: LC_NAME(12) TYPE C.
LC_NAME = PA_ONAME.
CONCATENATE USR_DATA-INBOXFOL
WA_CON-OBJECT_ID
PA_ONAME
WA_OBJ-OBJTP
WA_OBJ-OBJYR
WA_OBJ-OBJNO
INTO ATT RESPECTING BLANKS.
* 读取附件
CALL FUNCTION 'SO_ATTACHMENT_READ_API1'
EXPORTING
ATTACHMENT_ID = ATT
TABLES
CONTENTS_HEX = TAB[]
EXCEPTIONS
ATTACHMENT_NOT_EXIST = 1
OPERATION_NO_AUTHORIZATION = 2
PARAMETER_ERROR = 3
X_ERROR = 4
ENQUEUE_ERROR = 5
OTHERS = 6
.
IF SY-SUBRC <> 0.
ENDIF.
CHECK TAB IS NOT INITIAL.
* 上传附件
* DATA: PA_FNAME TYPE RLGRAP-FILENAME.
*
* CONCATENATE '/usr/sap/' SY-SYSID '/SC_TEST.XLS' INTO PA_FNAME.
OPEN DATASET PA_FNAME FOR OUTPUT IN BINARY MODE .
LOOP AT TAB INTO REC.
TRANSFER REC-LINE TO PA_FNAME.
ENDLOOP.
CLOSE DATASET PA_FNAME.