如何在 WEBUI 界面打印 PDF

作者:郑德鼎 约 6 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, CO, Data Engineering, FI, SD, WM, 仓库管理, 开发, 数据工程, 财务, 销售分销
如何在 WEBUI 界面打印 PDF - 封面图
如何在 WEBUI 界面打印 PDF - 封面图

在财务共享项目中,单据审核完成后在归档时需要打印封面。今天分享一种web ui

界面打印功能的实现方法。思路是通过组件GSURLPOPUP用于将呈现的PDF保存为弹出窗口,因为这里的组件是SRQM_INCIDENT_H本身组件用法中就有GSURLPOPUP的声明,直接使用就可以了。

在财务共享项目中,单据审核完成后在归档时需要打印封面。

如下图所示

如何在 WEBUI 界面打印 PDF - 封面图
如何在 WEBUI 界面打印 PDF - 封面图
如何在 WEBUI 界面打印 PDF - 封面图
如何在 WEBUI 界面打印 PDF - 封面图

分享一种web ui 界面打印功能的实现方法。

思路是通过 组件 GSURLPOPUP 用于将呈现的 PDF 保存为弹出窗口

因为这里的组件是 SRQM_INCIDENT_H 本身组件用法中就有 GSURLPOPUP 的声明,直接使用就可以了。

如何在 WEBUI 界面打印 PDF - 封面图
如何在 WEBUI 界面打印 PDF - 封面图

呈现PDF要使用到S ICF 服务 /sap/crm/crm_pdf_print

所以我们通过T-CODE ‘SICF’定义服务

仿照crm_pdf_print创建的新的服务zcrm_pdf_print

如何在 WEBUI 界面打印 PDF - 封面图
如何在 WEBUI 界面打印 PDF - 封面图
如何在 WEBUI 界面打印 PDF - 封面图
如何在 WEBUI 界面打印 PDF - 封面图
如何在 WEBUI 界面打印 PDF - 封面图
如何在 WEBUI 界面打印 PDF - 封面图

修改方法IF_HTTP_EXTENSION~HANDLE_REQUEST,

PDF 生成的主要逻辑是在这个处理程序类的方法 HANDLE_REQUEST 中完成的。

创建按钮事件

调用组件用法 CUGSURLPopup

如何在 WEBUI 界面打印 PDF - 封面图
如何在 WEBUI 界面打印 PDF - 封面图

组件中GSURLPOPUP 的上下文节点 PARAMS 的属性字段URL的取值

如何在 WEBUI 界面打印 PDF - 封面图
如何在 WEBUI 界面打印 PDF - 封面图

刚刚在 eh_onprint 中 拼接了数据到 lv_query。

CONCATENATE 'scenario=V&service=' wa_adminh \- object_id INTO lv_query

.

现在这里就可以读取到了。

如何在 WEBUI 界面打印 PDF - 封面图
如何在 WEBUI 界面打印 PDF - 封面图

有了单号就通过在get_pdf方法中就可以获取单据信息了,接下来就是调用smartforms

如何在 WEBUI 界面打印 PDF - 封面图
如何在 WEBUI 界面打印 PDF - 封面图

最后就是设置网页的相关信息,用来展现 PDF 了。

如何在 WEBUI 界面打印 PDF - 封面图
如何在 WEBUI 界面打印 PDF - 封面图

** 按钮事件的代码: **

1. METHOD eh_onprint.2. 3. DATA l_spld TYPE rspopname.4. 5. DATA :lv_query TYPE string,6. lv_title TYPE string,7. lv_url TYPE string,8. lr_cn TYPE REF TO cl_bsp_wd_context_node,9. lr_obj TYPE REF TO if_bol_bo_property_access,10. lr_popup TYPE REF TO if_bsp_wd_popup,11. ls_params TYPE crmt_gsurlpopup_params.12. 13. DATA: lr_cn_btadminh TYPE REF TO cl_bsp_wd_context_node,14. lr_entity TYPE REF TO cl_crm_bol_entity,15. lr_statusset TYPE REF TO cl_crm_bol_entity,16. lr_statuscur TYPE REF TO cl_crm_bol_entity.17. DATA: lr_core TYPE REF TO cl_crm_bol_core.18. DATA: lr_transaction TYPE REF TO if_bol_transaction_context.19. DATA: wa_adminh TYPE crmst_adminh_btil.20. DATA: lv_success TYPE crmt_boolean.21. 22. lr_core = cl_crm_bol_core=>get_instance( ).23. * lr_transaction ?= lr_core->get_transaction( ).24. lr_cn_btadminh = me->get_context_node( gc_cn_btadminh ).25. 26. CHECK lr_cn_btadminh IS BOUND.27. lr_entity ?= lr_cn_btadminh->collection_wrapper->get_current( ).28. 29. CHECK lr_entity IS BOUND.30. 31. lr_entity->get_properties( IMPORTING es_attributes = wa_adminh ).32. 33. CONCATENATE 'scenario=V&service=' wa_adminh-object_id INTO lv_query.34. 35. * get URL36. lv_url = cl_crm_web_utility=>create_url( iv_path = '/sap/crm/zcrm_pdf_print'37. iv_query = lv_query38. iv_in_same_session = 'X' ).39. *URL will have to set up in the ICF service, this we will see in further steps.40. 41. *Create a popup with the help of window controller and make use of standard URL POPUP Interface View.42. 43. lr_popup = me->comp_controller->window_manager->create_popup(44. iv_interface_view_name = 'GSURLPOPUP/MainWindow'45. iv_usage_name = 'CUGSURLPopup'46. iv_title = lv_title ).47. 48. *Set the URL paramaters like Header_guid which will be retrived in the service handler class later.49. 50. lr_cn = lr_popup->get_context_node( 'PARAMS' ).51. lr_obj = lr_cn->collection_wrapper->get_current( ).52. 53. * Set up Popup configuration Settings like54. 55. ls_params-url = lv_url.56. ls_params-height = '1280'.57. ls_params-width = '800'.58. lr_obj->set_properties( ls_params ).59. lr_popup->set_display_mode( if_bsp_wd_popup=>c_display_mode_plain ).60. lr_popup->set_window_width( 820 ).61. lr_popup->set_window_height( 800 ).62. lr_popup->open( ).63. 64. * ENDIF.65. 66. ENDMETHOD.

** **

** HANDLE_REQUEST代码: **

1. METHOD if_http_extension~handle_request.2. DATA: ls_phio TYPE skwf_io,3. lt_file_info TYPE sdokfilacis,4. ls_file_info LIKE LINE OF lt_file_info,5. lv_file_name TYPE sdok_filnm,6. lv_mime_type TYPE w3conttype,7. lv_file_size TYPE sdok_fsize,8. lt_contents TYPE sdokcntbins,9. ls_contents TYPE sdokcntbin,10. ls_error TYPE skwf_error,11. lv_error_msg TYPE string,12. lv_chunksize TYPE sybin2,13. xwa TYPE xstring,14. xwa_len TYPE i,15. lv_contenttype TYPE string,16. lv_filename TYPE string,17. lv_contentdisposition TYPE string,18. lv_appl_ns TYPE string,19. lt_header_fields TYPE tihttpnvp,20. lt_form_fields TYPE tihttpnvp,21. lv_qry_string TYPE string,22. ls_scenario TYPE char1,23. lv_devtype TYPE rspoptype,24. lv_print_dest TYPE rspopname,25. BEGIN OF ls_attach_key,26. object_id TYPE soodk,27. attach_id TYPE soodk,28. END OF ls_attach_key,29. ls_attach_header TYPE sood2,30. lt_objcont TYPE STANDARD TABLE OF soli,31. ls_objcont LIKE LINE OF lt_objcont,32. ls_size TYPE sood-objlen,33. ls_lines TYPE i,34. ls_len TYPE i,35. lv_fn_length TYPE i,36. lv_fe_length TYPE i,37. ls_guid TYPE crmt_object_guid,38. ls_guid_str TYPE string,39. ls_smart_form TYPE tdsfname,40. ls_class TYPE seoclsname,41. ls_method TYPE seocmpname,42. ls_action_object TYPE string,43. lr_action_ppf TYPE REF TO if_action_ppf.44. DATA xwa_str TYPE string.45. DATA: ls_header_guid TYPE string,46. lv_pdf_xstring TYPE xstring,47. lv_pdf_length TYPE i,48. l_bin TYPE STANDARD TABLE OF sdokcntbin.49. 50. 51. * Distinguish between Kpro, SAPoffice, and printing52. ls_scenario = server->request->get_form_field( 'scenario' ).53. IF ls_scenario IS INITIAL.54. CALL METHOD server->request->get_form_data55. EXPORTING56. name = 'scenario'57. CHANGING58. data = ls_scenario.59. ENDIF.60. 61. * Print "#62. 63. ls_action_object = server->request->get_form_field( 'service' ).64. 65. *获取打印表单的数据66. get_pdf(67. EXPORTING68. iv_object = ls_action_object69. iv_type = ls_scenario70. IMPORTING71. ev_size = xwa_len72. ev_contents = xwa73. et_messages = lt_objcont74. ).75. 76. 77. IF sy-subrc <> 0 OR xwa_len <= 0.78. REFRESH lt_contents.79. ls_objcont = cl_bsp_runtime=>get_otr_text( 'CRM_KNOWLEDGE/SMARTFORM_ERROR' ).80. INSERT ls_objcont INTO lt_objcont INDEX 1.81. 82. ls_len = lines( lt_objcont ) * 255.83. "表单数据转二进制84. CALL FUNCTION 'SCMS_FTEXT_TO_BINARY'85. EX

...

郑德鼎

关于作者:郑德鼎

企业信息化与 SAP 技术顾问,长期专注 SAP ABAP、FI/CO、MM、SD 等模块的技术分享与实战经验总结。查看更多介绍

来源说明:本文内容由「如何在WEBUI界面打印PDF.md」整理生成,仅用于内部技术分享与学习交流。