如何將SAP WebClient UI的表格匯出成PDF
In WebClient for configTable control there is a functionality to export the whole table content as an excel.
Only simple steps are necessary to support export with PDF format as well. The achievement would be: a new button is added to table toolbar.
Once pressed, a new PDF with all table records are displayed.
Required steps are briefly listed below.
(1) Create a new post exit on class CL_BTSRV_ADVSRL_CNTRL, method PREPARE_TOOLBAR, in order to add a new button for PDF export in table toolbar.
Post exit source code:
CLASS lcl_zexport_button DEFINITION DEFERRED.CLASS cl_btsrv_advsrl_cntrl DEFINITION LOCAL FRIENDS lcl_zexport_button.CLASS lcl_zexport_button DEFINITION.
PUBLIC SECTION.
CLASS-DATA obj TYPE REF TO lcl_zexport_button. "#EC NEEDED DATA core_object TYPE REF TO cl_btsrv_advsrl_cntrl . "#EC NEEDED INTERFACES IPO_ZEXPORT_BUTTON.
METHODS:
constructor IMPORTING core_object
TYPE REF TO cl_btsrv_advsrl_cntrl OPTIONAL.ENDCLASS.CLASS lcl_zexport_button IMPLEMENTATION.
METHOD constructor.
me->core_object = core_object.
ENDMETHOD.
METHOD ipo_zexport_button~prepare_toolbar.*"------------------------------------------------------------------------**" Declaration of POST-method, do not insert any comments here please!*"*"methods PREPARE_TOOLBAR .*"------------------------------------------------------------------------*
DATA: ls_button TYPE crmt_thtmlb_button.
ls_button-type = cl_thtmlb_util=>gc_icon_accept.
ls_button-on_click = 'EXPORT'.
ls_button-text = 'Export to PDF'.
ls_button-enabled = abap_true.
APPEND ls_button TO ME->CORE_OBJECT->gt_button.
ENDMETHOD.ENDCLASS.
(2) add a new event EXPORT and implement the handler in the result view:
Source code of export implementation:
method EH_ONEXPORT.
cl_crm_order_2_pdf=>open_pdf( io_col_wrapper = me->typed_context->btqrsrvord->collection_wrapper
io_window_manager = me->comp_controller->window_manager ).
endmethod.Source code of method open_pdf:
METHOD open_pdf.
DATA: lv_query TYPE string.
CHECK io_col_wrapper->size( ) > 0.
DATA(iterator) = io_col_wrapper->get_iterator( ).
DATA(bol) = iterator->get_current( ).
WHILE bol IS NOT INITIAL.
lv_query = lv_query && ',' && bol->get_property_as_string( 'GUID' ).
bol = iterator->get_next( ).
ENDWHILE.
lv_query = 'uuid=' && lv_query.
DATA(lv_url) = cl_crm_web_utility=>create_url( iv_path = '/sap/crm/order_print'
iv_query = lv_query
iv_in_same_session = 'X' ).
DATA(lv_title) = 'Service Order PDF List'.
DATA(lr_popup) = io_window_manager->create_popup( iv_interface_view_name = 'GSURLPOPUP/MainWindow'
iv_usage_name = 'CUGURLPopup'
iv_title = CONV #( lv_title ) ).
DATA(lr_cn) = lr_popup->get_context_node( 'PARAMS' ).
DATA(lr_obj) = lr_cn->collection_wrapper->get_current( ).
DATA(ls_params) = VALUE crmt_gsurlpopup_params( url = lv_url height = '1000' ).
lr_obj->set_properties( ls_params ).
lr_popup->set_display_mode( if_bsp_wd_popup=>c_display_mode_plain ).
lr_popup->set_window_width( 1000 ).
lr_popup->set_window_height( 1000 ).
lr_popup->open( ).
ENDMETHOD.
(3) Since in step 2 the reuse component GSURLPOPUP is utilized to hold rendered PDF as popup, so we need to declare it as component usage in the component of search result view:
(4) In step 2, the ICF service /sap/crm/order_print is declared but not implemented, so we have to create it in this step via tcode SICF.
Still use CL_CRM_ORDER_2_PDF as handler class,
and the main logic for PDF generation is done in method HANDLE_REQUEST of this handler class:
method IF_HTTP_EXTENSION~HANDLE_REQUEST.
CONSTANTS c_linelen TYPE i VALUE 255.
DATA: wa_data(c_linelen) TYPE x,
lt_data LIKE TABLE OF wa_data.
DATA: lv_pdf_length TYPE i,
lv_pdf_xstring TYPE xstring,
ls_guid_str TYPE string.
DATA(lv_uuid) = server->request->get_form_field( 'uuid' ).
CALL METHOD me->get_output_data
EXPORTING
iv_uuid = lv_uuid
IMPORTING
fpcontent = lv_pdf_xstring.
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
buffer = lv_pdf_xstring
IMPORTING
output_length = lv_pdf_length
TABLES
binary_tab = lt_data.
DATA(lv_contenttype) = 'application/pdf'.
ls_guid_str = lv_uuid.
CONCATENATE ls_guid_str '.pdf' INTO DATA(lv_filename).
server->response->append_data(
data = lv_pdf_xstring
length = lv_pdf_length ).
CONCATENATE 'inline; filename=' lv_filename
INTO DATA(lv_contentdisposition).
CALL METHOD server->response->set_header_field
EXPORTING
name = 'content-disposition'
value = lv_contentdisposition.
CALL METHOD server->response->set_header_field
EXPORTING
name = 'content-type'
value = CONV #( lv_contenttype ).
CALL METHOD server->response->set_header_field
EXPORTING
name = 'content-filename'
value = lv_filename.
server->response->delete_header_field(
name = 'Cache-Control' ).
server->response->delete_header_field(
name = 'Expires' ).
endmethod.
(5) Develop an Adobe Form to display the table content.
The table in the Adobe Form must behave as so called “data-driven” way, which means the table content in the PDF must grow according to the actual data passed into the PDF rendering processor. First create an ABAP interface for Adobe form via tcode SFP:
The signature for this interface:
Once done, create a new Form template PF_CRM_ORDER_LIST via tcode SFP as well:
Key steps which makes the table in the form template be able to automatically grow according to the feed data source: (1) The body page must be flowed instead of positioned:
(2) The table content row must be bound to a context node which has 0:n occurrence, and the “Repeat Row for Each Data Item” checkbox must be enabled.
As in step 4, I use a SELECT * from CRMD_ORDERADM_H as the data source for this template, which means you can bind any field in ABAP structure CRMD_ORDERADM_H to the table cell in PDF, as illustrated below.
Activate both form interface and form template and the corresponding PDF would be generated now once export button is pressed. You upload to your SFP workbench via command fb_xdp_up:
要獲取更多Jerry的原創文章,請關注公眾號"汪子熙":
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2715000/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 將SAP CRM WebClient UI的表格匯出成PDFWebclientUI
- SAP UI5 表格資料如何匯出成 Excel 檔案(Table Export As Excel)UIExcelExport
- php如何將資料匯出成excel表格呢?PHPExcel
- SAP CRM WebClient UI表格編輯模式的除錯明細WebclientUI模式除錯
- 如何在SAP WebClient UI裡使用jChartFXWebclientUI
- element-ui匯出表格UI
- vue+element將資料匯出成excel表格VueExcel
- element-UI庫Table表格匯出Excel表格UIExcel
- SAP WebClient UI的白屏問題分析WebclientUI
- 使用SAP Transaction Launcher將ABAP Webdynpro嵌入到WebClient UI中WebclientUI
- Element-ui元件庫Table表格匯出Excel表格UI元件Excel
- 如何在SAP WebClient UI裡使用HANA Live reportWebclientUI
- vue將表格匯出為excelVueExcel
- SAP WebClient UI的會話重啟原理WebclientUI會話
- 如何在SAP WebClient UI裡建立柱狀圖(bar chart)WebclientUI
- 使用note++開發SAP WebClient UIWebclientUI
- SAP CRM WebClient UI和Fiori UI混搭並存WebclientUI
- 在SAP WebClient UI裡顯示倒數計時的UIWebclientUI
- SAP CRM WebClient UI和Hybris的controller是如何被呼叫的WebclientUIController
- 如何將一個PDF檔案裡的圖片批量匯出
- SAP CRM WebClient UI上將text area裡的文字清空的後臺處理WebclientUI
- SAP CRM WebClient UI異常的持久化機制WebclientUI持久化
- SAP WebClient UI One Hit Navigation的實現方法WebclientUINavigation
- SAP CRM WebClient UI和Hybris backoffice UI開發的相同點WebclientUI
- SAP CRM WebClient UI的Delta處理機制介紹WebclientUI
- SAP CRM WebClient UI html 格式的 Text 顯示邏輯WebclientUIHTML
- SAP CRM WebClient UI 支援的一些 url 引數WebclientUI
- 如何將Word文件轉成Excel表格?Excel
- 10分鐘做好 Bootstrap Blazor 的表格元件匯出 Excel/Word/Html/PdfbootBlazor元件ExcelHTML
- 如何免費將PDF轉成PPT?
- 如何把SAP CRM WebClient UI上某個欄位高亮加粗顯示WebclientUI
- pdf的表格怎麼轉換成word?
- PHP 匯出 PDFPHP
- java匯出pdfJava
- 在SAP CRM WebClient UI中用javascript觸發ABAP eventWebclientUIJavaScript
- 騰訊文件怎樣匯出excel表格 騰訊文件如何匯出excelExcel
- SAP CRM WebClient UI的on_new_focus應該怎麼理解WebclientUI
- SAP CRM WebClient UI Text Type 顯示的過濾邏輯WebclientUI