SAP HTTP接口获取文件应用
云盘附件获取 token获取 文档解析应用
电子附件地址存储表
tables:t001,ztfi1013_04.
data:gt_data type standard table of ztfi1013_05,
gt_tab type standard table of ztfi1013_04,
gt_log type standard table of ztfi1013_06,
wa_data type ztfi1013_05,
wa_tab type ztfi1013_04,
wa_log type ztfi1013_06.
data:gs_json type zsdoc003,
gs_docs type zsdoc001,
gt_docs type ztdoc010,
gv_guid(36).
form frm_get_data .
check s_datum[] is not initial.
if rb_1 is initial..
select * into corresponding fields of table gt_tab from ztfi1013_04
where bukrs in s_bukrs
and datum in s_datum
and zjxzt = ''.
else.
select * into corresponding fields of table gt_tab from ztfi1013_04
where bukrs in s_bukrs
and datum in s_datum.
endif.
endform.*&---------------------------------------------------------------------*
*& Form FRM_ANALYZE_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form frm_analyze_data .
data:lv_docid type string,
ls_json type zsdoc003,
ls_docs type zsdoc001,
lt_docs type ztdoc010,
lt_rows type standard table of string,
wa_rows type string,
content type string,
conv type ref to cl_abap_conv_in_ce,
count type i,
field01(50),
field02(50),
field03(50),
field04(50),
field05(50),
field06(50),
field07(50),
field08(50),
field09(50),
field10(50),
field11(50),
field12(50),
field13(50),
field14(50),
field15(50),
field16(50),
field17(50),
field18(50).
loop at gt_tab into wa_tab.
ls_docs-docid = wa_tab-docid_txt.
lv_docid = wa_tab-docid_txt.
append ls_docs to lt_docs.
perform frm_get_guid changing gv_guid.
"获取file attr
zcl_wd_json=>get_files(
exporting
it_docs = lt_docs " 文档结构表类型
importing
ev_msg = data(lv_msg)
es_json = ls_json ).
"获取token
zcl_wd_json=>get_docid_token(
exporting
iv_docid = lv_docid "|14563|
receiving
ev_token = data(lv_token) ).
data(ls_rows) = ls_json-rows[ 1 ].
data(lv_url) = ls_rows-downloadurl && '&f_token=' && lv_token.
"getting doc for bin
zcl_wd_docx=>get(
exporting
* iv_type = 'X'
iv_url = lv_url
importing
ev_xstring = data(lv_xstring)
ev_msg = lv_msg ).
if lv_xstring is not initial.
conv = cl_abap_conv_in_ce=>create( input = lv_xstring ).
conv->read( importing data = content ).
split content at cl_abap_char_utilities=>cr_lf into table lt_rows .
loop at lt_rows into wa_rows .
split wa_rows at cl_abap_char_utilities=>horizontal_tab
into
field01
field02
field03
field04
field05
field06
field07
field08
field09
field10
field11
field12
field13
field14
field15
field16
field17
field18.
wa_data-posnm = field01.
wa_data-skjlid = field02.
wa_data-zskje = field03.
wa_data-jylnm = field04.
wa_data-zshbm = field05.
wa_data-shddh = field06.
wa_data-dzriq = field07.
wa_data-jyshj = field08.
wa_data-jyjin = field09.
wa_data-shoux = field10.
wa_data-zjies = field11.
wa_data-zpici = field12.
wa_data-belnr = field13.
wa_data-zcank = field14.
wa_data-zsdhh = field15.
wa_data-qdshh = field16.
wa_data-qdzdh = field17.
wa_data-possn = field18.
wa_data-bukrs = wa_tab-bukrs.
wa_data-cname = sy-uname.
wa_data-datum = sy-datum.
wa_data-uzeit = sy-uzeit.
call function 'CIF_GEN4_CONVERT_DATETIME'
exporting
iv_date = sy-datum
iv_time = sy-uzeit
iv_timezone = sy-zonlo
importing
ev_timestamp = wa_data-timestamp
exceptions
time_conversion_failed = 1
others = 2.
append wa_data to gt_data.
clear: wa_data.
endloop .
count = lines( gt_data ).
perform frm_add_successful_msg using gv_guid wa_tab-guiid count.
else.
perform frm_add_error_msg using gv_guid wa_tab-guiid lv_msg.
endif.
clear:lt_docs,ls_json,lv_docid,lv_url,lv_msg,lv_xstring,
field01,field02,field03,field04,field05,field06,
field07,field08,field09,field10,field11,field12,
field13,field14,field15,field16,field17,field18,
count.
endloop.
endform.
*&---------------------------------------------------------------------*
*& Form FRM_GET_GUIID
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_ENDIF text
*----------------------------------------------------------------------*
form frm_get_guid changing cv_guid.
call function 'RS_DME_MG_GENERATE_GUID'
importing
e_guid_32 = cv_guid.
endform.
通过HTTP接口获取云盘附件
METHOD get_files.
DATA : ls_c010 TYPE zsdoc001.
DATA : lv_docs TYPE string.
DATA : lr_client TYPE REF TO if_http_client,
lv_url TYPE string,
lv_content_type TYPE string VALUE 'application/x-www-form-urlencoded',
ev_xstring TYPE xstring,
ex_string TYPE string.
IF lines( it_docs ) = 0.
ev_msg = '文档ID不能为空!'.
RETURN .
ENDIF.
"文件ID集
LOOP AT it_docs INTO ls_c010.
lv_docs = lv_docs && ls_c010-docid && ','.
ENDLOOP.
"get url
lv_url = zcl_wd_json=>get_system_url(
iv_system = 'DMS'
iv_action = 'GET_FILES2' ).
IF lv_url IS INITIAL.
ev_msg = '未获取到URL!'.
RETURN .
ENDIF.
"get APIKEY
DATA(lv_apikey) = zcl_wd_json=>get_system_url(
iv_system = 'DMS'
iv_action = 'APIKEY' ).
lv_url = lv_url && |?fileId=| && lv_docs && |&{ lv_apikey }| .
TRY .
"创建http对象
cl_http_client=>create_by_url(
EXPORTING
url = lv_url
IMPORTING
client = lr_client
EXCEPTIONS
argument_not_found = 1
plugin_not_active = 2
internal_error = 3
OTHERS = 4 ).
* set protocol version
CALL METHOD lr_client->request->set_header_field
EXPORTING
name = '~server_protocol'
value = 'HTTP/1.1'.
* 提交方式
CALL METHOD lr_client->request->set_header_field
EXPORTING
name = '~request_method'
value = 'GET'.
* 传参方式: application/json,application/x-www-form-urlencoded
CALL METHOD lr_client->request->set_header_field
EXPORTING
name = 'Content-Type'
value = lv_content_type.
* 发送
CALL METHOD lr_client->send
EXPORTING
timeout = 200
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2
http_processing_failed = 3
OTHERS = 4.
IF sy-subrc NE 0.
lr_client->get_last_error(
IMPORTING
message = ev_msg
).
RETURN.
ENDIF.
* 获取返回
CALL METHOD lr_client->receive
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2
http_processing_failed = 3.
IF sy-subrc NE 0.
lr_client->get_last_error(
IMPORTING
message = ev_msg
).
RETURN.
ENDIF.
* 返回
ev_xstring = lr_client->response->get_data( ).
* XSTRING to STRING
CALL FUNCTION 'ECATT_CONV_XSTRING_TO_STRING'
EXPORTING
im_xstring = ev_xstring
im_encoding = 'UTF-8'
IMPORTING
ex_string = ex_string.
CALL TRANSFORMATION id
SOURCE XML ex_string
RESULT status = es_json-status
rows = es_json-rows
msg = es_json-msg.
CATCH cx_root .
ev_msg = '异常'.
ENDTRY.
lr_client->close( ).
ENDMETHOD.
获取token
METHOD get_docid_token.
DATA : lr_client TYPE REF TO if_http_client,
lv_url TYPE string,
lv_content_type TYPE string VALUE 'application/x-www-form-urlencoded',
ev_xstring TYPE xstring,
ex_string TYPE string.
DATA : ev_msg TYPE string.
"获取token地址
* lv_url = gv_get_token1 && gv_get_token2 && iv_docid.
IF iv_docid IS INITIAL.
ev_msg = '文档ID不能为空!'.
RETURN.
ENDIF.
"get url
lv_url = zcl_wd_json=>get_system_url(
iv_system = 'DMS'
iv_action = 'GET_TOKEN' ).
IF lv_url IS INITIAL.
ev_msg = '未获取到URL!'.
RETURN.
ENDIF.
DATA(lv_apikey) = zcl_wd_json=>get_system_url(
iv_system = 'DMS'
iv_action = 'APIKEY' ).
lv_url = lv_url && iv_docid && |&{ lv_apikey }|.
TRY .
"创建http对象
cl_http_client=>create_by_url(
EXPORTING
url = lv_url
IMPORTING
client = lr_client
EXCEPTIONS
argument_not_found = 1
plugin_not_active = 2
internal_error = 3
OTHERS = 4 ).
* set protocol version
CALL METHOD lr_client->request->set_header_field
EXPORTING
name = '~server_protocol'
value = 'HTTP/1.1'.
* 提交方式
CALL METHOD lr_client->request->set_header_field
EXPORTING
name = '~request_method'
value = 'GET'.
* 传参方式: application/json,application/x-www-form-urlencoded
CALL METHOD lr_client->request->set_header_field
EXPORTING
name = 'Content-Type'
value = lv_content_type.
* 发送
CALL METHOD lr_client->send
EXPORTING
timeout = 200
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2
http_processing_failed = 3
OTHERS = 4.
IF sy-subrc NE 0.
lr_client->get_last_error(
IMPORTING
message = ev_msg
).
RETURN.
ENDIF.
* 获取返回
CALL METHOD lr_client->receive
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2
http_processing_failed = 3.
IF sy-subrc NE 0.
lr_client->get_last_error(
IMPORTING
message = ev_msg
).
RETURN.
ENDIF.
* 返回
ev_xstring = lr_client->response->get_data( ).
* XSTRING to STRING
CALL FUNCTION 'ECATT_CONV_XSTRING_TO_STRING'
EXPORTING
im_xstring = ev_xstring
im_encoding = 'UTF-8'
IMPORTING
ex_string = ex_string.
CALL TRANSFORMATION id
SOURCE XML ex_string
RESULT token = ev_token.
CATCH cx_root .
ev_msg = '异常'.
ENDTRY.
lr_client->close( ).
ENDMETHOD.
getting doc for bin文档内容转换成BIN二进制
METHOD get.
DATA : lr_client TYPE REF TO if_http_client,
lv_url TYPE string,
lv_content_type TYPE string VALUE 'application/x-www-form-urlencoded',
ex_string TYPE string,
lv_ip TYPE string.
TRY .
IF iv_url IS INITIAL.
lv_url = 'http://xxx/api.action?acmod=downloadcommfile&id=445&revision=0&apikey=9b11127a9701975c734b8aee81ee3526&usid=fbd672e88c900f26a0221af266cd22ba-fe1b9a223ba095ff-attachment'.
ELSE.
IF iv_type EQ 'X'.
lv_url = iv_url.
ELSE.
lv_ip = get_ip( ).
lv_url = lv_ip && iv_url.
ENDIF.
ENDIF.
"创建http对象
cl_http_client=>create_by_url(
EXPORTING
url = lv_url
IMPORTING
client = lr_client
EXCEPTIONS
argument_not_found = 1
plugin_not_active = 2
internal_error = 3
OTHERS = 4 ).
* set protocol version
CALL METHOD lr_client->request->set_header_field
EXPORTING
name = '~server_protocol'
value = 'HTTP/1.1'.
* 提交方式
CALL METHOD lr_client->request->set_header_field
EXPORTING
name = '~request_method'
value = 'GET'.
* 传参方式: application/json,application/x-www-form-urlencoded
CALL METHOD lr_client->request->set_header_field
EXPORTING
name = 'Content-Type'
value = lv_content_type.
* CALL METHOD lr_client->request->set_header_field
* EXPORTING
* name = 'Charset'
* value = 'utf-16'.
* 发送
CALL METHOD lr_client->send
EXPORTING
timeout = 200
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2
http_processing_failed = 3
OTHERS = 4.
IF sy-subrc NE 0.
lr_client->get_last_error(
IMPORTING
message = ev_msg
).
RETURN.
ENDIF.
* 获取返回
CALL METHOD lr_client->receive
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2
http_processing_failed = 3.
IF sy-subrc NE 0.
lr_client->get_last_error(
IMPORTING
message = ev_msg
).
RETURN.
ENDIF.
ev_xstring = lr_client->response->get_data( ).
CATCH cx_abapcg_exception .
ev_msg = '异常'.
RETURN.
ENDTRY.
* 关闭链接ie
lr_client->close( ).
ENDMETHOD.