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 应用里需要用到附件功能的引用上面 的组件:

相关推荐
冯渺岚1 小时前
Lua语言的配置管理
开发语言·后端·golang
Hardess-god2 小时前
STL性能优化方法
开发语言·c++·性能优化
打死不学Java代码2 小时前
Redis分布式锁如何实现——简单理解版
java·开发语言·redis·分布式·缓存·面试
前端_学习之路2 小时前
axios--源码解析
java·开发语言·javascript·ajax
Flower#2 小时前
C . Serval and The Formula【Codeforces Round 1011 (Div. 2)】
c语言·开发语言·c++·算法
martian6652 小时前
Java高并发容器的内核解析:从无锁算法到分段锁的架构演进
java·开发语言
藍海琴泉3 小时前
Python虚拟环境:从入门到实战指南
开发语言·python
cfjybgkmf3 小时前
Python字典
开发语言·python
Python数据分析与机器学习3 小时前
《基于Python+web的家具消费数据的数据分析与应用》开题报告
开发语言·网络·分布式·python·web安全·数据分析·flask
yezipi耶不耶3 小时前
Rust 入门之闭包(Closures)
开发语言·后端·rust