通过基于SOAP的Web服务发送和接收PDF附件

2020-08-19 10:55发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


这是通过基于SOAP的Web服务发送和接收PDF附件的简单代码。

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

 *&报告ZKP_DS1

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

 *&

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

 报告zkp_ds4。


 类型:开始于gty_file_data,

          条目TYPE x LENGTH 255,

        结束于gty_file_data。



 数据:ls_request TYPE zkp_dsmt_signed_invoice,

       ls_response类型zkp_dsmt_signed_invoice,

       s_input TYPE zkp_dsdt_signed_invoice,

       s_output类型zkp_dsdt_signed_invoice,

       lo_clientproxy类型参考zkp_dsco_si_signed_invoice,

       lo_fault类型参考cx_ai_system_fault,

       tp_lp TYPE prx_logical_port_name,

       attachment_protocol类型参考if_wsprotocol_attachments,

       附件类型REF TO if_ai_attachment,

       附件类型prx_attach,

       attach_xstring TYPE xstring,

       msgid_prot类型参考if_wsprotocol_message_id,

       msgguid TYPE sxmsmguid,

       att_prot类型参考if_wsprotocol_attachments,

       ATT TYPE prx_attach,

       Itab类型表gty_file_data,

       lv_flength TYPE i,

       tp_filename TYPE字符串,

       xi_attachment TYPE hrasr00xi_attachment,

       文件名TYPE字符串,

       mime_type TYPE w3conttype,

       扩展名(64)TYPE c,

       gv_attachment_xstring TYPE xstring,

       bin_filesize TYPE i,

       临时表TYPE w3mimetabtype。





 FIELD-SYMBOLS: TYPE gty_file_data,

                类型引用到if_ai_attachment。



 常量:co_type_octet TYPE字符串值'application/xml'。



 参数:pa_name TYPE text100默认值'C:\ Users \ padmawak \ Documents \ test_invoice.pdf'。





 选择开始。



 *以xstring格式显示pdf数据

   tp_filename = pa_name。

   通话功能'GUI_UPLOAD'

     出口

       文件名= tp_文件名

       filetype ='BIN'

     输入

       文件长度= lv_flength

     桌子

       data_tab = itab

     例外情况

       file_open_error = 1

       file_read_error = 2

       no_batch = 3

       gui_refuse_filetransfer = 4

       invalid_type = 5

       no_authority = 6

       unknown_error = 7

       bad_data_format = 8

       header_not_allowed = 9

       spacer_not_allowed = 10

       header_too_long = 11

       unknown_dp_error = 12

       access_denied = 13

       dp_out_of_memory = 14

       disk_full = 15

       dp_timeout = 16

       其他= 17。





   循环至itab分配。

     CONCATENATE gv_attachment_xstring -输入INTO gv_attachment_xstring

                                                               在字节模式下。

   结局。



   attach_xstring = gv_attachment_xstring。



 *通过传递逻辑端口创建客户端代理对象

   tp_lp ='ZKP_PORT_DS'。

   创建对象lo_clientproxy

     出口

       logical_port_name = tp_lp。



 *在请求中发送pdf附件xstring

   attachment_protocol?= lo_clientproxy-> get_protocol(if_wsprotocol => attachments)。

   附件=附件协议-> get_attachment_from_binary(数据= attach_xstring

                                                                类型= if_ai_attachment => c_mimetype_pdf

                                                                name ='invoice1')。

   将附件追加到附件中。

 *设置附件数据

   attachment_protocol-> set_attachments(附件)。



 *在请求字段中传递数据

   s_input-action ='test_data12345'。

   ls_request-mt_signed_invoice = s_input。



 *呼叫代理(同步)方法

   呼叫方法lo_clientproxy-> si_signed_invoice

     出口

       输入= ls_request

     输入

       输出= ls_response。



   提交工作。



 *获取响应的消息ID

   msgstr_prot?= lo_clientproxy-> get_protocol(if_wsprotocol => message_id)。

   msgguid = msgid_prot-> get_message_id()。



 *获取响应的附件数据

   att_prot?= lo_clientproxy-> get_protocol(if_wsprotocol => attachments)。

   atts = att_prot-> get_attachments()。



   READ TABLE ATTS ASSIGNING  INDEX 1。

   如果sy-subrc = 0。

 *从回复中获取附件内容

     xi_attachment-content = -> get_binary_data()。

 *获取文件名

     filename = -> get_document_name()。

 *获取扩展名

     mime_type = -> get_content_type()。

     通话功能" SDOK_FILE_NAME_EXTENSION_GET"

       出口

         mimetype = mime_type

       输入

         扩展名=扩展名。

 *生成文件名。扩展名

     CONCATENATE文件名'。' 扩展名INTO xi_attachment-文件名。



 *将响应附件数据转换为PDF

     通话功能'SCMS_XSTRING_TO_BINARY'

       出口

         缓冲区= xi_attachment-content

       输入

         output_length = bin_filesize

       桌子

         binary_tab =临时表。



 *下载到本地路径

     cl_gui_frontend_services => gui_download(

        出口

          bin_filesize = bin_filesize

          文件名='C:\ Temp \ 123.pdf'

          filetype ='BIN'

        改变

          data_tab =临时表

        例外情况

          file_write_error = 1

          no_batch = 2

          gui_refuse_filetransfer = 3

          invalid_type = 4

          no_authority = 5

          unknown_error = 6

          header_not_allowed = 7

          spacer_not_allowed = 8

          filesize_not_allowed = 9

          header_too_long = 10

          dp_error_create = 11

          dp_error_send = 12

          dp_error_write = 13

          unknown_dp_error = 14

          access_denied = 15

          dp_out_of_memory = 16

          disk_full = 17

          dp_timeout = 18

          file_not_found = 19

          dataprovider_exception = 20

          control_flush_error = 21

          not_supported_by_gui = 22

          error_no_gui = 23

          其他= 24

     )。

     如果sy-subrc <> 0。

       消息ID sy-msgid类型sy-msgty编号sy-msgno

                  与sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4。

     万一。

   万一。
 

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


这是通过基于SOAP的Web服务发送和接收PDF附件的简单代码。

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

 *&报告ZKP_DS1

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

 *&

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

 报告zkp_ds4。


 类型:开始于gty_file_data,

          条目TYPE x LENGTH 255,

        结束于gty_file_data。



 数据:ls_request TYPE zkp_dsmt_signed_invoice,

       ls_response类型zkp_dsmt_signed_invoice,

       s_input TYPE zkp_dsdt_signed_invoice,

       s_output类型zkp_dsdt_signed_invoice,

       lo_clientproxy类型参考zkp_dsco_si_signed_invoice,

       lo_fault类型参考cx_ai_system_fault,

       tp_lp TYPE prx_logical_port_name,

       attachment_protocol类型参考if_wsprotocol_attachments,

       附件类型REF TO if_ai_attachment,

       附件类型prx_attach,

       attach_xstring TYPE xstring,

       msgid_prot类型参考if_wsprotocol_message_id,

       msgguid TYPE sxmsmguid,

       att_prot类型参考if_wsprotocol_attachments,

       ATT TYPE prx_attach,

       Itab类型表gty_file_data,

       lv_flength TYPE i,

       tp_filename TYPE字符串,

       xi_attachment TYPE hrasr00xi_attachment,

       文件名TYPE字符串,

       mime_type TYPE w3conttype,

       扩展名(64)TYPE c,

       gv_attachment_xstring TYPE xstring,

       bin_filesize TYPE i,

       临时表TYPE w3mimetabtype。





 FIELD-SYMBOLS: TYPE gty_file_data,

                类型引用到if_ai_attachment。



 常量:co_type_octet TYPE字符串值'application/xml'。



 参数:pa_name TYPE text100默认值'C:\ Users \ padmawak \ Documents \ test_invoice.pdf'。





 选择开始。



 *以xstring格式显示pdf数据

   tp_filename = pa_name。

   通话功能'GUI_UPLOAD'

     出口

       文件名= tp_文件名

       filetype ='BIN'

     输入

       文件长度= lv_flength

     桌子

       data_tab = itab

     例外情况

       file_open_error = 1

       file_read_error = 2

       no_batch = 3

       gui_refuse_filetransfer = 4

       invalid_type = 5

       no_authority = 6

       unknown_error = 7

       bad_data_format = 8

       header_not_allowed = 9

       spacer_not_allowed = 10

       header_too_long = 11

       unknown_dp_error = 12

       access_denied = 13

       dp_out_of_memory = 14

       disk_full = 15

       dp_timeout = 16

       其他= 17。





   循环至itab分配。

     CONCATENATE gv_attachment_xstring -输入INTO gv_attachment_xstring

                                                               在字节模式下。

   结局。



   attach_xstring = gv_attachment_xstring。



 *通过传递逻辑端口创建客户端代理对象

   tp_lp ='ZKP_PORT_DS'。

   创建对象lo_clientproxy

     出口

       logical_port_name = tp_lp。



 *在请求中发送pdf附件xstring

   attachment_protocol?= lo_clientproxy-> get_protocol(if_wsprotocol => attachments)。

   附件=附件协议-> get_attachment_from_binary(数据= attach_xstring

                                                                类型= if_ai_attachment => c_mimetype_pdf

                                                                name ='invoice1')。

   将附件追加到附件中。

 *设置附件数据

   attachment_protocol-> set_attachments(附件)。



 *在请求字段中传递数据

   s_input-action ='test_data12345'。

   ls_request-mt_signed_invoice = s_input。



 *呼叫代理(同步)方法

   呼叫方法lo_clientproxy-> si_signed_invoice

     出口

       输入= ls_request

     输入

       输出= ls_response。



   提交工作。



 *获取响应的消息ID

   msgstr_prot?= lo_clientproxy-> get_protocol(if_wsprotocol => message_id)。

   msgguid = msgid_prot-> get_message_id()。



 *获取响应的附件数据

   att_prot?= lo_clientproxy-> get_protocol(if_wsprotocol => attachments)。

   atts = att_prot-> get_attachments()。



   READ TABLE ATTS ASSIGNING  INDEX 1。

   如果sy-subrc = 0。

 *从回复中获取附件内容

     xi_attachment-content = -> get_binary_data()。

 *获取文件名

     filename = -> get_document_name()。

 *获取扩展名

     mime_type = -> get_content_type()。

     通话功能" SDOK_FILE_NAME_EXTENSION_GET"

       出口

         mimetype = mime_type

       输入

         扩展名=扩展名。

 *生成文件名。扩展名

     CONCATENATE文件名'。' 扩展名INTO xi_attachment-文件名。



 *将响应附件数据转换为PDF

     通话功能'SCMS_XSTRING_TO_BINARY'

       出口

         缓冲区= xi_attachment-content

       输入

         output_length = bin_filesize

       桌子

         binary_tab =临时表。



 *下载到本地路径

     cl_gui_frontend_services => gui_download(

        出口

          bin_filesize = bin_filesize

          文件名='C:\ Temp \ 123.pdf'

          filetype ='BIN'

        改变

          data_tab =临时表

        例外情况

          file_write_error = 1

          no_batch = 2

          gui_refuse_filetransfer = 3

          invalid_type = 4

          no_authority = 5

          unknown_error = 6

          header_not_allowed = 7

          spacer_not_allowed = 8

          filesize_not_allowed = 9

          header_too_long = 10

          dp_error_create = 11

          dp_error_send = 12

          dp_error_write = 13

          unknown_dp_error = 14

          access_denied = 15

          dp_out_of_memory = 16

          disk_full = 17

          dp_timeout = 18

          file_not_found = 19

          dataprovider_exception = 20

          control_flush_error = 21

          not_supported_by_gui = 22

          error_no_gui = 23

          其他= 24

     )。

     如果sy-subrc <> 0。

       消息ID sy-msgid类型sy-msgty编号sy-msgno

                  与sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4。

     万一。

   万一。
 
付费偷看设置
发送
1条回答
jovirus
1楼-- · 2020-08-19 11:33

有问题吗?

一周热门 更多>