溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎樣將SAP CRM WebClient UI的表格導(dǎo)出成PDF

發(fā)布時(shí)間:2021-12-29 18:27:28 來源:億速云 閱讀:149 作者:柒染 欄目:互聯(lián)網(wǎng)科技

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)怎樣將SAP CRM WebClient UI的表格導(dǎo)出成PDF,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

在WebClient for configTable控件中,有一個(gè)將整個(gè)表內(nèi)容導(dǎo)出為excel的功能。

怎樣將SAP CRM WebClient UI的表格導(dǎo)出成PDF

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.

怎樣將SAP CRM WebClient UI的表格導(dǎo)出成PDF

Once pressed, a new PDF with all table records are displayed.

怎樣將SAP CRM WebClient UI的表格導(dǎo)出成PDF

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.

怎樣將SAP CRM WebClient UI的表格導(dǎo)出成PDF

Post exit source code:

怎樣將SAP CRM WebClient UI的表格導(dǎo)出成PDF

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:

怎樣將SAP CRM WebClient UI的表格導(dǎo)出成PDF

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:

怎樣將SAP CRM WebClient UI的表格導(dǎo)出成PDF

(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.

怎樣將SAP CRM WebClient UI的表格導(dǎo)出成PDF

Still use CL_CRM_ORDER_2_PDF as handler class,

怎樣將SAP CRM WebClient UI的表格導(dǎo)出成PDF

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:

怎樣將SAP CRM WebClient UI的表格導(dǎo)出成PDF

The signature for this interface:

怎樣將SAP CRM WebClient UI的表格導(dǎo)出成PDF

Once done, create a new Form template PF_CRM_ORDER_LIST via tcode SFP as well:

怎樣將SAP CRM WebClient UI的表格導(dǎo)出成PDF

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:

怎樣將SAP CRM WebClient UI的表格導(dǎo)出成PDF

(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.

怎樣將SAP CRM WebClient UI的表格導(dǎo)出成PDF

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.

怎樣將SAP CRM WebClient UI的表格導(dǎo)出成PDF

Activate both form interface and form template and the corresponding PDF would be generated now once export button is pressed.

怎樣將SAP CRM WebClient UI的表格導(dǎo)出成PDF

怎樣將SAP CRM WebClient UI的表格導(dǎo)出成PDF

上述就是小編為大家分享的怎樣將SAP CRM WebClient UI的表格導(dǎo)出成PDF了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI