主要是梳理下WebDynpro For ABAP开发过程:

1.创建WebDynpro组件

2.创建WebDynpro应用

1.创建WebDynpro组件

 1.1创建

 路径:选择Package-->创建-->Web Dynpro-->WebDynpro组件(接口)

  

 

 1.2WebDynpro组件

  已使用的组件 中增加ALV 及Select Options组件,然后保存。

 

 标准组件:

 SALV_WD_TABLE      显示ALV数据表

 WDR_SELECT_OPTIONS    区间查询条件

 POWL_UI_COMP       POWL个人对象工作清单

 1.3 CompentController

 Properties标签页中创建控制范围

 

 

 

 创建数据结构:ZSMM1801_MATERIAL

 

 Context创建Node

 

 

 Cardinality参数:

 The following values are possible:

  • 1..1 : The node contains exactly one instance that must always be instantiated
  • 0..1 : The node contains exactly one instance that does not have to be instantiated
  • 1..n : The node can contain multiple instances and at least one of them must be instantiated
  • 0..n : The node can contain multiple instances and none of them must be instantiated

 The default is 1..1.

 Selection参数:

 The following values are possible:

  1..1 : Exactly one instance (table row) must be selected. It is automatically the lead selection.

  0..1 : No more than one instance (table row) can be selected. It is automatically the lead selection.

  1..n : Any number of instances can be selected, but at least one must be selected. One of them is the lead selection.

  0..n : Any number of instances can be selected, but none must be selected. One of the selected ones is the lead selection.

 The default is 0..1.

 

 上述Context设置完成,进入Attributes之前需要先创建辅助类ZCL_MM_SEARCH_MATERIAL:

 事务代码:SE24

 

 

 

 

 

 

 类保存并激活,然后维护WebDynpro组件辅助类:

 

 转到ComponentController 维护Attributes标签页。

 

 维护Methods标签页

 

 1.4VIEW设置

 打开MAIN主视图

  设置ROOTUIELEMENTCONTAINER:

  A.增加两个PANEL控件:TRY_SEL 查询条件  TRY_ALV 显示ALV

  B.TRY_SEL增加控件ViewContainerUIElement(VC_SEL)、控件ButtonRow(BTNR_SEARCH)、控件Button(BTN_SEARCH)

  C.TRY_ALV增加控件TransparentContainer(TC_DISPLAY)、控件ViewContainerUIElement(VC_ALV)

  设置完成后界面如下:

  

  上图中文本资源的设置可用两种方式:

  事务代码:SE63

  事务代码:SOTR_EDIT

  

  

  保存后维护相关控件的文本,如下所示:

  

  控件BTN_SEARCH图标维护:

  

  控件BTN_SEARCH按钮事件

  

  

  维护Context标签页:

  

  维护Attributes标签页如下所示:

  

  维护Action标签页

  

  维护Methods标签页

  

  VIEW视图设置完成,代码部分后面具体讲述。

 1.5Windows

  维护Windows窗口,选择VC_SEL右键选择嵌套视图

  

  

  Select options维护完成后,继续维护VC_ALV嵌套视图。

  

  维护完成后如下图所示:

  

  其他标签页设置如下:

  

  

  

  

  上述步骤完成后,整个WebDynpro组件相关设置就结束了,下一步进入代码设置环节。

 1.6代码部分

  注意事件执行先后顺序:WDA-WebDynpro事件执行先后顺序

  ComponentController维护Methods相关方法:

  

  组件初始化WDDOINIT方法:

  1. method wddoinit .
  2. free: wd_this->go_sel.
  3. clear: wd_this->gv_message.
  4.  
  5. "初始Select-options
  6. wd_this->init_sel( ).
  7. "初始ALV
  8. wd_this->init_alv( ).
  9.  
  10. endmethod.

  INIT_ALV方法:

  1. method init_alv .
  2. data:
  3. lo_nd_zsmm_mat type ref to if_wd_context_node,
  4. lo_cmp_alv type ref to if_wd_component_usage,
  5. lo_cmpif_alv type ref to iwci_salv_wd_table,
  6. lo_config type ref to cl_salv_wd_config_table.
  7.  
  8. * alv component usage
  9. lo_cmp_alv = wd_this->wd_cpuse_alv_mat( ).
  10. if lo_cmp_alv->has_active_component( ) is initial.
  11. lo_cmp_alv->create_component( ).
  12. endif.
  13.  
  14. * set data node
  15. lo_nd_zsmm_mat = wd_context->get_child_node( name = wd_this->wdctx_zsmm_material ).
  16. lo_cmpif_alv = wd_this->wd_cpifc_alv_mat( ).
  17. lo_cmpif_alv->set_data( lo_nd_zsmm_mat ).
  18.  
  19. * configure alv
  20. lo_config = lo_cmpif_alv->get_model( ).
  21.  
  22. * table settings
  23. lo_config->if_salv_wd_table_settings~set_fixed_table_layout( value = abap_true ).
  24. lo_config->if_salv_wd_table_settings~set_visible_row_count( ).
  25. lo_config->if_salv_wd_table_settings~set_footer_visible( if_salv_wd_c_table_settings=>footer_visible_on_demand ).
  26. lo_config->if_salv_wd_table_settings~set_scrollable_col_count( ).
  27. lo_config->if_salv_wd_table_settings~set_read_only( abap_false ).
  28. lo_config->if_salv_wd_table_settings~set_data_check( if_salv_wd_c_table_settings=>data_check_on_cell_event ).
  29.  
  30. lo_config->if_salv_wd_std_functions~set_view_list_allowed( abap_false ).
  31. lo_config->if_salv_wd_std_functions~set_pdf_allowed( abap_false ).
  32. lo_config->if_salv_wd_std_functions~set_edit_check_available( abap_false ).
  33. lo_config->if_salv_wd_std_functions~set_edit_insert_row_allowed( abap_false ).
  34. lo_config->if_salv_wd_std_functions~set_edit_append_row_allowed( abap_false ).
  35. lo_config->if_salv_wd_std_functions~set_edit_delete_row_allowed( abap_false ).
  36.  
  37. ** table toolbar
  38. * data:
  39. * lo_fun_add type ref to cl_salv_wd_function,
  40. * lo_btn_add type ref to cl_salv_wd_fe_button,
  41. * lo_fun_new type ref to cl_salv_wd_function,
  42. * lo_btn_new type ref to cl_salv_wd_fe_button,
  43. * lo_fun_chg type ref to cl_salv_wd_function,
  44. * lo_btn_chg type ref to cl_salv_wd_fe_button,
  45. * lo_fun_invite type ref to cl_salv_wd_function,
  46. * lo_btn_invite type ref to cl_salv_wd_fe_button,
  47. * lo_fun_save type ref to cl_salv_wd_function,
  48. * lo_btn_save type ref to cl_salv_wd_fe_button.
  49. *
  50. * lo_fun_add = lo_config->if_salv_wd_function_settings~create_function( 'ADD' ).
  51. * create object lo_btn_add.
  52. * lo_btn_add->set_text( wd_assist->get_text( key = 'ADD' ) ).
  53. * lo_fun_add->set_editor( lo_btn_add ).
  54. *
  55. * lo_fun_new = lo_config->if_salv_wd_function_settings~create_function( 'NEW' ).
  56. * create object lo_btn_new.
  57. * lo_btn_new->set_text( wd_assist->get_text( key = 'NEW' ) ).
  58. * lo_fun_new->set_editor( lo_btn_new ).
  59. *
  60. * lo_fun_chg = lo_config->if_salv_wd_function_settings~create_function( 'CHG' ).
  61. * create object lo_btn_chg.
  62. * lo_btn_chg->set_text( wd_assist->get_text( key = 'CHG' ) ).
  63. * lo_fun_chg->set_editor( lo_btn_chg ).
  64. *
  65. * lo_fun_invite = lo_config->if_salv_wd_function_settings~create_function( 'INVITE' ).
  66. * create object lo_btn_invite.
  67. * lo_btn_invite->set_text( wd_assist->get_text( key = 'INV' ) ).
  68. * lo_fun_invite->set_editor( lo_btn_invite ).
  69. *
  70. * lo_fun_save = lo_config->if_salv_wd_function_settings~create_function( 'SAVE' ).
  71. * create object lo_btn_save.
  72. * lo_btn_save->set_text( wd_assist->get_text( key = 'SAV' ) ).
  73. * lo_fun_save->set_editor( lo_btn_save ).
  74.  
  75. * table columns and column header
  76. data:
  77. lt_columns type salv_wd_t_column_ref,
  78. ls_column type salv_wd_s_column_ref,
  79. lo_column type ref to cl_salv_wd_column,
  80. lo_header type ref to cl_salv_wd_column_header,
  81. lo_dropdown_by_key type ref to cl_salv_wd_uie_dropdown_by_key,
  82. lo_input_field type ref to cl_salv_wd_uie_input_field,
  83. lo_text_view type ref to cl_salv_wd_uie_text_view,
  84. lv_field_name type string,
  85. lv_length type i.
  86.  
  87. lt_columns = lo_config->if_salv_wd_column_settings~get_columns( ).
  88.   
     
     "ALV输出字段
  89. loop at lt_columns into ls_column.
  90. lo_column = ls_column-r_column.
  91. lo_header = lo_column->get_header( ).
  92. lo_header->set_ddic_binding_field( if_salv_wd_c_column_settings=>ddic_bind_none ).
  93.  
  94. case ls_column-id.
  95. when 'MATNR'.
  96. "lo_column->set_width( value = '18' ).
  97. lo_header->set_text( value = wd_assist->get_text( key = 'A01' ) ).
  98.  
  99. when 'ERNAM'.
  100. "lo_column->set_width( value = '12' ).
  101. lo_header->set_text( value = wd_assist->get_text( key = 'A02' ) ).
  102.  
  103. when 'ERSDA'.
  104. "lo_column->set_width( value = '8' ).
  105. lo_header->set_text( value = wd_assist->get_text( key = 'A03' ) ).
  106.  
  107. when 'MTART'.
  108. "lo_column->set_width( value = '4' ).
  109. lo_header->set_text( value = wd_assist->get_text( key = 'A04' ) ).
  110.  
  111. when 'MBRSH'.
  112. "lo_column->set_width( value = '1' ).
  113. lo_header->set_text( value = wd_assist->get_text( key = 'A05' ) ).
  114.  
  115. when 'MATKL'.
  116. "lo_column->set_width( value = '9' ).
  117. lo_header->set_text( value = wd_assist->get_text( key = 'A06' ) ).
  118.  
  119. when 'MEINS'.
  120. "lo_column->set_width( value = '3' ).
  121. lo_header->set_text( value = wd_assist->get_text( key = 'A07' ) ).
  122.  
  123. when 'GROES'.
  124. "lo_column->set_width( value = '32' ).
  125. lo_header->set_text( value = wd_assist->get_text( key = 'A08' ) ).
  126.  
  127. when 'SPART'.
  128. "lo_column->set_width( value = '2' ).
  129. lo_header->set_text( value = wd_assist->get_text( key = 'A09' ) ).
  130.  
  131. when 'WERKS'.
  132. "lo_column->set_width( value = '4' ).
  133. lo_header->set_text( value = wd_assist->get_text( key = 'A10' ) ).
  134.  
  135. when 'EKGRP'.
  136. "lo_column->set_width( value = '3' ).
  137. lo_header->set_text( value = wd_assist->get_text( key = 'A11' ) ).
  138.  
  139. when others.
  140. lo_column->set_visible( value = cl_wd_uielement=>e_visible-blank ).
  141.  
  142. endcase.
  143.  
  144. endloop.
  145. endmethod.

  设置文本元素(A01-->A11):

  

  

  

  INIT_SEL方法:

  1. method init_sel .
  2. data:
  3. lo_cmp_selopt type ref to if_wd_component_usage,
  4. lo_cmpif_selopt type ref to iwci_wdr_select_options.
  5.  
  6. * alv component usage
  7. lo_cmp_selopt = wd_this->wd_cpuse_select_opt( ).
  8. if lo_cmp_selopt->has_active_component( ) is initial.
  9. lo_cmp_selopt->create_component( ).
  10. endif.
  11. lo_cmpif_selopt = wd_this->wd_cpifc_select_opt( ).
  12.  
  13. * sets the helper reference
  14. * wd_this->go_selopt = wd_this->wd_cpifc_cmp_sel_opt( ).
  15. wd_this->go_sel = lo_cmpif_selopt->init_selection_screen( ).
  16. call method wd_this->go_sel->set_global_options
  17. exporting
  18. i_display_btn_cancel = abap_false
  19. i_display_btn_check = abap_false
  20. i_display_btn_reset = abap_false
  21. i_display_btn_execute = abap_false.
  22.  
  23. data lo_field type ref to data.
  24.  
  25. define mcr_add_selopt.
  26. free lo_field.
  27. lo_field = wd_this->go_sel->create_range_table( & ).
  28. wd_this->go_sel->add_selection_field(
  29. i_id = &
  30. it_result = lo_field
  31. i_description = & ).
  32. end-of-definition.
  33.  
  34. define mcr_add_parameter_d.
  35. free lo_field.
  36. create data lo_field type (&).
  37. wd_this->go_sel->add_parameter_field(
  38. i_id = &
  39. i_value = lo_field
  40. i_description = &
  41. i_as_dropdown = abap_true
  42. it_value_set = & ).
  43. end-of-definition.
  44.  
  45. data: lv_text type string.
  46.  
  47. clear: lv_text.
  48. lv_text = wd_assist->get_text( key = 'S01' ).
  49. mcr_add_selopt 'BU_WERKS' 'WERKS_D' lv_text.
  50.  
  51. clear: lv_text.
  52. lv_text = wd_assist->get_text( key = 'S02' ).
  53. mcr_add_selopt 'BU_MATNR' 'MATNR' lv_text.
  54. endmethod.

  文本元素(S01,S02)设置方式同上。

  BT_SEARCH查询按钮方法:

  进入视图VIEW-MAIN,点击查询按钮,获取事件onAction:BT_SEARCH,双击事件。

  

  设置ONACTIONBT_SEARCH事件触发方法:wd_comp_controller->bt_search( ).

  

  注意:WD_COMP_CONTROLLER 是继承COMPONENTCONTROLLER的接口

  

  维护COMPONENTCONTROLLER的方法BT_SEARCH

  

  1. method bt_search .
  2. data:
  3. lo_data type ref to data,
  4. lt_sel_item type if_wd_select_options=>tt_selection_screen_item.
  5.  
  6. field-symbols:
  7. <fs_bu_werks> type table,
  8. <fs_bu_matnr> type table,
  9. <fs_sel_item> like line of lt_sel_item.
  10.  
  11. clear: wd_this->gv_message.
  12.  
  13. wd_this->go_sel->get_selection_screen_items(
  14. importing
  15. et_selection_screen_items = lt_sel_item ).
  16.  
  17. loop at lt_sel_item assigning <fs_sel_item>.
  18. case <fs_sel_item>-m_id.
  19. when 'BU_WERKS'.
  20. assign <fs_sel_item>-mt_range_table->* to <fs_bu_werks>.
  21. when 'BU_MATNR'.
  22. assign <fs_sel_item>-mt_range_table->* to <fs_bu_matnr>.
  23. endcase.
  24. endloop.
  25.  
  26. data lo_nd_zsmm_mat type ref to if_wd_context_node.
  27. data lt_zsmm_mat type wd_this->elements_zsmm_material.
  28. data ls_zsmm_mat type wd_this->element_zsmm_material.
  29.  
  30. lo_nd_zsmm_mat = wd_context->get_child_node( name = wd_this->wdctx_zsmm_material ).
  31.  
  32. data:
  33. lt_material type table of zsmm1801_material.
  34.  
  35. field-symbols:
  36. <fs_material> type zsmm1801_material.
  37.  
  38. select *
  39. into corresponding fields of table lt_material
  40. from mara as a
  41. inner join marc as b
  42. on a~matnr = b~matnr
  43. where a~matnr in <fs_bu_matnr>
  44. and b~werks in <fs_bu_werks>.
  45.  
  46. loop at lt_material assigning <fs_material>.
  47. move-corresponding <fs_material> to ls_zsmm_mat.
  48. append ls_zsmm_mat to lt_zsmm_mat.
  49. clear:ls_zsmm_mat.
  50. endloop.
  51.  
  52. "Data binding
  53. lo_nd_zsmm_mat->bind_table( new_items = lt_zsmm_mat set_initial_elements = abap_true ).
  54. endmethod.

  BT_ALV_FUN(ALV状态栏新增按钮—当前测试未设置,后续讲解)方法:

  上述代码完成后进行校验并激活。

2.创建WebDynpro应用程序

 2.1创建WebDynpro应用程序

 选择WebDynpro组件并创建WebDynpro应用程序:

 

 

 

 

 保存。

 2.2测试

 

 出现如上错误,应该是辅助类的继承问题,可以在COMPONENTCONTROLLER方法WDDOINIT中设置断点进行调试,看看在运行哪一步骤出错,然后针对问题进行处理。

 问题调整后再测试运行:

点击查询按钮:

至此,ALV的查询完成。

WDA-3-ALV查询的更多相关文章

  1. ABAP游标的使用

    在Oracle,SQLServer中游标的使用是经常的,所以在ABAP不懂是不行的......     1.声明游标 OPEN CURSOR [WITH HOLD] <c> FOR SEL ...

  2. WDA基础十六:ALV的颜色

    这里介绍三种类型的颜色:列的背景色,单元格的背景色,单元格文本的颜色. 1.给ALV结构添加颜色控制字段: 三个字段都是同一类型:WDY_UIE_LIBRARY_ENUM_TYPE COL_BACKG ...

  3. WDA基础十四:ALV字段属性配置表

    ALV配置表管理 一.字段属性配置表 对于可编辑的ALV不用这个,尽可能多的设置一些控制: 单元格类型:默认A,特殊选择 ZLYE_TYPE        E       A       1      ...

  4. WDA基础五:ALV组件的使用

    说明,因为ALV的功能比TABLE强大,所以在很多时候都习惯性的选择ALV显示. ALV是WDA的组件,封装好的,和SELECT OPTION一样.所以使用的方法一般就是:引入组件,初始化组件,数据绑 ...

  5. WDA基础十七:ALV不同行显示不同下拉

    1.给ALV结构添加VALUE SET字段. 2.初始化时将TYPE_SET字段设置为值范围. METHOD wddoinit . DATA: lo_node TYPE REF TO if_wd_co ...

  6. WDA 新SELECT OPTION

    感谢肖总的提示,不然还不知道wda的新select option... 使用前提:SE24类:CL_WDR_SELECT_OPTIONS_20 核对了多个版本,ERP系统版本要S4 1701往上,CR ...

  7. WDA基础二:界面,元素介绍

    1.ELEMENTS: BUTTON  按钮 CAPTION  标题 DROPDOWN_BY_IDX   带序号的下拉 DROPDOWN_BY_KEY   带键值的下拉 FILE_UPLOAD    ...

  8. OO方式下,ALV TREE和ALV GRID的不同之处

    作为大部分报表程序的基础,ALV GRID差不多是每个ABAP开发者必须了解和掌握的内容,因此网上也不乏相关资料,而ALV TREE的应用相对较少,中文资料也就比较少见了.实际上,ALV TREE和A ...

  9. YHLMR009 交货单查询

    *********************************************************************** * Title : YHLMR009 * * Appli ...

  10. ALV详解:OO ALV

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

随机推荐

  1. rsync数据备份

    scp远程复制 scp是 secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令. 命令格式: scp local_file remote_username@ ...

  2. [UE4]Slot

    一.Slot是容器中子控件的一个属性,因此每个子控件的Slot属性值都可以不一样. 二.不同容器提供的Slot属性都不一样 三.Canvas Panel提供的Slot Anchors预设16种常见的样 ...

  3. echart-X轴标签文字方向

    1. rotate斜体: axisLabel:{interval:0,rotate:45, margin:2, textStyle:{ color:"#222" }2. forma ...

  4. 自适应页面设计: Viewport控制, media query和相对单位

    viewport,视口,就是对用户的可见部分, 大小因设备而不同.H5引入. * 没有它: 整体缩放 ( 老网页是固定的大小,浏览器在手机上只是简单地缩放整个页面,所以用户体验很差) * 有了它: 浏 ...

  5. Java 5- Java 修饰符

    Java 修饰符 Java语言提供了很多修饰符,主要分为以下两类: 访问修饰符 非访问修饰符 修饰符用来定义类.方法或者变量,通常放在语句的最前端.我们通过下面的例子来说明: public class ...

  6. Python之网络编程(Socket)

    1.网络通信原理与互联网协议 详见:https://www.cnblogs.com/JackLi07/p/9218039.html 2.socket层 以上是tcp/ip五层协议的结构图,我们没有看到 ...

  7. SVG 学习<五> SVG动画

    目录 SVG 学习<一>基础图形及线段 SVG 学习<二>进阶 SVG世界,视野,视窗 stroke属性 svg分组 SVG 学习<三>渐变 SVG 学习<四 ...

  8. 【Git使用】sourcetree跳过注册的方法(转)

    当前只有Win的版本,Mac自行百度(笑) 很多人用git命令行不熟练,那么可以尝试使用sourcetree进行操作. 然鹅~~sourcetree又一个比较严肃的问题就是,很多人不会跳过注册或者操作 ...

  9. 【Selenium-WebDriver自学】Selenium-IDE安装和使用(一)

    ==================================================================================================== ...

  10. HBase中无法使用backspace删除

    转载自:Hbase命令行无法删除的问题 在HBase的shell命令行界面输入错误项按"退格键"删除,却怎么也删除不了: 解决办法: 第一步,修改SecureCRT的设置参数: 第 ...