Part I.RFC
调用RFC把文件下载下来,然后EP远程调用把文件传递过去这种思想是不可取的,至于为什么我就不太清楚,知道的请告诉我,谢谢。
代码逻辑:
1、调用BAPI_DOCUMENT_GETDETAIL2,可以获得凭证文件的凭证编号和库存类型;
2、调用SCMS_DOC_READ,TABLES,通过输入凭证文件的凭证编号和库存类型,获取CONTENT_BIN,也就是该文件的二进制数据;
3、调用SCMS_BINARY_TO_XSTRING,我们需要的是十六进制的数据,所以需要转换一下格式;
4、最后利用外部系统的Java代码把二进制数据转换成输出输入流,调用相关的方法实现下载.
代码:
function zewm_rfc_dms_download2. *"---------------------------------------------------------------------- *"*"Local interface: *" IMPORTING *" VALUE(IP_DOCUMENTNUMBER) LIKE BAPI_DOC_AUX-DOCNUMBER OPTIONAL *" VALUE(IP_OPER) TYPE CHAR1 *" VALUE(IP_FILE_ID) TYPE SDOK_PHID OPTIONAL *" VALUE(IP_STORAGECATEGORY) TYPE CV_STORAGE_CAT OPTIONAL *" EXPORTING *" VALUE(EP_RETURN) TYPE BAPIRET2 *" VALUE(EP_FIELNAME) TYPE SDOK_FILNM *" VALUE(EP_CONTENT) TYPE XSTRING *" TABLES *" TB_REPORT STRUCTURE ZDMS_FILE_INFO2 *"---------------------------------------------------------------------- data: lt_documentfiles type table of bapi_doc_files2 with header line, lt_bapi_doc_structure type table of bapi_doc_structure with header line, ls_bapi_doc_files2 type bapi_doc_files2, l_filename type bapi_doc_aux-filename, l_rfilename type rlgrap-filename. data: lv_fullname type filep, lv_dokna type filep, lv_dokpa type filep. data: lv_docnumber type bapi_doc_aux-docnumber. data: rc type i, l_cfilename type string, l_result type abap_bool, l_directory type string. data: lt_ftable type standard table of file_info, ls_ftable type file_info, l_count type i, lv_i type i. *--------------------------------------------------------------------* data: lw_zdms_file_info type zdms_file_info2. data: lt_files2 type standard table of bapi_doc_files2, ls_files2 type bapi_doc_files2, ls_return type bapiret2, lt_bin type standard table of sdokcntbin, lt_inf type standard table of scms_acinf, ls_inf type scms_acinf. data: contentx type xstring. data: filename type sdok_filnm. data: docnum type vttk-add03. data: begin of lt_add03 occurs 0, add03 type vttk-add03, end of lt_add03. data:doctype type bapi_doc_aux-doctype value 'Z23', docpart type b