2.7 Self_Defined Function for ALV
本实例展示创建自定义toolbar的function功能按钮,输入框。
1.创建Web Dynpro Component,声明使用ALV组件
2.在主键控制器创建上下文Function_Elements
将主主键控制器的Function_elments节点和ALV接口控制器的Function_Elements节点绑定
3.修改MAIN视图组件
Properties页签,声明使用ALV组件及接口控制器
Layout页签,选择ROOTUIELEMENTCONTAINER,右键创建ViewContainerUIElement,作为容器显示ALV;
Context页签
创建NODE_SFLIGHT节点,保存sflight表查询到数据;
创建映射Function_Elements,保存自定义function输入框输入carrid值;
Methods页签
实现WDDOINIT方法,查询数据,设置自定义Toolbar function;
代码实例:
method WDDOINIT . "上下文节点绑定内表数据 DATA:lo_node TYPE REF TO if_wd_context_node. DATA:lt_sflight TYPE wd_this->Elements_node_sflight. "查询数据 SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_sflight FROM sflight. "获取节点 lo_node = wd_context->get_child_node( 'NODE_SFLIGHT' ). "内表数据绑定到上下文节点 lo_node->bind_table( lt_sflight ). "实例化ALV组件 DATA:lo_cmp_usage type ref to if_wd_component_usage. lo_cmp_usage = wd_this->wd_cpuse_alv( ). if lo_cmp_usage->has_active_component( ) is initial. lo_cmp_usage->create_component( ). endif. "设置上下文节点数据绑定到ALV DATA:lo_INTERFACECONTROLLER TYPE REF TO IWCI_SALV_WD_TABLE . lo_INTERFACECONTROLLER = wd_this->wd_cpifc_alv( ). lo_interfacecontroller->set_data( * only_if_new_descr = " wdy_boolean r_node_data = lo_node " ref to if_wd_context_node ). "获取config model(get_model方法必须在set_data方法后) DATA lv_value TYPE ref to cl_salv_wd_config_table. lv_value = lo_interfacecontroller->get_model( ). "设置header DATA:lo_table_settings TYPE REF TO if_salv_wd_table_settings. DATA:lo_header TYPE REF TO cl_salv_wd_header. "获取表格设置类对象 "通过get_table_settings方法,获取if_savl_wd_table_settings对象 "lo_table_settings = lo_config->IF_SALV_WD_VIEW_SETTINGS~GET_TABLE_SETTINGS( ). "可以强转cl_salv_wd_config_table类对象,得到if_savl_wd_table_settings对象 lo_table_settings ?= lv_value. "设置alv table头 lo_header = lo_table_settings->GET_HEADER( ). lo_header->SET_TEXT( 'flight info' ). "创建功能按钮 DATA:lo_button TYPE REF TO cl_salv_wd_fe_button. "输入框 DATA:lo_input TYPE REF TO cl_salv_wd_fe_input_field. "分割线 DATA:lo_separator TYPE REF TO cl_salv_wd_fe_separator. "实例化对象,这里VALUE_ELEMENTNAME就是ALV接口控制器中绑定的FUNCTION_ELEMENTS CREATE OBJECT lo_input EXPORTING VALUE_ELEMENTNAME = 'CARRID'. CREATE OBJECT lo_button. CREATE OBJECT lo_separator. "设置button按钮属性 lo_button->SET_TEXT( 'searchs' ). lo_button->SET_IMAGE_SOURCE( 'ICON_FLIGHT' ). lo_button->SET_IMAGE_FIRST( abap_true ). lo_button->SET_TOOLTIP( 'search flight' ). "设置input框属性 lo_input->SET_LABEL_TEXT( 'Flight ID' ). DATA:lo_function_input TYPE REF TO cl_salv_wd_function. DATA:lo_function_sep TYPE REF TO cl_salv_wd_function. DATA:lo_function_button TYPE REF TO cl_salv_wd_function. "创建function对象,input框 lo_function_input = lv_value->IF_SALV_WD_FUNCTION_SETTINGS~CREATE_FUNCTION( id = 'INPUT' ). lo_function_input->SET_EDITOR( lo_input ). "创建分割符 lo_function_sep = lv_value->IF_SALV_WD_FUNCTION_SETTINGS~CREATE_FUNCTION( id = 'SEP' ). lo_function_sep->SET_EDITOR( lo_separator ). "创建button lo_function_button = lv_value->IF_SALV_WD_FUNCTION_SETTINGS~CREATE_FUNCTION( id = 'SEARCH' ). lo_function_button->SET_EDITOR( lo_button ). endmethod.
创建ONALVFUNCTION方法,实现ALV的on_function事件回调方法
代码实例:
method ONALVFUNCTION . CASE r_param->id. WHEN 'SEARCH'. "调用搜索功能 DATA:lo_node TYPE REF TO if_wd_context_node. DATA:lo_element TYPE REF TO if_wd_context_element. DATA:lt_sflight TYPE wd_this->Elements_node_sflight. DATA:lv_carrid TYPE sflight-carrid. DATA:ls_where TYPE C LENGTH 72. DATA:lt_where LIKE TABLE OF ls_where. "获取Function_Elements节点 lo_node = wd_context->get_child_node( 'FUNCTION_ELEMENTS' ). lo_node->GET_ATTRIBUTE( EXPORTING name = 'CARRID' IMPORTING value = lv_carrid ). IF lv_carrid IS NOT INITIAL. ls_where = 'CARRID = ' && '''' && lv_carrid && ''''. APPEND ls_where TO lt_where. "查询数据 SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_sflight FROM sflight WHERE (lt_where). "获取节点 lo_node = wd_context->get_child_node( 'NODE_SFLIGHT' ). "内表数据绑定到上下文节点 lo_node->bind_table( lt_sflight ). ENDIF. WHEN OTHERS. ENDCASE. endmethod.
4.设置Window窗口组件
5.创建Web Dynpro Application,运行测试