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

一、新建菜单表:

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

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. 学习:VB之4C法

    前言:4C法对于单纯的本地验证的话应该比较好使,但是基于网络验证可能就不是很好用了,尽管到了第二个窗口,功能应该还是不能用 逆向过程: 1.直接载入OD,发现第一条汇编指令如下 0040120C &g ...

  2. 常用.Net 6.0 新特性

    1.nameof表达式.Nameof表达式可以直接返回对象定义的名称,比如参数.枚举.变量. 控件.属性等.可以大大减少硬编码的使用,提高程序灵活性. }, 2.字符串嵌入值($). MsgBox.S ...

  3. Shell编程——多命令顺序执行、管道、grep命令

    1.多命令执行符: (1)命令1:命令2    多个命令顺序执行,没有逻辑联系,即使命令1出错,命令2依旧执行. (2)命令1&&命令2:只有命令1正确执行,命令2才能正确执行:命令1 ...

  4. Educational Round 64 题解

    前言: 这场太难了……我一个紫名只打出两题……(虽说感觉的确发挥不够好) 一群蓝绿名的dalao好像只打了两题都能升分的样子…… 庆幸的是最后A出锅然后unr了>///< 写一波题解纪念这 ...

  5. python3 获取日期时间

    #!/usr/bin/python3 import time # 格式化成2016-- ::39形式 print (time.strftime("%Y-%m-%d %H:%M:%S" ...

  6. 使用Swagger2构建SpringMVC项目中的Restful API文档

    使用Swagger自动生成API文档,不仅增加了项目的可维护性,还提高了API的透明度更利于快速测试等工作,便于更快地发现和解决问题. 本篇文章只记录整合过程,关于Security Configura ...

  7. xcode: {} 花括号缩进一个空格

    if (jsonDict.HasParseError()) { //前面总是有一个空格 CCLOG("GetParseError %d\n",jsonDict.GetParseEr ...

  8. 【Activiti学习之四】Activiti API(三)

    环境 JDK 1.8 MySQL 5.6 Tomcat 7 Eclipse-Luna activiti 6.0 一.启动流程 多种方式启动 package com.wjy.pro; import or ...

  9. eclipse&myeclipse 生成jar包后,spring无法扫描到bean定义

    问题:eclipse&myeclipse 生成jar包后,spring无法扫描到bean定义 在使用getbean或者扫包时注入bean失败,但在IDE里是可以正常运行的? 原因:导出jar未 ...

  10. 《Linux就该这么学》培训笔记_ch06_存储结构与磁盘划分

    <Linux就该这么学>培训笔记_ch06_存储结构与磁盘划分 文章最后会post上书本的笔记照片. 文章主要内容: Linux系统的文件存储结构(FHS标准) 物理设备命名规则(udev ...