• WDAVIEW视图切换


    本文转载:https://www.cnblogs.com/ricoo/p/10271919.html

    本文承接于:https://www.cnblogs.com/seven1314pp/p/15958214.html 之后

    这一部分介绍同一窗口下不同视图之间的链接跳转。

    前提:完成上一步骤MAIN视图ALV显示。

    1.效果展示

     点击ALV物料下划线链接,页面跳转到物料明细页面。

    2.实现过程

     基于上一步骤在MAIN页面显示ALV物料信息,通过ALV物料下划链接跳转到物料明细页面。

     物料明细页面主要有两部分:基本信息、工厂物料明细。

     这两部分信息需要增加两个节点(ZSMM_DETAIL-基本信息 ZSMM_ITEM-工厂物料明细)、一个ALV组件(工厂物料明细)。

     2.1Context增加节点

     2.1.1进入Componentcontroller组件控制页,增加节点ZSMM_DETAIL(基本信息),记录数据有且只有一条,则Cardinality=1..1 Selection=0..1

     

     增加节点ZSMM_ITEM(工厂物料明细),记录数据可能有多条,则Cardinality = 0..n selection = 0..1

     

     2.1.2进入视图VIEW-MAIN同上新增节点

     

     2.2增加ALV组件

     

     进入Componentcontroller增加ALV组件ALV_DETAIL,如下图所示:

     

     窗口WINDOWS增加ALV组件

     

     2.3新增视图MATERIAL_DETAIL

     属性页增加组件ALV_DETAIL,显示工厂物料明细。

     

     布局页面如下:基本信息数据绑定的是节点ZSMM_DETAIL

     

     

     

     Context节点设置(同2.1部分的操作)

     

     Attributes属性页

     

     Actions动作事件页

     

     Methods方法页

     

     2.4VIEW视图之间跳转

     设置VIEW视图MAIN、MATERIAL_DETAIL之间的跳转:MAIN视图通过ALV下划链接跳转到MATERIAL_DETAIL视图,MATERIAL_DETAIL视图返回按钮触发后返回到MAIN视图

     2.4.1设置MAIN视图:Inbound Plugs/Outbound Plugs

     FROM_DETAIL来自MATERIAL_DETAIL视图的事件

     

     TO_DETAIL输出参数到MATERIAL_DETAIL视图,当前参数为空。

     

     2.4.2设置MATERIAL_DETAIL视图:Inbound Plugs/Outbound Plugs

     

     

     2.5窗口WINDOWS嵌套视图

     在一个窗口中实现视图之间的跳转。

     

     2.6代码部分

     2.6.1视图MAIN方法METHODS:ON_LINK

     视图MAIN中ALV行项目物料MATNR下划线链接触发事件ON_LINK

     

     代码部分:

    复制代码
    method on_link .
      "定义
      data:
        lo_nd_detail type ref to if_wd_context_node,      "节点
        lo_el_detail type ref to if_wd_context_element,   "元素
        ls_detail    type wd_this->element_zsmm_detail. "结构
    
    **Main获取ALV选择行记录
      data:
        lo_nd_alv type ref to if_wd_context_node,       "节点
        lt_alv    type wd_this->elements_zsmm_material, "表体
        ls_alv    type wd_this->element_zsmm_material.  "结构
    
      "获取节点
      lo_nd_alv = wd_context->get_child_node( name = wd_this->wdctx_zsmm_material ).
      "获取内表
      lo_nd_alv->get_static_attributes_table( importing table = lt_alv ).
      "获取行记录
      if lt_alv[] is not initial.
        read table lt_alv index r_param->index into ls_alv.
      endif.
    
    **Material_detail基本信息
      "获取节点 context-zsmm_material
      lo_nd_detail = wd_context->get_child_node( name = wd_this->wdctx_zsmm_detail ).
      "获取结构记录
      ls_detail = ls_alv.
    
      "获取节点元素清单
      lo_el_detail = lo_nd_detail->get_element( ).
      "节点元素中的属性赋值
      lo_el_detail->set_static_attributes(  static_attributes = ls_detail ).
    
    **Material_detail物料明细
      data:
        lo_nd_item type ref to if_wd_context_node,      "节点
        lo_el_item type ref to if_wd_context_element,   "元素
        lt_item    type wd_this->elements_zsmm_item,    "表体
        ls_item    type wd_this->element_zsmm_item.     "结构
    
      "获取节点zsmm_item
      lo_nd_item = wd_context->get_child_node( name = wd_this->wdctx_zsmm_item ).
    
      select *
        into corresponding fields of table lt_item
        from marc
       where matnr = ls_alv-matnr.
    
      "Data binding 节点ZSMM_ITEM绑定数据IT_ITEM
      lo_nd_item->bind_table(
        new_items            = lt_item      "数据表
        set_initial_elements = abap_true    "abap_true原始记录清空并新增记录
        ).
    
      "跳转到MATERIAL_DETAIL物料明细视图
      wd_this->fire_to_detail_plg( ).
    endmethod.
    复制代码

     备注:fire_to_detail_plg( )是在MAIN视图中设置Outbound Plugs-to_detail生成的跳转方法。

     2.6.2视图MATERIAL_DETAIL方法:ONACTIONBT_BACK

     视图MATERIAL_DETAIL中按钮ONACTIONBT_BACK触发事件,返回MAIN视图

     

     代码部分:

    method ONACTIONBT_BACK .
      "返回MAIN视图
      wd_this->fire_to_main_plg( ).
    endmethod.

     备注:fire_to_main_plg( )是在MATERIAL_DETAIL视图中Outbound Plugs-TO_MAIN生成的跳转方法。

     2.6.3初始化ALV组件:ALV_ITEM

     在视图MATERIAL_DETAIL中增加了ALV组件,显示工厂物料明细。需对ALV进行初始化。

     进入Componentcontroller界面METHODS方法:INIT_ALV_DETAIL

     代码部分:

    复制代码
    method INIT_ALV_DETAIL .
      data:
        lo_nd_item     type ref to if_wd_context_node,
        lo_cmp_alv     type ref to if_wd_component_usage,
        lo_cmpif_alv   type ref to iwci_salv_wd_table,
        lo_config      type ref to cl_salv_wd_config_table.
    
    * alv component usage
      lo_cmp_alv = wd_this->wd_cpuse_alv_detail( ).     "Properties->component use
      if lo_cmp_alv->has_active_component( ) is initial.
        lo_cmp_alv->create_component( ).
      endif.
    
    * set data node
      lo_nd_item    = wd_context->get_child_node( name = wd_this->wdctx_zsmm_item ). "context-node
      lo_cmpif_alv  = wd_this->wd_cpifc_alv_detail( ).  "Properties->component use
      lo_cmpif_alv->set_data( lo_nd_item ).
    
    * configure alv
      lo_config = lo_cmpif_alv->get_model( ).
    
    * table settings
      lo_config->if_salv_wd_table_settings~set_fixed_table_layout( value = abap_true ).
      lo_config->if_salv_wd_table_settings~set_visible_row_count( 5 ).
      lo_config->if_salv_wd_table_settings~set_width( '100%' ).
      lo_config->if_salv_wd_table_settings~set_footer_visible( if_salv_wd_c_table_settings=>footer_visible_on_demand ).
      lo_config->if_salv_wd_table_settings~set_scrollable_col_count( 3 ).
      lo_config->if_salv_wd_table_settings~set_read_only( abap_false ).
      lo_config->if_salv_wd_table_settings~set_data_check( if_salv_wd_c_table_settings=>data_check_on_cell_event ).
    
      lo_config->if_salv_wd_std_functions~set_view_list_allowed( abap_false ).
      lo_config->if_salv_wd_std_functions~set_pdf_allowed( abap_false ).
      lo_config->if_salv_wd_std_functions~set_edit_check_available( abap_false ).
      lo_config->if_salv_wd_std_functions~set_edit_insert_row_allowed( abap_false ).
      lo_config->if_salv_wd_std_functions~set_edit_append_row_allowed( abap_false ).
      lo_config->if_salv_wd_std_functions~set_edit_delete_row_allowed( abap_false ).
    
    * table toolbar
    *  data:
    *    lo_fun_add  type ref to cl_salv_wd_function,
    *    lo_btn_add  type ref to cl_salv_wd_fe_button,
    *    lo_fun_chg  type ref to cl_salv_wd_function,
    *    lo_btn_chg  type ref to cl_salv_wd_fe_button,
    *    lo_fun_del  type ref to cl_salv_wd_function,
    *    lo_btn_del  type ref to cl_salv_wd_fe_button,
    *    lo_fun_save type ref to cl_salv_wd_function,
    *    lo_btn_save type ref to cl_salv_wd_fe_button.
    *
    *  lo_fun_add = lo_config->if_salv_wd_function_settings~create_function( 'BT_ADD' ).
    *  create object lo_btn_add.
    *  lo_btn_add->set_text( wd_assist->get_text( key = 'B01' ) ).
    *  lo_btn_add->set_image_source( value = '~Icon/AddRow' ).
    *  lo_fun_add->set_editor( lo_btn_add ).
    *
    *  lo_fun_chg = lo_config->if_salv_wd_function_settings~create_function( 'BT_CHG' ).
    *  create object lo_btn_chg.
    *  lo_btn_chg->set_text( wd_assist->get_text( key = 'B02' ) ).
    *  lo_btn_chg->set_image_source( value = '~Icon/EditChangedItem' ).
    *  lo_fun_chg->set_editor( lo_btn_chg ).
    *
    *  lo_fun_del = lo_config->if_salv_wd_function_settings~create_function( 'BT_DEL' ).
    *  create object lo_btn_del.
    *  lo_btn_del->set_text( wd_assist->get_text( key = 'B03' ) ).
    *  lo_btn_del->set_image_source( value = '~Icon/DeletedItem' ).
    *  lo_fun_del->set_editor( lo_btn_del ).
    *
    *  lo_fun_save = lo_config->if_salv_wd_function_settings~create_function( 'BT_SAVE' ).
    *  create object lo_btn_save.
    *  lo_btn_save->set_text( wd_assist->get_text( key = 'B04' ) ).
    *  lo_btn_save->set_image_source( value = '~Icon/Save' ).
    *  lo_fun_save->set_editor( lo_btn_save ).
    
    * table columns and column header
      data:
        lt_columns         type salv_wd_t_column_ref,
        ls_column          type salv_wd_s_column_ref,
        lo_column          type ref to cl_salv_wd_column,
        lo_header          type ref to cl_salv_wd_column_header,
        lo_dropdown_by_key type ref to cl_salv_wd_uie_dropdown_by_key,
        lo_input_field     type ref to cl_salv_wd_uie_input_field,
        lo_text_view       type ref to cl_salv_wd_uie_text_view,
        lo_checkbox        type ref to cl_salv_wd_uie_checkbox,
        lr_link            type ref to cl_salv_wd_uie_link_to_action,
        lv_field_name      type string,
        lv_length          type i.
    
    
      lt_columns = lo_config->if_salv_wd_column_settings~get_columns( ).
    
      loop at lt_columns into ls_column.
        lo_column = ls_column-r_column.
        lo_header = lo_column->get_header( ).
        lo_header->set_ddic_binding_field( if_salv_wd_c_column_settings=>ddic_bind_none ).
    
        case ls_column-id.
          when 'MATNR'.
            "lo_column->set_width( value = '18' ).
            lo_header->set_text( value = wd_assist->get_text( key = 'A01' )  ).
            create object lo_input_field exporting value_fieldname = ls_column-id.    
            lo_input_field->set_read_only_fieldname( value = 'FG_READ' ).
            lo_column->set_cell_editor( lo_input_field ).
      
          when 'WERKS'.
            "lo_column->set_width( value = '4' ).
            lo_header->set_text( value = wd_assist->get_text( key = 'A10' )  ).
            create object lo_input_field
              exporting
                value_fieldname = ls_column-id.
            lo_input_field->set_read_only_fieldname( value = 'FG_READ' ).
            lo_column->set_cell_editor( lo_input_field ).
    
          when 'EKGRP'.
            "lo_column->set_width( value = '3' ).
            lo_header->set_text( value = wd_assist->get_text( key = 'A11' )  ).
            create object lo_input_field
              exporting
                value_fieldname = ls_column-id.
            lo_input_field->set_read_only_fieldname( value = 'FG_READ' ).
            lo_column->set_cell_editor( lo_input_field ).
    
          when others.
            lo_column->set_visible( value = cl_wd_uielement=>e_visible-blank ).
    
        endcase.
    
      endloop.
    endmethod.
    复制代码

     上述操作基本完成。

     2.7测试

     

     

     

    3.关注点

     ALV组件:组件尽量不要重复使用,多视图容易冲突。

     Context节点:节点元素属性根据用途区分不同的业务场景。

     关系:

      Windows->view->container->select_options/Table->Component use

      Windows->view->Inbound/Outbound Plugs

     语法关注:

    复制代码
    lo_nd_detail type ref to if_wd_context_node,       "节点
    lo_el_detail type ref to if_wd_context_element,    "元素
    lt_detail  type wd_this->element_zsmm_detail.    "内表
    ls_detail    type wd_this->element_zsmm_detail.   "结构
    
    "获取节点ZSMM_DETAIL
    lo_nd_detail = wd_context->get_child_node( name = wd_this->wdctx_zsmm_detail ).
    "获取节点内表数据
    lo_nd_alv->get_static_attributes_table( importing table = lt_detail ).
    "获取行记录
    read table lt_detail index r_param->index into ls_detail 
    "获取节点元素
    lo_el_detail = lo_nd_detail->get_element( ).
    "节点元素属性赋值
    lo_el_detail->set_static_attributes( static_attributes = ls_detail ).
    "节点数据绑定
    lo_nd_detail->bind_table(  new_items = lt_detail  set_initial_elements = abap_true ).
    复制代码

    下划线点击功能需要在 INIT_ALV 实现如下功能:

  • 相关阅读:
    document.getElementById()使用方法
    Delphi XE7 发布时间
    JavaScript动态更改页面元素
    TCP/IP-协议族----17、应用层简单
    查看员工信息每个部门的最低工资
    VB6.0“挑衅”.NET!
    MapReduce计数器
    Linux学习记录--命名管道通信
    cocos2d-x V3.0 呼叫加速度计 Acceleration
    Linux Kernel(Android) 加密算法汇总(四)-应用程序调用OpenSSL加密演算法
  • 原文地址:https://www.cnblogs.com/seven1314pp/p/15974845.html
Copyright © 2020-2023  润新知