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

一、新建菜单表:

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

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. 【转】linux 下清空或删除大文件的一些方法

    原文:https://linux.cn/article-8024-1.html 在 Linux 终端下处理文件时,有时我们想直接清空文件的内容但又不必使用任何 Linux 命令行编辑器 去打开这些文件 ...

  2. 【java异常】redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool

    产生此错误的原因通常是: 一.Redis没有启动: 我自己遇到一次这样的问题.汗! 二.由于防火墙原因无法连接到Redis; 1.服务器防火墙入站规则. 2.访问Redis的应用程序所在主机的出站规则 ...

  3. RabbitMQ六种队列模式-简单队列模式

    前言 RabbitMQ六种队列模式-简单队列 [本文]RabbitMQ六种队列模式-工作队列RabbitMQ六种队列模式-发布订阅RabbitMQ六种队列模式-路由模式RabbitMQ六种队列模式-主 ...

  4. 第05组 Beta冲刺(2/4)

    第05组 Beta冲刺(2/4) 队名:天码行空 组长博客连接 作业博客连接 团队燃尽图(共享): GitHub当日代码/文档签入记录展示(共享): 组员情况: 组员1:卢欢(组长) 过去两天完成了哪 ...

  5. linux command lynx

    [Purpose]        Learning linux command  lynx   [Eevironment]        Ubuntu 16.04 terminal   apt-get ...

  6. git crate&query&delete tag(九)

    root@vmuer-VirtualBox:/opt/myProject# git log --pretty=oneline0169b7a1c4bccb47e76711f353fd8d3864bde9 ...

  7. Linux搭建简单的http文件服务器

    为了让自动化脚本可以通过wget来下载安装包,需要在集群中的某个节点部署一个http文件服务器 在Ubuntu中通过apt-get install apache2 安装apache2CentOS7中通 ...

  8. #ifndef #define #endif

    在一个大的软件工程里面,可能会有多个文件同时包含一个头文件,当这些文件编译链接成一个可执行文件时,就会出现大量重定义的错误.在头文件中实用#ifndef #define #endif能避免头文件的重定 ...

  9. git filter-branch之后撤销到原来状态

    起因 因为要拆分仓库,所以按照原来的操作拆分,拆分完成后发现有问题,所以准备还原重新拆分. 注意 git filter-branch之后,不可以做其他额外操作 运行git filter-branch之 ...

  10. Docker环境下的前后端分离项目部署与运维(八)使用Docker部署RabbitMQ集群

    下载RabbitMQ镜像 镜像地址RabbitMQ Docker官方认证镜像地址:https://hub.docker.com/_/rabbitmq 安装命令安装之前,切记把Docker Hub设置为 ...