WDA演练二:主界面设计(一)
前面已经完成了登陆界面的开发,下面就是主页面的展示了。
一、新建菜单表:

这里说明一下,考虑到简单点,这里只用了两级菜单展示,表里在配置的时候也指挥有一级,二级。
AUGRP对应前面用户表的GROUP
ZLEVEL对应层级,最多2级。
INX是层级对应的序号。
ID为WDA程序名称。
LANGU为语言,这里可以做多语言翻译,显示不同语言下的菜单。
TEXT为菜单显示的名字。
SUB_LEVEL为上级菜单对应的序号。
INTERFACE_WINDOW是调用的显示主窗口。
二、程序设计:
1.将全局节点拖到MAIN视图中。

2.新建NODE节点,对应菜单树。

3.NODE下新建LEAF节点,对应树叶,菜单:

4.新建NODE的属性:除了EXPAND是WDA_BOOLEAN类型,其他均为STRING类型。

5.新建LEAF属性:

三、主页菜单设计:
1.按通常显示来,抬头是标题或者图片LOGO,上传抬头LOGO

2.接着前面的来,添加抬头图片到视图:

3.新建SPLITTER,将页面分为左右两部分。

4.给SPLITTER添加菜单控制器和右边的显示容器:


5.右侧添加视图控制器:

6.左侧加TREE:

7.将TREE绑定到前面建的节点NODE上:

8.添加树节点:


9.添加树叶节点:

10.节点绑定:


三、初始化看看效果:
METHOD init_menu .
**-------------------------------------------------------------------------
** 初始化菜单项
**
** 一级菜单 二级菜单
**
*
**-------------------------------------------------------------------------
DATA lo_nd_node TYPE REF TO if_wd_context_node.
DATA lo_nd_leaf TYPE REF TO if_wd_context_node.
DATA lo_el_leaf TYPE REF TO if_wd_context_element.
DATA ls_leaf TYPE wd_this->element_leaf.
DATA lt_leaf TYPE wd_this->elements_leaf.
DATA lo_el_node TYPE REF TO if_wd_context_element.
DATA ls_node TYPE wd_this->element_node.
DATA lt_node TYPE wd_this->elements_node.
DATA l_menuid TYPE i.
* DATA lt_auth TYPE TABLE OF zauth.
* DATA ls_auth TYPE zauth. lo_nd_node = wd_context->get_child_node( name = wd_this->wdctx_node ).
lo_nd_node->bind_table( lt_node )."清空节点 DATA: lt_fir_level TYPE TABLE OF zlymenu,
ls_fir_level TYPE zlymenu. DATA: lt_sec_level TYPE TABLE OF zlymenu,
ls_sec_level TYPE zlymenu.
DATA: lv_char TYPE string. SELECT * INTO TABLE lt_fir_level FROM zlymenu WHERE augrp = augrp AND zlevel IN (,)
AND langu = sy-langu. SORT lt_fir_level BY inx. IF lt_fir_level IS NOT INITIAL.
SELECT * INTO TABLE lt_sec_level FROM zlymenu
FOR ALL ENTRIES IN lt_fir_level
WHERE sub_level = lt_fir_level-inx AND augrp = augrp AND zlevel =
AND langu = sy-langu.
SORT lt_sec_level BY sub_level inx.
LOOP AT lt_fir_level INTO ls_fir_level.
CLEAR:lt_leaf.
LOOP AT lt_sec_level INTO ls_sec_level WHERE sub_level = ls_fir_level-inx.
ls_leaf-leafid = ls_sec_level-id.
ls_leaf-leafname = ls_sec_level-text.
ls_leaf-interface_window = ls_sec_level-interface_window.
APPEND ls_leaf TO lt_leaf.
ENDLOOP.
"IF lt_leaf IS NOT INITIAL.
lv_char = ls_fir_level-inx.
CONCATENATE 'S' lv_char INTO ls_node-nodeid.
ls_node-nodename = ls_fir_level-text.
ls_node-expand = 'X'.
ls_node-icon_source = 'ICON_OBJECT_FOLDER'.
l_menuid = l_menuid + .
CALL METHOD lo_nd_node->bind_element
EXPORTING
new_item = ls_node
set_initial_elements = abap_false
index = l_menuid
RECEIVING
element = lo_el_node.
lo_nd_leaf = lo_el_node->get_child_node( wd_this->wdctx_leaf ).
lo_nd_leaf->bind_table( lt_leaf ).
REFRESH lt_leaf.
"ENDIF.
ENDLOOP.
ENDIF. ENDMETHOD.
将上面的方法在处理LOGON跳转里调用:
METHOD handlefromlogon .
DATA lo_nd_zhis_user TYPE REF TO if_wd_context_node.
DATA lo_el_zhis_user TYPE REF TO if_wd_context_element.
DATA ls_zhis_user TYPE wd_this->element_zhis_user. * navigate from <CONTEXT> to <ZHIS_USER> via lead selection
lo_nd_zhis_user = wd_context->get_child_node( name = wd_this->wdctx_zhis_user ).
lo_el_zhis_user = lo_nd_zhis_user->get_element( ).
* @TODO handle not set lead selection
IF lo_el_zhis_user IS INITIAL.
EXIT.
ENDIF. lo_el_zhis_user->get_static_attributes(
IMPORTING
static_attributes = ls_zhis_user ). wd_this->init_menu( ls_zhis_user-augrp ). ENDMETHOD.
添加事件处理逻辑:
METHOD onactionselect_item .
DATA ls_leaf TYPE wd_this->element_leaf.
DATA ls_zlymenu TYPE zlymenu. DATA lo_nd_zhis_user TYPE REF TO if_wd_context_node. DATA lo_el_zhis_user TYPE REF TO if_wd_context_element.
DATA ls_zhis_user TYPE wd_this->element_zhis_user.
DATA lv_augrp TYPE wd_this->element_zhis_user-augrp. * navigate from <CONTEXT> to <ZHIS_USER> via lead selection
lo_nd_zhis_user = wd_context->get_child_node( name = wd_this->wdctx_zhis_user ). * @TODO handle non existant child
* IF lo_nd_zhis_user IS INITIAL.
* ENDIF. * get element via lead selection
lo_el_zhis_user = lo_nd_zhis_user->get_element( ).
* @TODO handle not set lead selection
IF lo_el_zhis_user IS INITIAL.
ENDIF. * get single attribute
lo_el_zhis_user->get_attribute(
EXPORTING
name = `AUGRP`
IMPORTING
value = lv_augrp ). IF context_element IS INITIAL. IF wd_this->iv_context_element IS NOT INITIAL.
wd_this->iv_context_element->get_static_attributes(
IMPORTING
static_attributes = ls_leaf ).
ENDIF. IF ls_leaf IS INITIAL.
SELECT SINGLE * INTO ls_zlymenu FROM zlymenu
WHERE augrp = lv_augrp
AND zlevel =
AND sub_level =
AND langu = sy-langu.
IF sy-subrc EQ .
ls_leaf-leafid = ls_zlymenu-id.
ls_leaf-leafname = ls_zlymenu-text.
ls_leaf-interface_window = ls_zlymenu-interface_window.
ELSE.
EXIT.
ENDIF. ENDIF. ELSE. context_element->get_static_attributes(
IMPORTING
static_attributes = ls_leaf ). ENDIF. * 得到window名称
DATA l_current_controller TYPE REF TO if_wd_controller.
DATA l_message_manager TYPE REF TO if_wd_message_manager.
DATA lr_view_controller TYPE REF TO if_wd_view_controller.
DATA lr_window_controller TYPE REF TO if_wd_window_controller.
DATA lv_window_name TYPE string.
*
l_current_controller ?= wd_this->wd_get_api( ).
l_message_manager = l_current_controller->get_message_manager( ). lr_view_controller = wd_this->wd_get_api( ).
lr_window_controller = lr_view_controller->get_embedding_window_ctlr( ).
lv_window_name = lr_window_controller->if_wd_controller~name.
*
DATA lv_vusage_name TYPE string.
lv_vusage_name = 'MAIN_USAGE_0'. DATA ls_component_usages TYPE wdapi_component_usage.
DATA l_view TYPE string. DATA l_view_controller TYPE REF TO if_wd_view_controller.
DATA l_view_name TYPE string.
DATA: s_plug_name TYPE string. * ls_component_usages-component_usage_name = ls_leaf-leafid."aaaa
ls_component_usages-embedding_position = 'MAIN/RIGHT'. DATA: l_view_controller_api TYPE REF TO if_wd_view_controller.
l_view_controller_api = wd_this->wd_get_api( ). IF wd_this->component_usage IS NOT INITIAL.
IF wd_this->component_usage-component_usage->has_active_component( ) IS NOT INITIAL.
wd_this->component_usage-component_usage->delete_component( ).
CALL METHOD l_view_controller_api->remove_dynamic_meta_data
EXPORTING
source_window_name = lv_window_name
source_vusage_name = lv_vusage_name
* source_plug_name = s_plug_name
source_plug_name = 'TO_WDA'
target_component_name = wd_this->component_usage-used_component
target_component_usage = wd_this->component_usage-component_usage_name
target_view_name = wd_this->old_view
target_plug_name = 'DEFAULT'
target_embedding_position = wd_this->component_usage-embedding_position.
ENDIF.
ENDIF. TRY.
l_view_name = ls_leaf-interface_window.
lv_window_name = 'ZLY_PORTAL'.
ls_component_usages-used_component = ls_leaf-leafid.
ls_component_usages-component_usage_name = ls_leaf-leafid.
ls_component_usages-component_usage = l_view_controller_api->prepare_dynamic_navigation(
source_window_name = lv_window_name
source_vusage_name = lv_vusage_name
source_plug_name = 'TO_WDA'
target_component_name = ls_component_usages-used_component
target_component_usage = ls_component_usages-component_usage_name
target_view_name = l_view_name
target_plug_name = 'DEFAULT'
target_embedding_position = ls_component_usages-embedding_position ). CATCH cx_wd_runtime_repository.
RAISE EXCEPTION TYPE cx_wdr_rt_exception.
EXIT.
ENDTRY. DATA lo_cmp_usage TYPE REF TO if_wd_component_usage. IF ls_component_usages-component_usage->has_active_component( ) IS NOT INITIAL.
ls_component_usages-component_usage->delete_component( ).
ENDIF.
ls_component_usages-component_usage->create_component( ls_component_usages-used_component ).
wd_this->component_usage = ls_component_usages.
wd_this->old_view = l_view_name. *-------------------------->绑interface结点<---------------------- DATA l_intf_controller TYPE REF TO ziwci_crm_interface.
DATA l_wd_controller TYPE REF TO if_wd_controller.
DATA l_wd_context TYPE REF TO if_wd_context.
DATA l_wd_context_node TYPE REF TO if_wd_context_node. wd_this->fire_to_WDA_plg( ). CLEAR ls_component_usages. ENDMETHOD.
树叶节点绑定事件:

METHOD onactionselect_item2 .
DATA lo_nd_leaf TYPE REF TO if_wd_context_node.
DATA lo_el_leaf TYPE REF TO if_wd_context_element.
DATA ls_leaf TYPE wd_this->element_leaf. wd_this->iv_context_element = context_element. context_element->get_static_attributes(
IMPORTING
static_attributes = ls_leaf ). DATA zwdevent TYPE REF TO cl_wd_custom_event. wd_this->onactionselect_item(
context_element = context_element " ref to if_wd_context_element
wdevent = zwdevent " ref to cl_wd_custom_event
). ENDMETHOD.
效果如图:

程序里默认选择了主页面。取消效果如下:

到此结束。
WDA演练二:主界面设计(一)的更多相关文章
- 简易音乐播放器主界面设计 - .NET CORE(C#) WPF开发
微信公众号:Dotnet9,网站:Dotnet9,问题或建议:请网站留言, 如果对您有所帮助:欢迎赞赏. 简易音乐播放器主界面设计 - .NET CORE(C#) WPF开发 阅读导航 本文背景 代码 ...
- Ext JS 6开发实例(三) :主界面设计
在上文中,已经将CMD创建的应用程序导入到项目里了,而且也看到默认的主界面了,今天的主要工作就是修改这个主界面,以符合项目的需要.除了设计主界面,还有一些其他的东西需要配置一下. 添加本地化包 打开a ...
- emWin智能家居主界面设计,含uCOS-III和FreeRTOS两个版本
第6期:智能家居主界面设计配套例子:V6-910_STemWin提高篇实验_智能家居主界面设计(uCOS-III)V6-911_STemWin提高篇实验_智能家居主界面设计(FreeRTOS) 例程下 ...
- Winform_devexpress开发框架主界面设计
做了好多年的C#开发,从.Net.Winform及第三方的DevExpress.无论什么样的系统,主界面的设计及风格无疑非常重要.从客户的角度考虑,要求功能区清晰,整体美观大方,这样才会有可能从第一视 ...
- Winform开发框架主界面设计展示
做了好多年Winform的程序的开发,主窗口的界面设计一般都要求做的更好一些,可以根据不同的系统功能模块进行归类整合,能使客户迅速寻找到相关功能的同时,也能感觉到整体性的美观大方,因此主窗口的界面设计 ...
- WDA基础二:界面,元素介绍
1.ELEMENTS: BUTTON 按钮 CAPTION 标题 DROPDOWN_BY_IDX 带序号的下拉 DROPDOWN_BY_KEY 带键值的下拉 FILE_UPLOAD ...
- MFC+WinPcap编写一个嗅探器之二(界面)
选择新建->项目->MFC应用程序->基于对话框完成,这里文件名为sniffer 打开资源视图中的Dialog列表,打开项目总默认创建的话框,将对话框中的所有控件删除,之后按照最终效 ...
- WDA演练一:用户登陆界面设计(二)
一,登陆界面设计: 1.将系统编号灰显,默认初值 2.密码栏勾选密码显示,这样就不会明文显示在页面上了: Init方法中添加默认值代码: METHOD wddoinit . DATA lo_nd_zh ...
- [课程设计]Scrum 1.3 多鱼点餐系统开发进度(系统主界面框架&美化)
Scrum 1.3 多鱼点餐系统开发进度(系统主界面框架&美化) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题:餐厅 ...
随机推荐
- Mongo 服务器的安装
MongoDB的安装 CentOS 中使用yum安装: touch /etc/yum.repos.d/mongodb-org-4.2.repo vim /etc/yum.repos.d/mongodb ...
- git crate&query&delete tag(九)
root@vmuer-VirtualBox:/opt/myProject# git log --pretty=oneline0169b7a1c4bccb47e76711f353fd8d3864bde9 ...
- Python实现电子词典(web)
思路: 准备配置文件setting.py,运行src/data.py,使用MySQL新建数据库并创建table,将字典数据导入到table中.编写server.py文件,建立服务端,循环接收web请求 ...
- fping 命令说明
参数: -a 表示只在输出报告⾥列出当前存活的IP -d 解析主机名 -f 参数表示读⼊这个文件 -s 显示汇总信息 -g 指定⽹网段
- JavaScriptDOM编程学习笔记(一)DOM概述
首先介绍下DOM,一套对文档的内容进行抽象和概念化的方法.即Document Object Model,当创建了一个网页并加载到Web浏览器中时,DOM就把编写的网页转换为一个文档对象,而通过浏览器提 ...
- GPS和LOAM的pose之间建立edge
基于时间戳一致原理,在与PG的timestamp邻近的的两个LOAM的pose中插值出一个虚拟的LOAM pose PG' ,其timestamp = PG的timestamp. 然后GPS的pose ...
- 京东联盟开发(6)——推广链接解析SKUID
1.从推广方案中分析出价格及推广码 $keyword = " [京东]长虹(CHANGHONG) L3 老人手机 移动/联通2G 老年机 双卡双待 咖啡 原价:168.00元 券后价:163 ...
- kaggle house price
kaggle 竞赛入门 导入常用的数据分析以及模型的库 数据处理 Data fields 去除异常值 处理缺失值 分析 Utilities Exploratory Data Analysis Corr ...
- CAS自旋volatile变量
public final int getAndIncrement() { for (;;) { int current = get(); // 取得AtomicInteger里存储的数值 int ne ...
- day60——单表操作补充(批量插入、查询、表结构)
day60 批量插入(bulk_create) # bulk_create obj_list = [] for i in range(20): obj = models.Book( title=f'金 ...