写一个动态查询报表,有很多种快速的方法,比如组件里面的向导形式,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.
search.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>