一个简单的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
result.htm
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
首先,你需要建一些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>
相关文章推荐
- GUI - Web前端开发框架
- 评价ui设计作品好坏的八个标准(界面/交互设计研究)
- Jquery ui datepicker设置日期范围,如只能隔3天【实现代码】
- 为Yahoo! UI Extensions Grid增加内置的可编辑器
- Cocos2d-x UI开发之文本类使用实例
- 谈谈对jquery ui tabs 的理解
- 在IE 浏览器中使用 jquery的fadeIn() 效果 英文字符字体加粗
- UI Events 用户界面事件
- jquery UI Datepicker时间控件的使用方法(基础版)
- Hallo.js基于jQuery UI所见即所得的Web编辑器
- 基于jQuery UI CSS Framework开发Widget的经验
- jquery ui 1.7 ui.tabs 动态添加与关闭(按钮关闭+双击关闭)
- jquery UI Datepicker时间控件的使用及问题解决
- jQuery UI设置固定日期选择特效代码分享
- Jquery ajax 同步阻塞引起的UI线程阻塞问题
- jQuery UI的Dialog无法提交问题的解决方法
- jQuery ui实现动感的圆角渐变网站导航菜单效果代码
- jquery UI Datepicker时间控件的使用方法(终结版)
- jquery UI Datepicker时间控件的使用方法(加强版)
- 关于jQuery UI 使用心得及技巧