• SMW0通过RESTFUL方式放到URL中做Excel附件


      1 *&---------------------------------------------------------------------*
      2 *& Report Z3426EXCEL002
      3 *&---------------------------------------------------------------------*
      4 *&
      5 *&---------------------------------------------------------------------*
      6 REPORT z3426excel005.
      7 
      8 DATA:gv_xcontent TYPE xstring.
      9 SELECT * INTO TABLE @DATA(lt_bp) FROM but000 UP TO 100 ROWS.
     10 PERFORM frm_tabconvxtr TABLES lt_bp[].
     11 PERFORM frm_upload_to_http.
     12 
     13 FORM frm_tabconvxtr TABLES pt_data.
     14   DATA:lw_tab_ref TYPE REF TO data.
     15   CREATE DATA lw_tab_ref LIKE LINE OF pt_data.
     16 
     17   DATA:ls_mime    TYPE w3mime,
     18        lt_mime    TYPE TABLE OF w3mime,
     19        filesize   TYPE string,
     20        filesizei  TYPE i,
     21        lv_xstring TYPE xstring,
     22        fileext    TYPE char20,
     23        ls_key     TYPE wwwdatatab.
     24 
     25   ls_key-relid = 'MI'.
     26   ls_key-objid = 'XXXXXX'.
     27   SELECT * FROM wwwparams INTO TABLE @DATA(lt_wwwparam)
     28    WHERE relid = @ls_key-relid
     29      AND objid = @ls_key-objid.
     30   TRY.
     31       LOOP AT lt_wwwparam INTO DATA(ls_wwwparam).
     32         CASE ls_wwwparam-name.
     33           WHEN 'filesize'.
     34             filesizei = filesize = ls_wwwparam-value.
     35             CONDENSE filesize NO-GAPS.
     36           WHEN 'fileextension'.
     37             fileext = ls_wwwparam-value.
     38         ENDCASE.
     39       ENDLOOP.
     40 **********************************************************************
     41 * 获取SMW0的数据
     42       CALL FUNCTION 'WWWDATA_IMPORT'
     43         EXPORTING
     44           key               = ls_key
     45         TABLES
     46           mime              = lt_mime
     47         EXCEPTIONS
     48           wrong_object_type = 1
     49           import_error      = 2
     50           OTHERS            = 99.
     51 
     52       CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
     53         EXPORTING
     54           input_length = filesizei
     55         IMPORTING
     56           buffer       = lv_xstring
     57         TABLES
     58           binary_tab   = lt_mime
     59         EXCEPTIONS
     60           failed       = 1
     61           OTHERS       = 2.
     62 **********************************************************************
     63       DATA(xlsx_handling) = cl_ehfnd_xlsx=>get_instance( )."xlsx 句柄
     64       DATA(xlsx_document) = xlsx_handling->load_doc( lv_xstring )."xlsx 文件
     65       DATA(xlsx_sheets) = xlsx_document->get_sheets( )."得到sheets
     66       DATA(first_xlsx_sheet) = xlsx_document->get_sheet_by_id( xlsx_sheets[ 1 ]-sheet_id )."得到sheet
     67       first_xlsx_sheet->change_sheet_name( 'Sheet_first' )."设置sheet的名称
     68       DO 2 TIMES.
     69         DATA(lv_row) = sy-index + 3."从第三行起,开始写数据
     70         DO 10 TIMES.
     71           DATA(lv_column) = sy-index.
     72           IF first_xlsx_sheet->has_cell_content( iv_row = lv_row iv_column = lv_column ).
     73           ELSE.
     74             first_xlsx_sheet->set_cell_content( iv_row = lv_row iv_column = lv_column iv_value = '测试数据!' ).
     75           ENDIF.
     76 
     77         ENDDO.
     78       ENDDO.
     79 
     80       gv_xcontent = xlsx_document->save( ).
     81     CATCH cx_openxml_format  INTO DATA(openxml_format_exception).
     82       MESSAGE e001(00) RAISING file_export_error
     83       WITH 'Error occurs when constructing excel file instance.'." cx_openxml_format.
     84     CATCH cx_openxml_not_found INTO DATA(openxml_not_found_exception).
     85       MESSAGE e001(00) RAISING file_export_error
     86       WITH ' Error occurs when constructing excel file instance.' "CX_OPENXML_NOT_FOUND |.
     87       .
     88     CATCH cx_openxml_not_allowed INTO DATA(openxml_not_allowed_exception).
     89       MESSAGE e001(00) RAISING file_export_error
     90       WITH 'Error occurs when constructing excel file instance.'" CX_OPENXML_NOT_ALLOWED |.
     91       .
     92   ENDTRY.
     93 
     94   "cl_scp_change_db=>xstr_to_xtab( EXPORTING im_xstring = filecontent IMPORTING ex_xtab = pt_xtab[] ).
     95   "length = xstrlen( filecontent ).
     96   "pv_xtab[] = l_binary_tab[].
     97   "length = l_length.
     98 ENDFORM.
     99 
    100 FORM frm_upload_to_http .
    101   DATA:lo_response TYPE REF TO if_http_response,
    102        lv_hostname TYPE string,
    103        lv_port     TYPE string.
    104 
    105   CREATE OBJECT lo_response TYPE cl_http_response EXPORTING add_c_msg = 1.
    106   lo_response->set_data( gv_xcontent ).
    107   lo_response->set_header_field( name = if_http_header_fields=>content_type value = '.xlsx' ).
    108   lo_response->set_status( code = 200 reason = 'OK' ).
    109   lo_response->server_cache_expire_rel( expires_rel = 600 ).
    110 
    111   CALL FUNCTION 'TH_GET_VIRT_HOST_DATA'
    112     EXPORTING
    113       protocol = 0
    114       virt_idx = 0
    115     IMPORTING
    116       hostname = lv_hostname
    117       port     = lv_port.
    118 
    119   DATA(lv_guid) = cl_system_uuid=>create_uuid_x16_static( ).
    120   DATA(lv_url) = |http://{ lv_hostname }:{ lv_port }/sap/public/{ lv_guid }.xlsx|.
    121   cl_http_server=>server_cache_upload( url = lv_url response = lo_response ).
    122   cl_gui_frontend_services=>execute( document = lv_url ).
    123   FREE lo_response.
    124 ENDFORM.
  • 相关阅读:
    访问者模式:男人女人区别
    享元模式:开发多个网站实例
    中介者模式:联合国实例
    职责链模式:加薪实例
    命令模式:烤羊肉串实例
    桥接模式:手机软件实例
    单例模式
    组合模式:公司管理系统实例
    备忘录模式:游戏进度实例
    适配器模式:篮球翻译实例
  • 原文地址:https://www.cnblogs.com/1187163927ch/p/16371480.html
Copyright © 2020-2023  润新知