您的位置:首页 > 产品设计 > UI/UE

一个简单的UI动态查询报表例子

2016-05-25 17:28 1511 查看
写一个动态查询报表,有很多种快速的方法,比如组件里面的向导形式,AXT里面的快速程序形式,这里说的是自己一步步建立的形式。
首先,你需要建一些BOL,最好是自建个组件集,这个前文有阐述,这里就不赘述了。

下面演示的就是一步步建立一个简单的动态查询报表的过程。









CLASS ZL_ZFANXX_SEARCH_IMPL IMPLEMENTATION.

* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Protected Method ZL_ZFANXX_SEARCH_IMPL->EH_ONCLEAR
* +-------------------------------------------------------------------------------------------------+
* | [--->] HTMLB_EVENT                    TYPE REF TO CL_HTMLB_EVENT(optional)
* | [--->] HTMLB_EVENT_EX                 TYPE REF TO IF_HTMLB_DATA(optional)
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD eh_onclear.
  DATA:
    lr_dquery_service   TYPE REF TO cl_crm_bol_dquery_service,
    lr_selection_params TYPE REF TO if_bol_bo_col,
    lr_query_node       TYPE REF TO cl_bsp_wd_context_node,
    lr_result_node      TYPE REF TO cl_bsp_wd_context_node,
    lv_adjustments      TYPE REF TO crmt_regex_conversion_tab.

  lr_query_node = typed_context->search.
  lr_result_node = typed_context->result.

* Get the query instance
  lr_dquery_service ?= lr_query_node->collection_wrapper->get_first( ).

* clear the selection parameters
  lv_adjustments = me->get_adjustments( ).
  lr_dquery_service->clear_selection_param_values( lv_adjustments ).

* reset invalid input in context node
  me->typed_context->search->if_bsp_model~reset_errors( ).

* clear result list
  lr_result_node->collection_wrapper->clear( ).
ENDMETHOD.

* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Protected Method ZL_ZFANXX_SEARCH_IMPL->EH_ONSEARCH
* +-------------------------------------------------------------------------------------------------+
* | [--->] HTMLB_EVENT                    TYPE REF TO CL_HTMLB_EVENT(optional)
* | [--->] HTMLB_EVENT_EX                 TYPE REF TO IF_HTMLB_DATA(optional)
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD eh_onsearch.
  DATA rg_object_id TYPE RANGE OF zfan_search-object_id.
  DATA rs_object_id LIKE LINE OF rg_object_id.

  DATA ls_result TYPE zfan_result.
  DATA lt_result TYPE TABLE OF zfan_result.

  DATA:
    lr_query_service TYPE REF TO cl_crm_bol_dquery_service,
    lr_query         TYPE REF TO if_bol_bo_col,
    lr_query_select  TYPE REF TO if_bol_bo_col,
    lr_msg_srv       TYPE REF TO cl_bsp_wd_message_service,
    lr_query_node    TYPE REF TO cl_bsp_wd_context_node,
*    lr_result_node   TYPE REF TO cl_bsp_wd_context_node,
    lr_param         TYPE REF TO if_bol_bo_property_access,
    lr_iterator      TYPE REF TO if_bol_bo_col_iterator,
    lr_ref_any       TYPE REF TO data,
    lr_value_node    TYPE REF TO cl_bsp_wd_value_node,
    ls_selection     TYPE genilt_selection_parameter,
    lt_params        TYPE genilt_selection_parameter_tab,
    lv_max_hits      TYPE int4,
    lv_size          TYPE int4,
    lv_string        TYPE string.

* get context nodes
  lr_query_node = typed_context->search.
*  lr_result_node = typed_context->result.

* get query service
  lr_query_service ?= lr_query_node->collection_wrapper->get_current( ).

* get MAX_HITS
  lr_query_service->get_property_as_value( EXPORTING iv_attr_name = 'MAX_HITS'
                                           IMPORTING ev_result    = lv_max_hits ).

* get select option parameter value
  lr_query_select ?= lr_query_service->get_selection_params( ).
  lr_iterator   = lr_query_select->get_iterator( ).
  lr_param      = lr_iterator->get_first( ).
  WHILE lr_param IS BOUND.
    lr_param->get_properties( IMPORTING es_attributes = ls_selection ).
    APPEND ls_selection TO lt_params.
    lr_param = lr_iterator->get_next( ).
  ENDWHILE.

***页面查询参数转SQL查询条件
  LOOP AT lt_params INTO ls_selection WHERE low IS NOT INITIAL.
    CASE ls_selection-attr_name.
      WHEN 'OBJECT_ID'.
        rs_object_id-low    = ls_selection-low.
        rs_object_id-sign   = ls_selection-sign.
        rs_object_id-option = ls_selection-option.
        rs_object_id-high   = ls_selection-high.
        APPEND rs_object_id TO rg_object_id.
*      WHEN 'XXX'.
*        rs_XXX-low    = ls_selection-low.
*        rs_XXX-sign   = ls_selection-sign.
*        rs_XXX-option = ls_selection-option.
*        rs_XXX-high   = ls_selection-high.
*        APPEND rs_XXX TO rg_XXX.
    ENDCASE.
  ENDLOOP.

***SQL查询
*  SELECT *
*    UP TO lv_max_hits ROWS
*    INTO TABLE lt_result
*    FROM xxx
*    WHERE object_id IN rg_object_id.

  ls_result-object_id = '1234567890'.
  ls_result-partner = '2345678901'.
  APPEND ls_result TO lt_result.
  ls_result-object_id = '3456789012'.
  ls_result-partner = '4567890123'.
  APPEND ls_result TO lt_result.

  me->typed_context->result->collection_wrapper->clear_collection( ).

  LOOP AT lt_result INTO ls_result.

    GET REFERENCE OF ls_result INTO lr_ref_any.

    CREATE OBJECT lr_value_node
      TYPE
      cl_bsp_wd_value_node
      EXPORTING
        iv_data_ref = lr_ref_any.

    me->typed_context->result->collection_wrapper->add( lr_value_node ).

  ENDLOOP.

ENDMETHOD.
ENDCLASS.

sear
4000
ch.htm

<%@page language="abap" %>
<%@extension name="thtmlb" prefix="thtmlb" %>
<%@extension name="chtmlb" prefix="chtmlb" %>
<%@extension name="bsp" prefix="bsp" %>
<%-- <chtmlb:config mode = "RUNTIME"
     xml  = "<%= controller->configuration_descr->get_config_data( ) %>" />--%>
<thtmlb:searchArea>
  <thtmlb:searchTagArea>
    <thtmlb:advancedSearch id                = "advs0"
                           fieldMetadata     = "<%= controller->GET_DQUERY_DEFINITIONS( ) %>"
                           header            = "<%= SEARCH->get_param_struct_name( ) %>"
                           fieldNames        = "<%= controller->GET_POSSIBLE_FIELDS( ) %>"
                           values            = "//SEARCH/PARAMETERS"
                           maxHits           = "//SEARCH/MAX_HITS"
                           ajaxDeltaHandling = "false"
                           onEnter           = "SEARCH" />
  </thtmlb:searchTagArea>
  <thtmlb:searchButtonsArea>
    <thtmlb:button design  = "EMPHASIZED"
                   id      = "SEARCH_BTN"
                   onClick = "SEARCH"
                   text    = "<%= page->otr_trim( 'CRM_UIU_BP/SEARCHBUTTON' ) %>" />
    <thtmlb:button id      = "CLEAR_BTN"
                   onClick = "CLEAR"
                   text    = "<%= page->otr_trim( 'CRM_UIU_BP/CLEARBUTTON' ) %>" />
  </thtmlb:searchButtonsArea>
</thtmlb:searchArea>




result.htm
<%@page language="abap" %>
<%@extension name="thtmlb" prefix="thtmlb" %>
<%@extension name="chtmlb" prefix="chtmlb" %>
<%@extension name="bsp" prefix="bsp" %>
<thtmlb:toolbar buttons         = "<%= controller->IF_BSP_WD_DYN_BTN_CONTROL~GET_LOCAL_TOOLBAR_BUTTONS( ) %>"
                foreignUse      = "TRUE"
                id              = "tabtoolbar"
                maxButtonNumber = "<%= controller->IF_BSP_WD_DYN_BTN_CONTROL~GET_NO_OF_VISIBLE_TOOLBAR_BTNS( ) %>" />
<%
* Conversion Cnode SelectionMode to Tag
  data: lv_cellerator_selectionmode type string,
  lv_cellerator_editmode  type string,
  lv_cellerator_selectioncolumn type string.
  cl_thtmlb_util=>translate_selection_mode(
  exporting
  iv_selection_mode    = RESULT->SELECTION_MODE
  iv_all_rows_editable = space
  importing
  ev_selection_mode   = lv_cellerator_selectionmode
  ev_edit_mode        = lv_cellerator_editmode
  ev_selection_column = lv_cellerator_selectioncolumn ).
%>
<chtmlb:configCellerator downloadToExcel       = "TRUE"
                         editMode              = "<%= lv_cellerator_editmode %>"
                         id                    = "ConfCellTable"
                         onRowSelection        = "select"
                         personalizable        = "TRUE"
                         selectedRowIndex      = "<%= RESULT->SELECTED_INDEX %>"
                         selectedRowIndexTable = "<%= RESULT->SELECTION_TAB %>"
                         selectionColumn       = "<%= lv_cellerator_selectioncolumn %>"
                         selectionMode         = "<%= lv_cellerator_selectionmode %>"
                         table                 = "//RESULT/Table"
                         usage                 = "EDITLIST"
                         visibleFirstRow       = "<%= RESULT->VISIBLE_FIRST_ROW_INDEX %>"
                         visibleRowCount       = "6"
                         width                 = "100%"
                         xml                   = "<%= controller->configuration_descr->get_config_data( ) %>" />






CLASS ZL_ZFANXX_VIEWSET_IMPL IMPLEMENTATION.

* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Protected Method ZL_ZFANXX_VIEWSET_IMPL->EH_ONHIDESEARCHFIELDS
* +-------------------------------------------------------------------------------------------------+
* | [--->] HTMLB_EVENT                    TYPE REF TO CL_HTMLB_EVENT(optional)
* | [--->] HTMLB_EVENT_EX                 TYPE REF TO IF_HTMLB_DATA(optional)
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD eh_onhidesearchfields.
  gv_show_search_fields = abap_false.
ENDMETHOD.

* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Protected Method ZL_ZFANXX_VIEWSET_IMPL->EH_ONSHOWSEARCHFIELDS
* +-------------------------------------------------------------------------------------------------+
* | [--->] HTMLB_EVENT                    TYPE REF TO CL_HTMLB_EVENT(optional)
* | [--->] HTMLB_EVENT_EX                 TYPE REF TO IF_HTMLB_DATA(optional)
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD eh_onshowsearchfields.
  gv_show_search_fields = abap_true.
ENDMETHOD.
ENDCLASS.

viewset.htm

<%@page language="abap" %>
<%@extension name="thtmlb" prefix="thtmlb" %>
<%@extension name="chtmlb" prefix="chtmlb" %>
<%@extension name="bsp" prefix="bsp" %>
<chtmlb:pageType type="SEARCH" >
  <thtmlb:searchFrame showSearchFields   = "<%= controller->gv_show_search_fields %>"
                      onShowSearchFields = "SHOWSEARCHFIELDS"
                      onHideSearchFields = "HIDESEARCHFIELDS">
    <thtmlb:searchCriteriaFrame>
      <bsp:call comp_id = "<%= controller->GET_VIEWAREA_CONTENT_ID( 'a' ) %>"
                url     = "<%= controller->GET_VIEWAREA_CONTENT_URL( 'a' ) %>" />
    </thtmlb:searchCriteriaFrame>
    <thtmlb:searchResultFrame>
      <bsp:call comp_id = "<%= controller->GET_VIEWAREA_CONTENT_ID( 'b' ) %>"
                url     = "<%= controller->GET_VIEWAREA_CONTENT_URL( 'b' ) %>" />
    </thtmlb:searchResultFrame>
  </thtmlb:searchFrame>
</chtmlb:pageType>


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  SAP CRM UI Report 报表