SAP 附件增删改查与文件服务器交互应用

【需求背景】

非SAP标准附件应用,自定义一套,跟公司内部文档服务器交互,支持各个应用场景的附件增删改查等。

每个附件在文件服务器上都有一个文件唯一ID作为关键字。

应用分两块:SAP GUI端,跟WDA Portal端应用

GUI端效果如下:

1. 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.

获取文档内容转换成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.

获取文件信息(转成内表)

通过上传URL获取json数据并转换为内表

文件信息转换步骤: XSTRING to STRING, JSON转成内表

* XSTRING to STRING
CALL FUNCTION 'ECATT_CONV_XSTRING_TO_STRING'
EXPORTING
im_xstring = ev_xstring
im_encoding = 'UTF-8'
IMPORTING
ex_string = ex_string.
* "json to itab
CALL TRANSFORMATION id
SOURCE XML ex_string
RESULT status = es_json-status
msg = es_json-msg
rows = es_json-rows.

METHOD get_itab_for_json.

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 iv_guid IS INITIAL.

* lv_url = |http://10.0.2.31/ws/restful/SAPDocRestService/getSAPFormFile?guid=123\|.

* ELSE.

* lv_url = gv_url_getfiles && iv_guid .

* ENDIF.

IF iv_guid IS INITIAL.

ev_msg = 'GUID不能为空!'.

RETURN.

ENDIF.

"get url

lv_url = zcl_wd_json=>get_system_url(

iv_system = 'DMS'

iv_action = 'GET_FILES' ).

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 && iv_guid && |&{ 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.

* 填充参数

* CLEAR lv_len.

* lv_len = strlen( iv_json ).

* IF lv_len GT 0.

* CALL METHOD lr_client->request->set_cdata " Removed APPEND_CDATA

* EXPORTING

* data = iv_json

* offset = 0

* length = lv_len.

* ENDIF.

* 发送

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.

* 返回

* CLEAR: lv_xjson .

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.

* "json to itab

CALL TRANSFORMATION id

SOURCE XML ex_string

RESULT status = es_json-status

msg = es_json-msg

rows = es_json-rows.

CATCH cx_abapcg_exception .

ev_msg = '异常'.

ENDTRY.

* 关闭链接ie

lr_client->close( ).

ENDMETHOD.

2. 附件上传到文件服务器

自定义一个FUNCTION GROUP 实现附件上传到文件服务器

FUNCTION zfifm_0010.

*"----------------------------------------------------------------------

*"*"本地接口:

*" IMPORTING

*" REFERENCE(IV_GUID) TYPE GUID_32

*" VALUE(IV_PZFJ) TYPE BOOLEAN OPTIONAL

*" EXPORTING

*" REFERENCE(EV_DOCS) TYPE ZSDOC003

*"----------------------------------------------------------------------

gv_pzfj = iv_pzfj.

lcl_main=>start( iv_guid ).

ev_docs = lcl_main=>get_docs( ).

ENDFUNCTION.

LZFG_FI0012TOP

FUNCTION-POOL zfg_fi0012. "MESSAGE-ID ..

* INCLUDE LZFG_FI0012D... " Local class definition

*---------------------------------------------------------------------*

* CONSTANTS DATA *

*---------------------------------------------------------------------*

CONSTANTS:

c_html TYPE string VALUE 'https://10.0.2.31/common/vanke/erp/pd/attachment.htm',

c_open TYPE string VALUE 'http://10.0.2.31'.

*---------------------------------------------------------------------*

* VARIABLES AND INTERNAL TABLES DATA *

*---------------------------------------------------------------------*

DATA: ok_code TYPE syst-ucomm,

save_ok TYPE syst-ucomm.

DATA: lf_flag TYPE flag. " 为X,则上传;否则打开文档 --

DATA: lr_cont TYPE REF TO cl_gui_custom_container,

lr_html TYPE REF TO cl_gui_html_viewer,

lr_timer TYPE REF TO cl_gui_timer. "add yisz 2023/5/16

DATA: gv_surl TYPE c LENGTH 2048."ADD BY CBJ 20200819

DATA gv_pzfj TYPE boolean. "add yisz 2023/5/16

LZFG_FI0012M01 屏幕的PBO/PAI事件

*&---------------------------------------------------------------------*

*& 包含 LZFG_FI0012M01

*&---------------------------------------------------------------------*

*&---------------------------------------------------------------------*

*& Module STATUS_0100 OUTPUT

*&---------------------------------------------------------------------*

MODULE status_0100 OUTPUT.

DATA fcode TYPE TABLE OF sy-ucomm.

REFRESH fcode.

IF gv_pzfj = abap_true.

APPEND 'ZUP' TO fcode.

SET PF-STATUS '0100' EXCLUDING fcode.

ELSE.

SET PF-STATUS '0100'.

ENDIF.

SET TITLEBAR '0100'.

lcl_main=>exec_html( ).

ENDMODULE. " STATUS_0100 OUTPUT

*&---------------------------------------------------------------------*

*& Module EXIT_0100 INPUT

*&---------------------------------------------------------------------*

MODULE exit_0100 INPUT.

save_ok = ok_code. CLEAR: ok_code.

CASE save_ok.

WHEN 'ESC'.

SET SCREEN 0.

LEAVE SCREEN.

WHEN OTHERS.

ENDCASE.

ENDMODULE. " EXIT_0100 INPUT

*&---------------------------------------------------------------------*

*& Module USER_COMMAND_0100 INPUT TEXT: 响应键盘鼠标事件 --

*&---------------------------------------------------------------------*

MODULE user_command_0100 INPUT.

save_ok = ok_code. CLEAR: ok_code.

CASE save_ok.

WHEN 'S_OK'.

IF lf_flag IS NOT INITIAL. "如果是上传文件 --

lcl_main=>get_file( ).

ENDIF.

SET SCREEN 0. LEAVE SCREEN.

WHEN 'ZUP'.

CALL FUNCTION 'CALL_BROWSER'

EXPORTING

url = gv_surl

* WINDOW_NAME = ' '

* NEW_WINDOW = ' '

* BROWSER_TYPE =

* CONTEXTSTRING =

EXCEPTIONS

frontend_not_supported = 1

frontend_error = 2

prog_not_found = 3

no_batch = 4

unspecified_error = 5

OTHERS = 6.

IF sy-subrc <> 0.

* Implement suitable error handling here

ENDIF.

WHEN OTHERS.

ENDCASE.

ENDMODULE. " USER_COMMAND_0100 INPUT

LZFG_FI0012F01

*&---------------------------------------------------------------------*

*& 包含 LZFG_FI0012F01

*&---------------------------------------------------------------------*

*----------------------------------------------------------------------*

* CLASS lcl_main DEFINITION FINAL CREATE PRIVATE *

*----------------------------------------------------------------------*

CLASS lcl_main DEFINITION FINAL CREATE PRIVATE.

PUBLIC SECTION.

CLASS-METHODS: start IMPORTING iv_guid TYPE guid_32,

exec_html, get_file,

bowr_html IMPORTING iv_surl TYPE clike,

get_docs RETURNING VALUE(es_data) TYPE zsdoc003,

open_file IMPORTING iv_guid TYPE guid_32

iv_docid TYPE ze_docid,

open_url IMPORTING iv_docid TYPE ze_docid

iv_url_dwn TYPE ze_downloadurl1 .

PRIVATE SECTION.

CLASS-DATA: lv_guid TYPE string,

lv_surl TYPE c LENGTH 2048,

ls_json TYPE zsdoc003.

ENDCLASS. "lcl_main DEFINITION --

"DATA: evt_receiver TYPE REF TO lcl_main.

"html viewer事件

*CLASS c1_event DEFINITION.

* PUBLIC SECTION.

* CLASS-METHODS:m_sapevent FOR EVENT sapevent OF cl_gui_html_viewer

* IMPORTING action frame getdata postdata query_table.

*ENDCLASS.

*

*CLASS c1_event IMPLEMENTATION.

* METHOD m_sapevent.

* DATA:lv_str TYPE string.

* DATA:lt_postdata TYPE cnht_post_data_tab.

* DATA:ls_postdata LIKE LINE OF lt_postdata.

* DATA:lt_edquery TYPE cnht_query_table.

* DATA:ls_edquery LIKE LINE OF lt_edquery.

* lv_str = 'action:' && action

* && ';frame' && frame

* && ';getdata' && getdata.

* lt_postdata = postdata.

* lt_edquery = query_table.

* IF lt_postdata IS NOT INITIAL.

* READ TABLE lt_postdata INTO ls_postdata INDEX 1.

* ENDIF.

* lv_str = lv_str && ';' && ls_postdata.

* LOOP AT lt_edquery INTO ls_edquery.

* lv_str = lv_str && ';name='

* && ls_edquery-name

* && '-'

* && ls_edquery-value.

* ENDLOOP.

* MESSAGE lv_str TYPE 'I'.

* ENDMETHOD.

*ENDCLASS.

"add yisz 2023/5/16 end

*----------------------------------------------------------------------*

* CLASS lcl_main IMPLEMENTATION *

*----------------------------------------------------------------------*

CLASS lcl_main IMPLEMENTATION.

METHOD start. " 程序入口 --

lv_guid = iv_guid.

lf_flag = 'X'.

CALL SCREEN 0100 STARTING AT 5 5

ENDING AT 65 20.

ENDMETHOD. " start --

METHOD exec_html. " 执行附件上传的HTML --

**** modify by Nicolas 20170417 start*******************

DATA: lv_url TYPE string.

lv_url = zcl_wd_json=>get_system_url(

iv_system = 'DMS'

iv_action = 'UPLOAD' ).

**** modify by Nicolas 20170417 end*******************

IF lf_flag IS NOT INITIAL.

* lv_surl = c_html && '?guid=' && lv_guid.

lv_surl = lv_url && '?guid=' && lv_guid.

lv_surl = lv_surl && '&apikey=14c20740acb1bff7fc1784625a268a9b'.

lv_surl = lv_surl && '&usid=fbd672e88c900f26a0221af266cd22ba-79c0917cb7620f12-attachment'.

"add yisz 2023/5/16 begin

IF gv_pzfj = abap_true.

* lv_surl = lv_surl && |&fileTypes=| && 'pdf,PDF,MSG,msg,OFD,ofd,PNG,png,JPG,jpg,xls,XLS,xlsm,XLSM,xlsx,XLSX,eml,EML'.

lv_surl = lv_surl && |&fileTypes=| && 'pdf,PDF,OFD,ofd,PNG,png,JPG,jpg,xls,XLS,xlsm,XLSM,xlsx,XLSX'.

ENDIF.

"add yisz 2023/5/16 end

ENDIF.

CLEAR:gv_surl.

gv_surl = lv_surl."ADD BY CBJ 20200819

bowr_html( lv_surl ).

"add yisz 2023/5/16 begin

IF gv_pzfj = abap_true.

CALL FUNCTION 'CALL_BROWSER'

EXPORTING

url = gv_surl

EXCEPTIONS

frontend_not_supported = 1

frontend_error = 2

prog_not_found = 3

no_batch = 4

unspecified_error = 5

OTHERS = 6.

IF sy-subrc <> 0.

* Implement suitable error handling here

ENDIF.

ENDIF.

"add yisz 2023/5/16 end

ENDMETHOD. " exec_html --

METHOD bowr_html. " 浏览网页 --

DATA: lv_surl TYPE c LENGTH 2048.

IF lr_cont IS INITIAL.

CREATE OBJECT lr_cont

EXPORTING

container_name = 'HTML'

EXCEPTIONS

OTHERS = 1.

"create _html_viewer object

CREATE OBJECT lr_html

EXPORTING

parent = lr_cont.

* "add yisz 2023/5/16 begin

* IF gv_pzfj = abap_true.

* "设置event

* "ls_events-eventid = cl_gui_html_viewer=>m_id_navigate_complete.

* "APPEND ls_events TO lt_events.

*

* ls_events-eventid = lr_html->m_id_sapevent.

* ls_events-appl_event = 'X'.

* APPEND ls_events TO lt_events.

* lr_html->set_registered_events( events = lt_events ).

* SET HANDLER c1_event=>m_sapevent FOR lr_html.

*

** IF lr_timer IS INITIAL.

** CREATE OBJECT lr_timer

** EXCEPTIONS

** error = 1

** 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.

** ENDIF.

**

** lr_timer->interval = 300.

** CALL METHOD lr_timer->run

** EXCEPTIONS

** error = 1

** OTHERS = 2.

** ENDIF.

* ENDIF.

ENDIF.

"使用GUI显示html

lv_surl = iv_surl.

CALL METHOD lr_html->show_url

EXPORTING

url = lv_surl

EXCEPTIONS

cnht_error_parameter = 1

OTHERS = 2.

CALL METHOD lr_html->do_refresh.

IF lf_flag IS INITIAL.

SET SCREEN 0.

LEAVE SCREEN.

ENDIF.

ENDMETHOD. " bowr_html --

METHOD get_file. " 获取文件信息 --

DATA: lv_msgt TYPE string.

CLEAR ls_json.

zcl_wd_json=>get_itab_for_json(

EXPORTING iv_guid = lv_guid

IMPORTING ev_msg = lv_msgt es_json = ls_json ).

ENDMETHOD. " get_file --

METHOD get_docs. " 获取文件服务器的文档信息 --

es_data = ls_json.

CLEAR:ls_json.

ENDMETHOD. " get_docs --

METHOD open_file. " 打开文件 --

DATA: ls_docs TYPE zsdoc002,

lt_docs TYPE ztdoc002,

lv_docid TYPE string,

lv_token TYPE string.

lv_guid = iv_guid. lf_flag = space.

get_file( ).

CHECK ls_json-rows IS NOT INITIAL.

lt_docs = ls_json-rows.

"MOD BY CBJ 20190620

* READ TABLE LT_DOCS INTO LS_DOCS INDEX 1.

READ TABLE lt_docs INTO ls_docs WITH KEY id = iv_docid.

"END MOD

DATA: lv_url TYPE string.

lv_url = zcl_wd_json=>get_system_url(

iv_system = 'DMS'

iv_action = 'IP' ).

* lv_surl = c_open && ls_docs-downloadurl.

lv_surl = lv_url && ls_docs-downloadurl.

lv_docid = iv_docid.

lv_token = zcl_wd_json=>get_docid_token( iv_docid = lv_docid ).

lv_surl = lv_surl && '&f_token=' && lv_token.

CALL SCREEN 0100 STARTING AT 5 5

ENDING AT 65 20.

ENDMETHOD. " open_file --

METHOD open_url.

DATA: ls_docs TYPE zsdoc002,

lt_docs TYPE ztdoc002,

lv_docid TYPE string,

lv_token TYPE string. " 打开文件 --

lv_surl = iv_url_dwn.

lv_docid = iv_docid.

lv_token = zcl_wd_json=>get_docid_token( iv_docid = lv_docid ).

lv_surl = lv_surl && '&f_token=' && lv_token.

CALL SCREEN 0100 STARTING AT 5 5

ENDING AT 65 20.

ENDMETHOD. " open_file --

ENDCLASS. "lcl_main IMPLEMENTATION --

调用上传文件服务器

FORM frm_attach_add .

DATA:

lv_guid TYPE guid_32,

ls_d003 TYPE zsdoc003,

ls_alv2 LIKE gs_alv2,

ls_d002 TYPE zsdoc002,

lt_d002 TYPE ztdoc002,

lv_row TYPE i.

CLEAR: lv_row, lv_guid.

lv_guid = zcl_pubfm=>get_guid( ).

CALL FUNCTION 'ZFIFM_0010'

EXPORTING

iv_guid = lv_guid

IMPORTING

ev_docs = ls_d003.

CHECK ls_d003-rows IS NOT INITIAL.

lt_d002 = ls_d003-rows.

READ TABLE lt_d002 INTO ls_d002 INDEX 1.

* 更新 信息

go_grid2->get_current_cell( IMPORTING e_row = lv_row ).

READ TABLE gt_alv2 INTO ls_alv2 INDEX lv_row.

ls_alv2-iguid = lv_guid. " 文档主键GUID --

ls_alv2-docid = ls_d002-id. " JAVA文档ID流水号 --

ls_alv2-zfjmc = ls_d002-name. " 文档名称 --

ls_alv2-erdat = sy-datum. " 上传日期 --

MODIFY gt_alv2 FROM ls_alv2 INDEX lv_row.

CLEAR ls_d003. FREE lt_d002.

go_grid2->refresh_table_display( ).

ENDFORM.

3. 其他文档相关方法封装

3.1 删除文档

METHOD delete_files_for_json.

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.

"删除POST地址

* lv_url = gv_url_dele && lv_docs.

"get url

lv_url = zcl_wd_json=>get_system_url(

iv_system = 'DMS'

iv_action = 'DELETE' ).

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 && 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

msg = es_json-msg.

CATCH cx_root .

ev_msg = '异常'.

ENDTRY.

lr_client->close( ).

ENDMETHOD.

3.2 提交业务单据到文档系统

METHOD post_bill_to_doc.

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,

ev_string TYPE string,

ex_string TYPE string.

DATA lv_hash TYPE md5_fields-hash.

DATA lv_str TYPE string.

DATA lv_tstamp TYPE tzntstmps.

IF iv_json IS INITIAL AND iv_cate IS INITIAL.

ev_msg = 'JSON对象和类别不能为空!'.

RETURN.

ENDIF.

"get url

lv_url = zcl_wd_json=>get_system_url(

iv_system = 'DMS'

iv_action = 'POST' ).

IF lv_url IS INITIAL.

ev_msg = '未获取到URL'.

RETURN.

* lv_url = |http://10.0.2.31/ws/restful/SAPDocRestService/sapFormMetadataAdd\|.

ENDIF.

DATA(lv_apikey) = zcl_wd_json=>get_system_url(

iv_system = 'DMS'

iv_action = '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 = 'POST'.

* 传参方式: application/json,application/x-www-form-urlencoded

CALL METHOD lr_client->request->set_header_field

EXPORTING

name = 'Content-Type'

value = lv_content_type. "'multipart/form-data; boundary=----WebKitFormBoundaryIusB0IWHP4fpJXHA'.

* DATA(lv_json) = to_lower( iv_json ).

DATA(lv_json) = iv_json.

lr_client->request->set_form_field(

EXPORTING

name = 'metadata'

value = | { lv_json } | ).

lr_client->request->set_form_field(

EXPORTING

name = 'formtype'

value = iv_cate ).

lr_client->request->set_form_field(

EXPORTING

name = 'apikey'

value = lv_apikey ).

* 发送

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.

* 返回

* CLEAR: lv_xjson .

ev_xstring = lr_client->response->get_data( ).

IF ev_xstring IS INITIAL.

ev_msg = '读取流出错'.

ELSE.
* XSTRING to STRING
CALL FUNCTION 'ECATT_CONV_XSTRING_TO_STRING'
EXPORTING
im_xstring = ev_xstring
im_encoding = 'UTF-8'
IMPORTING
ex_string = ev_string.
** 必须转换
ex_string = to_upper( ev_string ).
* "json to itab
CALL TRANSFORMATION id
SOURCE XML ex_string
RESULT status = es_json-status
msg = es_json-msg.
ENDIF.

CATCH cx_abapcg_exception .

ev_msg = '异常'.

ENDTRY.

* 关闭链接ie

lr_client->close( ).

ENDMETHOD.

3.3 获取单据信息转换为json

业务单据信息拼接成JSON,KEY,VALUE键值对形式组装。

METHOD get_bill_to_json.

DATA : lt_doc004 TYPE ztdoc004,

ls_doc004 TYPE zsdoc004,

lv_status(4).

DATA : ls_0002 TYPE zspd0002,

lt_0002 TYPE TABLE OF zspd0002.

DATA : lv_json_body TYPE string.

CASE iv_cate.

"文档评审

WHEN '1'.

"上会资料

SELECT

ztpd0017~bukrs

ztpd0017~butxt

ztpd0017~xmbhc

ztpd0017~xmbhd

ztpd0017~fenqi

ztpd0017~fbukrs

ztpd0017~fbukrs_d

ztpd0017~fenqd

ztpd0020~docid

ztpd0017~sname

ztpd0020~rmark

ztpd0020~biaoq AS bqian

ztpd0017~pnode

ztpd0017~noded

ztpd0017~pdate

ztpd0017~billn AS pbill

ztpd0020~itemn

APPENDING CORRESPONDING FIELDS OF TABLE lt_doc004 FROM ztpd0017

INNER JOIN ztpd0020 ON ztpd0017~hguid = ztpd0020~hguid

WHERE ztpd0017~hguid = iv_guid.

ENDCASE.

"json拼凑

DATA(lv_begin) = |[|.

DATA(lv_end) = |]|.

LOOP AT lt_doc004 INTO ls_doc004 WHERE docid IS NOT INITIAL . "文档ID必须有值

lv_json_body = lv_json_body && ',{'

&& |"bukrs":"{ ls_doc004-bukrs }",|

&& |"butxt":"{ ls_doc004-butxt }",|

&& |"fbukrs":"{ ls_doc004-fbukrs }",|

&& |"bukrs_p":"{ ls_doc004-fbukrs_d }",|

&& |"xmbhc":"{ ls_doc004-xmbhc }",|

&& |"xmbhd":"{ ls_doc004-xmbhd }",|

&& |"fenqi":"{ ls_doc004-fenqi }",|

&& |"fenqd":"{ ls_doc004-fenqd }",|

&& |"docid":"{ ls_doc004-docid }",|

&& |"billn":"{ ls_doc004-billn }",|

&& |"lifnr":"{ ls_doc004-lifnr }",|

&& |"name1":"{ ls_doc004-name1 }",|

&& |"pnode":"{ ls_doc004-pnode }",|

&& |"noded":"{ ls_doc004-noded }",|

&& |"ndate":"{ ls_doc004-ndate }",|

&& |"bqian":"{ ls_doc004-bqian }",|

&& |"sname":"{ ls_doc004-sname }",|

&& |"rmark":"{ ls_doc004-rmark }",|

&& |"pbill":"{ ls_doc004-pbill }",|

&& |"qbill":"{ ls_doc004-qbill }",|

&& |"itemn":"{ ls_doc004-itemn }",|

&& |"status":"{ lv_status }",|

&& |"bcate":"{ ls_doc004-bcate }" | && '}'.

ENDLOOP.

"如果没有文档信息有返回

IF lv_json_body IS INITIAL.

CLEAR ev_json.

RETURN.

ENDIF.

"截取

DATA(lv_len) = strlen( lv_json_body ) - 1.

ev_json = lv_begin && lv_json_body+1(lv_len) && lv_end.

CLEAR : ls_0002,lt_0002.

ENDMETHOD.

3.4 文档移动到文件夹

METHOD FIELS_TO_FOLDER.

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 = 'FOLDER_M' ).

IF lv_url IS INITIAL.

ev_msg = '未获取到URL!'.

RETURN .

ENDIF.

lv_url = lv_url && |&fileId=| && lv_docs && |&archMode=1| && |&opuser=| && sy-uname && |&pathId=| && iv_folder .

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 = 'POST'.

* 传参方式: 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

msg = es_json-msg.

CATCH cx_root .

ev_msg = '异常'.

ENDTRY.

lr_client->close( ).

ENDMETHOD.

3.5 获取DMS目录

METHOD get_dms_catalog.

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.

"get url

lv_url = zcl_wd_json=>get_system_url(

iv_system = 'DMS'

iv_action = iv_cate ).

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 && |&{ 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.

4. Web Dynpro附件上传公共组件

ZWD_AB_0003 附件上传公共组件

ZWD_AB_C996 附件上传公共组件(全自动)

COMPONENTCONTROLLER定义 Events Interface: 在扩展应用程序再实例化

定时器事件

同样调用 zcl_wd_json封装的文档交互methods

METHOD onactionact_timer .

DATA : ls_upload TYPE wd_this->element_upload.

DATA : lv_msg TYPE string.

DATA : ls_json TYPE zsdoc003,

ls_fileinfo TYPE zsdoc002.

DATA : lv_date TYPE string,

lv_time TYPE string.

DATA : ls_item TYPE wd_this->element_item,

lt_item TYPE wd_this->elements_item.

DATA : lt_doc TYPE ztdoc010,

ls_doc TYPE zsdoc001.

DATA : lv_itemn TYPE ze_itemn VALUE '000000'.

"获取当前items

zcl_wd_common=>get_elements(

EXPORTING

iv_none = wd_context

iv_name = 'ITEM'

IMPORTING

et_item = lt_item ).

IF lt_item\[\] IS NOT INITIAL.

"获取最大的行项目

SORT lt_item BY itemn DESCENDING.

READ TABLE lt_item INTO ls_item INDEX 1.

lv_itemn = ls_item-itemn.

CLEAR : ls_item.

ENDIF.

zcl_wd_common=>get_element(

EXPORTING

iv_none = wd_context

iv_name = 'UPLOAD'

IMPORTING

es_stru = ls_upload ).

"获取取消的文档信息

zcl_wd_upload=>init( EXPORTING ir_usage = wd_this->wd_cpuse_upload( ) ).

DATA(lv_flag) = wd_this->wd_cpifc_upload( )->get_flag( ).

"通过业务ID获取文档系统附件清单

zcl_wd_json=>get_itab_for_json(

EXPORTING

iv_guid = |{ ls_upload-guid }|

IMPORTING

ev_msg = lv_msg

es_json = ls_json ).

IF ls_json IS NOT INITIAL.

zcl_wd_common=>set_attribute(

EXPORTING

iv_none = wd_context

iv_name = 'ENABLED'

iv_attr = || ).

LOOP AT ls_json-rows INTO ls_fileinfo.

"清除删除清单的文档ID

READ TABLE wd_comp_controller->gt_0021_dele INTO DATA(ls_dele) WITH KEY docid_c = ls_fileinfo-id.

IF sy-subrc = 0.

CONTINUE." 解决删除文件后点确认再次带出已删除文件的问题

ENDIF.

"如果是取消上传,就从内表里清除

IF lv_flag = 'X'.

READ TABLE lt_item INTO ls_item WITH KEY docid_c = ls_fileinfo-id.

IF sy-subrc <> 0.

ls_doc-docid = ls_fileinfo-id.

APPEND ls_doc TO lt_doc.

CLEAR : ls_doc.

CONTINUE.

ELSE.

CONTINUE.

ENDIF.

ELSE.

READ TABLE lt_item INTO ls_item WITH KEY docid_c = ls_fileinfo-id.

"如果列表中,已存在就不再加载文档清单

IF sy-subrc = 0.

CONTINUE.

ENDIF.

ENDIF.

ls_item-docid = ls_fileinfo-id.

ls_item-docid_c = ls_fileinfo-id.

ls_item-fdown = ls_fileinfo-downloadurl.

ls_item-fextn = ls_fileinfo-ext.

ls_item-fname = ls_fileinfo-name.

ls_item-fpath = ls_fileinfo-previewurl.

ls_item-fsize = ls_fileinfo-formatsize.

lv_itemn = lv_itemn + 10.

ls_item-itemn = lv_itemn.

ls_item-ronly = 'X'.

ls_item-itemn = lv_itemn.

ls_item-sname = sy-uname.

lv_date = |{ ls_fileinfo-createdate+0(10) }|.

REPLACE ALL OCCURRENCES OF '-' IN lv_date WITH '' .

lv_time = |{ ls_fileinfo-createdate+11(8) }|.

REPLACE ALL OCCURRENCES OF ':' IN lv_time WITH '' .

ls_item-sdate = lv_date.

ls_item-stime = lv_time.

APPEND ls_item TO lt_item.

CLEAR : ls_item,ls_fileinfo.

ENDLOOP.

"删除文档服务器的文件

CLEAR :ls_json.

zcl_wd_json=>delete_files_for_json(

EXPORTING

it_docs = lt_doc

IMPORTING

es_json = ls_json ).

SORT lt_item BY itemn.

zcl_wd_common=>set_elements(

EXPORTING

iv_none = wd_context

iv_name = 'ITEM'

it_item = lt_item ).

CLEAR : lv_itemn.

ENDIF.

wd_comp_controller->fire_file_check_evt( ).

ENDMETHOD.

VIEW METHOD实现文档交互

在各个WDA 应用里需要用到附件功能的引用上面 的组件:

相关推荐
Scott9999HH1 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
码智社2 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
AI云海2 小时前
python 列表、元组、集合和字典
开发语言·python
萧瑟余晖3 小时前
JDK 26 新特性详解
java·开发语言
马优晨4 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
人邮异步社区6 小时前
怎么把C语言学到精通?
c语言·开发语言
心平气和量大福大6 小时前
C#-WPF-控件-TextBox 数据绑定
开发语言·c#·wpf
ttwuai6 小时前
Cursor 生成 CRUD 后,Go 后台接口别只测 200:JWT、RBAC 和 tenant_id 怎么验
开发语言·后端·golang
এ慕ོ冬℘゜7 小时前
前端基础:什么是时间戳?JS获取时间戳三种方法与实战用途
开发语言·前端·javascript
执明wa7 小时前
LayoutInflater详解: XML是如何变成View的?
android·xml·开发语言·android studio