屏幕页签:项目上有一需求,对标准TCODE 一个屏幕增加一个页签。于是做了个例子。

下面屏幕有两个页签。

我们来看一下屏幕结构。100屏幕是主屏幕,101,102是子屏幕,对应页签test1,test2.

看一下屏幕属性

100屏幕:

101屏幕和102屏幕属性相同:

看一下屏幕制作器:区域1 是两个push button; 区域2是tab控件的子区域,用来加载子屏幕的。

看下element list:1.TAB100是tab控件;2.TAB100_TAB1 和 TAB100_TAB2 是两个PUSH button;3.TAB100_SCA 是子区域。

打开屏幕制作器:双击test2,如下图

接下来看看100屏幕的PBO.

PROCESS BEFORE OUTPUT.
*&SPWIZARD: PBO FLOW LOGIC FOR TABSTRIP 'TAB100'
MODULE TAB100_ACTIVE_TAB_SET.
CALL SUBSCREEN TAB100_SCA
INCLUDING G_TAB100-PROG G_TAB100-SUBSCREEN.
MODULE TAB100_ACTIVE_TAB_SET.如下
c_tab100 是一个静态的工作区,用来存储两个按钮的 指令code.
tab100是tab控件。
g_tab100控制页签切换的对象。

看一下100屏幕PAI

PROCESS AFTER INPUT.
*MODULE exit AT EXIT-COMMAND.
*&SPWIZARD: PAI FLOW LOGIC FOR TABSTRIP 'TAB100'
CALL SUBSCREEN TAB100_SCA.
MODULE TAB100_ACTIVE_TAB_GET.
* MODULE USER_COMMAND_0100.
MODULE TAB100_ACTIVE_TAB_GET.如下:
当点击test1的时候,
sy-ucomm = 'TAB100_FC1'
g_tab100-pressed_tab = 'TAB100_FC1'.
此操作会触发100屏幕PBO.即调用 MODULE tab100_active_tab_set OUTPUT.
此时 g_tab100-subscreen = ‘101’
然后执行   CALL SUBSCREEN TAB100_SCA
    INCLUDING G_TAB100-PROG G_TAB100-SUBSCREEN.
加载101子屏幕到tab控件的 子屏幕区域。进而显示101屏幕。

 接下来我们添加一个新的页签

打开屏幕制作器,编辑模式。

添加一个push buton 控件,name: TAB100_TAB3.  text: test3

双击test3,填写如下信息。并激活屏幕。

修改代码如下:并激活。

*&SPWIZARD: FUNCTION CODES FOR TABSTRIP 'TAB100'
CONSTANTS: BEGIN OF c_tab100,
tab1 LIKE sy-ucomm VALUE 'TAB100_FC1',
tab2 LIKE sy-ucomm VALUE 'TAB100_FC2',
tab3 LIKE sy-ucomm VALUE 'TAB100_FC3', “ADD
END OF c_tab100.
MODULE tab100_active_tab_set OUTPUT.
  tab100-activetab = g_tab100-pressed_tab.
  CASE g_tab100-pressed_tab.
    WHEN c_tab100-tab1.
      g_tab100-subscreen = '0101'.
    WHEN c_tab100-tab2.
      g_tab100-subscreen = '0102'.
    WHEN c_tab100-tab3.
      g_tab100-subscreen '0103'."ADD
    WHEN OTHERS.
*&SPWIZARD:      DO NOTHING
  ENDCASE.
ENDMODULE.

MODULE tab100_active_tab_get INPUT.
  ok_code = sy-ucomm.
  CASE ok_code.
    WHEN c_tab100-tab1.
      g_tab100-pressed_tab = c_tab100-tab1.
    WHEN c_tab100-tab2.
      g_tab100-pressed_tab = c_tab100-tab2.
    WHEN c_tab100-tab3.
      g_tab100-pressed_tab = c_tab100-tab3.
    WHEN OTHERS.
*&SPWIZARD:      DO NOTHING
  ENDCASE.
ENDMODULE.

创建子屏幕 103,同101和102,并激活。

自此,页签添加完成,你可以在103屏幕上添加其他控件。

接下来最重要的是给新增的页签 传递参数。假设,页签1,页签2 已经有对应的一个结构,

页签1,页签2上显示的是结构中的数据值。如下:

其对应的结构为:

在主程序中给结构赋值:

现在要把第三个页签中对应的结构,添加到ZJW_LABLE 结构中。

se11修改zjw_lable.

点击Append Structure

输入名字,点击对号。

输入组件,并激活

此时 zjw_lable 如下。

主程序添加如下代码

页签三对应的子屏幕如下

注意:每个控件的名字,要和主程序中的结构-字段名对应,才可以传值。而且必须大写。

看看效果

现在我们发现页签3中的text文本框是可以输入的。如果我们想控制其不允许修改。则做如下操作:

看看效果:

继续添加需求:当满足条件时,页签显示,否则不显示。

添加全局变量G_FLAG. 添加控制条件。

在主屏幕 100的PBO中添加控制代码:

当 G_FLAG <> 'X' 的时候,不激活页签。我们手动清空一下g_flag 看下效果:

页签3消失。

设置LIST BOX 下拉框。

se11 设置域,激活保存

修改101 子屏幕LWA_LABLE-LABEL_3 属性为 List box.

添加module。

MODULE fill_carrid OUTPUT.
* Do not use this process (but it works)
TYPE-POOLS vrm.
DATA lit_values TYPE vrm_values.
DATA:
l_return TYPE sy-subrc,
lit_dom TYPE STANDARD TABLE OF dd07v. IF lit_dom IS INITIAL.
CALL FUNCTION 'DD_DOMVALUES_GET'
EXPORTING
domname = 'ZJW_001'
text = 'X'
langu = sy-langu
IMPORTING
rc = l_return
TABLES
dd07v_tab = lit_dom
EXCEPTIONS
wrong_textflag = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDIF.
LOOP AT lit_dom INTO DATA(lwa_dom).
APPEND INITIAL LINE TO lit_values ASSIGNING FIELD-SYMBOL(<lfs_value>).
<lfs_value> = VALUE #( key = lwa_dom-domvalue_l
text = lwa_dom-ddtext ). ENDLOOP. CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
id = 'LWA_LABLE-LABEL_3'
values = lit_values
EXCEPTIONS
id_illegal_name = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDMODULE. " FILL_CARRID OUTPUT

101 子屏幕PBO调用。

看看效果。

给屏幕输入加搜索帮助。

代码如下

MODULE value_label INPUT.
DATA: fields LIKE TABLE OF help_value WITH HEADER LINE,
select_value TYPE string
.
DATA: BEGIN OF valuetab OCCURS 0,
VALUE(40),
END OF valuetab.
CLEAR: valuetab, valuetab[], fields[], fields. fields-tabname = 'ZJW_LABLE'.
fields-fieldname = 'LABEL_3'.
fields-selectflag = 'X'.
APPEND fields. IF lit_dom IS INITIAL.
CALL FUNCTION 'DD_DOMVALUES_GET'
EXPORTING
domname = 'ZJW_001'
text = 'X'
langu = sy-langu
IMPORTING
rc = l_return
TABLES
dd07v_tab = lit_dom
EXCEPTIONS
wrong_textflag = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDIF.
LOOP AT lit_dom INTO lwa_dom. valuetab-value = lwa_dom-ddtext.
APPEND valuetab. ENDLOOP. CALL FUNCTION 'HELP_VALUES_GET_WITH_TABLE'
IMPORTING
select_value = select_value "选中的值
TABLES
fields = fields "显示的列
valuetab = valuetab "每列的数据
EXCEPTIONS
field_not_in_ddic = 1
more_then_one_selectfield = 2
no_selectfield = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
lwa_lable-label_3 = select_value.
ENDIF. ENDMODULE.
 

SAP 实例- 页签tabsrip的更多相关文章

  1. 转:在Eclipse的Debug页签中设置虚拟机参数

    http://blog.csdn.net/decorator2015/article/details/50914479 在Eclipse的Debug页签中设置虚拟机参数 步骤 1,Run->De ...

  2. 用于实现tab页签切换页面的angular路由复用策略

    使用场景 打开菜单页面的时候,出现对应页面的页签.切换页签,原来的页面信息状态保留,关闭页签则保留的信息删除.使用路由复用策略,保存路由快照.实现效果如图所示 实现过程 概述: 1.在app.modu ...

  3. 实现Vue的多页签组件

    在之前的博客中  关于vue的多页面标签功能,对于嵌套router-view缓存的最终无奈解决方法  有写过vue的多页签功能的解决方案 可以看到我当时那个多页签的组件还是比较简单 的,只有打开跟关闭 ...

  4. 基于微前端qiankun的多页签缓存方案实践

    作者:vivo 互联网前端团队- Tang Xiao 本文梳理了基于阿里开源微前端框架qiankun,实现多页签及子应用缓存的方案,同时还类比了多个不同方案之间的区别及优劣势,为使用微前端进行多页签开 ...

  5. ASP.NET MVC搭建项目后台UI框架—4、tab多页签支持

    目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...

  6. WPF如何实现一个漂亮的页签导航UI

    最近看到一个比较漂亮的UI主界面,该UI是用左边的页签进行导航,比较有特色,就想着尝试用WPF来实现一下.经过一番尝试,基本上将UI设计图的效果用WPF程序进行了实现.下面介绍一下主要的思路: 1 U ...

  7. JavaScript选项卡/页签/Tab的实现

    选项卡,也称页签,英文用Tab(Module-Tabs)表示.Tab将不同的内容重叠放在一个布局块内,重叠的内容区里每次只有其中一个是可见的. Tab可以在相同的空间里展示更多的信息,它把相似的主题分 ...

  8. C# 重绘tabControl,添加关闭按钮(页签)

    C# 重绘tabControl,添加关闭按钮(页签) 调用方法 参数: /// <summary> /// 初始化 /// </summary> /// <param n ...

  9. 实现TabView(页签)效果

    今天花了点时间,设计了一个网页上用的tabview(页签.tabcontrol)效果.个人觉得实现得比较不错,网页元素用得比较少,js代码也比较精练.测试了一下支持IE.FireFox以及chrome ...

随机推荐

  1. socket套接字模块及黏包现象

    一.socket套接字模块 socket概念 socket层 理解socket Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模 ...

  2. Prometheus介绍及docker安装方式

    一.介绍 Prometheus是主要基于Go编写,最初在SoundCloud上构建的开源系统监视和警报工具包,它启发于 Google 的 borgmon 监控系统,由工作在 SoundCloud 的 ...

  3. IP协议/地址(IPv4&IPv6)概要

    IP协议/地址(IPv4&IPv6)概要 IP协议 什么是IP协议 IP是Internet Protocol(网际互连协议)的缩写,是TCP/IP体系中的网络层协议. [1] 协议的特征 无连 ...

  4. java序列回显学习

    java反序列化回显 在很多不出网的情况下,一种是写webshell(内存嘛),另一种就是回显,本文先学习回显,回显的主要方式有一下几种. defineClass RMI绑定实例 URLClassLo ...

  5. Enum枚举类型实战总结,保证有用!

    一般在我们开发时如果能使用枚举罗列的,一般都会定义一个枚举类型.将枚举类型作为方法的参数,可以方便的进行调用,给我们带来不少的遍历,当然有时候它还不如直接用一个int类型带来,带来一定灵活性.但只要能 ...

  6. netty系列之:netty中的核心编码器bytes数组

    目录 简介 byte是什么 netty中的byte数组的工具类 netty中byte的编码器 总结 简介 我们知道netty中数据传输的核心是ByteBuf,ByteBuf提供了多种数据读写的方法,包 ...

  7. spring-data-jpa操作数据库

    1.spring-data-jpa是spring对hibernate的整合 2.spring boot工程在实体类添加注解.添加两个依赖.写配置文件,可以自动生成数据库表 实体类: @Entity / ...

  8. 测试必会 Docker 实战(一):掌握高频命令,夯实内功基础

    在 Dokcer 横空出世之前,应用打包一直是大部分研发团队的痛点.在工作中,面对多种服务,多个服务器,以及多种环境,如果还继续用传统的方式打包部署,会浪费大量时间精力. 在 Docker 出现后,它 ...

  9. ASP.NET视图视图表单验证

    视图表单验证 初始化项目 新建一个ASP.NET MVC的项目 新建游戏用户类: public class StemUsers { public int id { get; set; } public ...

  10. 如何彻底禁止 macOS Monterey 自动更新,去除更新标记和通知

    请访问原文链接:如何彻底禁止 macOS Monterey 自动更新,去除更新标记和通知,查看最新版.原创作品,转载请保留出处. 作者主页:www.sysin.org 随着 macOS Montere ...