屏幕页签:项目上有一需求,对标准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. JS_简单的效果-鼠标移动、点击、定位元素、修改颜色等

    1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U ...

  2. 推荐系统 TOP K 评价指标

    目录 符号说明 示例数据 一.Hit Rate 二.Recall 三.NDCG 符号说明 \(top\_k\): 当前用户预测分最高的k个items,预测分由高到低排序 $pos$: 当前用户实际点击 ...

  3. zookeeper篇-watch命令

    点赞再看,养成习惯,微信搜索「小大白日志」关注这个搬砖人. 文章不定期同步公众号,还有各种一线大厂面试原题.我的学习系列笔记. 每个路径节点都有一个watcher监控,当该节点数据改变时(CRUD), ...

  4. shiro550反序列学习

    Shiro550 shiro550和fastjson作为攻防演练的利器,前面学习了fastjson的相关利用和回显,本篇主要来学习一下shiro550的漏洞原理. 1.漏洞原因 在 Shiro < ...

  5. MySQL事务基本使用

    目录 1 事务概述 1.1 事务的支持情况 1.2 事务的特性 1.3 事务的状态 2 使用事务 2.1 显示事务 2.2 隐藏事务 3 事务隔离等级 3.1 数据并发问题 3.2 事务隔离等级介绍 ...

  6. lab_1 清华大学ucore bootload启动ucore os(预备基础知识+实验过程)

    实验1 :bootload启动ucore os 1.0实验内容: lab1中包含一个bootloader和一个OS.这个bootloader可以切换到X86保护模式,能够读磁盘并加载ELF执行文件格式 ...

  7. 【ConcurrentHashMap】浅析ConcurrentHashMap的构造方法及put方法(JDK1.7)

    目录 引言 代码讲解 构造方法 put方法 ensureSegment Segment.put 引言 ConcurrentHashMap的数据结构如下. 和HashMap的最大区别在于多了一层Segm ...

  8. 【Electron】使用 build-tools 在 Windows 中编译 electron

    [Electron]使用 build-tools 在 Windows 中编译 electron 提前准备 预留好磁盘空间 Git 缓存目录:%UserProfile%/.git_cache ,大概有 ...

  9. numpy学习Ⅱ

    今天有空再把numpy看一下,补充点不会的,再去看matplotlib 回顾之前笔记,发现之前的numpy学习Ⅰ中关于numpy的行.列.维可能表述有点不清晰,这里再叙述一下 import numpy ...

  10. kNN-画图

    现在我们想要展示一些可视化内容 首先导包,如果是在jupyter notebook上,需要加入魔法函数:%matplotlib inline,这表示可以在jupyter上直接画图 import dat ...