前面已经完成了登陆界面的开发,下面就是主页面的展示了。

一、新建菜单表:

这里说明一下,考虑到简单点,这里只用了两级菜单展示,表里在配置的时候也指挥有一级,二级。

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演练二:主界面设计(一)的更多相关文章

  1. 简易音乐播放器主界面设计 - .NET CORE(C#) WPF开发

    微信公众号:Dotnet9,网站:Dotnet9,问题或建议:请网站留言, 如果对您有所帮助:欢迎赞赏. 简易音乐播放器主界面设计 - .NET CORE(C#) WPF开发 阅读导航 本文背景 代码 ...

  2. Ext JS 6开发实例(三) :主界面设计

    在上文中,已经将CMD创建的应用程序导入到项目里了,而且也看到默认的主界面了,今天的主要工作就是修改这个主界面,以符合项目的需要.除了设计主界面,还有一些其他的东西需要配置一下. 添加本地化包 打开a ...

  3. emWin智能家居主界面设计,含uCOS-III和FreeRTOS两个版本

    第6期:智能家居主界面设计配套例子:V6-910_STemWin提高篇实验_智能家居主界面设计(uCOS-III)V6-911_STemWin提高篇实验_智能家居主界面设计(FreeRTOS) 例程下 ...

  4. Winform_devexpress开发框架主界面设计

    做了好多年的C#开发,从.Net.Winform及第三方的DevExpress.无论什么样的系统,主界面的设计及风格无疑非常重要.从客户的角度考虑,要求功能区清晰,整体美观大方,这样才会有可能从第一视 ...

  5. Winform开发框架主界面设计展示

    做了好多年Winform的程序的开发,主窗口的界面设计一般都要求做的更好一些,可以根据不同的系统功能模块进行归类整合,能使客户迅速寻找到相关功能的同时,也能感觉到整体性的美观大方,因此主窗口的界面设计 ...

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

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

  7. MFC+WinPcap编写一个嗅探器之二(界面)

    选择新建->项目->MFC应用程序->基于对话框完成,这里文件名为sniffer 打开资源视图中的Dialog列表,打开项目总默认创建的话框,将对话框中的所有控件删除,之后按照最终效 ...

  8. WDA演练一:用户登陆界面设计(二)

    一,登陆界面设计: 1.将系统编号灰显,默认初值 2.密码栏勾选密码显示,这样就不会明文显示在页面上了: Init方法中添加默认值代码: METHOD wddoinit . DATA lo_nd_zh ...

  9. [课程设计]Scrum 1.3 多鱼点餐系统开发进度(系统主界面框架&美化)

    Scrum 1.3 多鱼点餐系统开发进度(系统主界面框架&美化) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题:餐厅 ...

随机推荐

  1. 绕过dva dispatch在更新model数据的异步

    我的业务是在更新选择列表后,马上进行总价格更新,那么由于model的更新不是实时的,因此我在this.props得到的值还是旧值,解决办法就是通过dispatch成功返回的值,传给计算函数 handl ...

  2. LeetCode 528. Random Pick with Weight

    原题链接在这里:https://leetcode.com/problems/random-pick-with-weight/ 题目: Given an array w of positive inte ...

  3. plv8 + hashids 生成短连接id

    此文章是转载文章的一个学习,稍有改动 环境准备 plv8 环境 version: '3.6' services:  postgres:    image: dalongrong/plv8:2.3.12 ...

  4. 踩iviewui中Select 选择器两级联动,重置查询条件时第二级数据无法清除的坑

    小颖公司最近做的项目用的vue+iviewui+axios,在做项目的过程中,遇到一个问题: 二级联动的下拉框,第一个下拉框一直都有值,第二个下拉框是在选择了第一个下拉框之后采取调用ajax获取其值, ...

  5. NOIP动态规划大合集

    1.前言 NOIP2003-2014动态规划题目大合集,有简单的也有难的(对于我这种动态规划盲当然存在难的),今天就把这些东西归纳一下,做一个比较全面的总结,方便对动态规划有一个更深的理解. 2.NO ...

  6. 博客索引and题目列表

    目录 笔记整理 计划 要学的东西 缺省源 要做的题 搜索 高斯消元 矩阵 排列组合 2019.7.9 2019.7.10 kmp ac自动机 2019.7.11 2019.7.15 笔记整理 1.同余 ...

  7. Linux文件和目录管理

    一.与文档相关的命令 1,命令head:用于显示文件前10行,后面直接跟文件名.如果加-n,则显示文件的前几行. 选项-n后有无空格均可也可以省略字母n,直接跟数字 2,命令tail:和命令head类 ...

  8. sde.layers表的eflags字段解析

    ArcSDE地理数据库,虽然经常在用,但仅限于了解功能层面的东西,其内部实现机制对我来说是个黑盒子.因为想了解register with geodatabase操作在数据库层面到底发生了什么,我分析了 ...

  9. NFS服务器安装测试

    NFS为网络文件系统,允许网络中的计算机通过TCP/IP协议进行网络资源共享. 软件安装: $ sudo apt-get install nfs-kernel-server (1)服务器端 1)创建共 ...

  10. Sitecore 个性化 - 近距离和过于个人化?

    Sitecore个性化为营销人员提供了前所未有的强大功能,可以创建引人入胜一旦您发现 营销个性化 错误,就很有可能使用您的新技能来定制您网站的各个方面.但强大的力量带来了巨大的责任.在这篇文章中,我将 ...