sap 服务器文件外部系统不可直接访问,通常通过数据流传输,受 sap 外部服务 pingpong 游戏启发,文件应该也可直接在html 格式拼写处理,从而实现直接预览,以下为实现代码:
1.sicf 创建服务服务
2.服务创建处理类
3.类代码编写
其中访问地址可拼接单号参数,通过参数获取对应单号文件上传附件路径,读取服务器文件,将文件转为64位数据流(正常接口传输pdf可转64位后直接传输,传输到其他系统java或其他可处理),然后在数据前后拼接html 处理代码格式,包括长宽调整,其中pdf处理 需 embed 处理或 iframe 处理也可 ,若是处理图片 img 即可 ,ps:img 处理不了 pdf,且测试代码 只适用谷歌, ie不行。
编写完成,即可访问测试服务
DATA: lt_fields TYPE tihttpnvp,
ls_fields LIKE LINE OF lt_fields,
str1 TYPE string,
lv_vbeln TYPE numc10.
DATA: lv_file TYPE string.
DATA: lv_msg TYPE string.
DATA: lv_xstr TYPE xstring.
DATA: lt_xtab TYPE STANDARD TABLE OF sdokcntbin.
" get HEADER fields
server->request->get_header_fields( CHANGING fields = lt_fields ).
READ TABLE lt_fields INTO ls_fields WITH KEY name = '~query_string'.
IF sy-subrc = 0.
SPLIT ls_fields-value AT '&' INTO str1 lv_vbeln .
IF lv_vbeln IS INITIAL.
RETURN.
ENDIF.
ELSE.
RETURN.
ENDIF.
SELECT SINGLE sfile INTO lv_file
FROM zsd1000t001
WHERE potyp = '2'
AND vbeln = lv_vbeln.
IF sy-subrc <> 0.
RETURN.
ENDIF.
lv_file = '/usr/sap/tmp/13.PDF'.
* lv_file = '/usr/sap/tmp/12.PFCG'.
OPEN DATASET lv_file FOR INPUT IN BINARY MODE MESSAGE lv_msg.
IF sy-subrc <> 0.
RETURN.
ENDIF.
FREE lt_xtab.
WHILE sy-subrc = 0.
READ DATASET lv_file INTO lv_xstr.
IF sy-subrc = 0.
cl_bcs_convert=>xstring_to_xtab(
EXPORTING
iv_xstring = lv_xstr
IMPORTING
et_xtab = lt_xtab ).
ENDIF.
ENDWHILE.
CLOSE DATASET lv_file.
CLEAR lv_xstr.
lv_xstr = cl_bcs_convert=>xtab_to_xstring( lt_xtab ).
DATA(lv_str) = cl_do_cr_cast=>xstring2base64( iv_xstring = lv_xstr ).
*pdf
lv_str = |<!DOCTYPE html><html><body><embed src="data:application/pdf;base64,{ lv_str }" width="100%" height="1000" ></body></html>|.
*jpg
* lv_str = |<!DOCTYPE html><html><body><img src="data:application/pdf;base64,{ lv_str }" ></body></html>|.
IF lv_str IS NOT INITIAL.
server->response->set_cdata( data = lv_str ).
ENDIF.