SAP 实例- 页签tabsrip
屏幕页签:项目上有一需求,对标准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的更多相关文章
- 转:在Eclipse的Debug页签中设置虚拟机参数
http://blog.csdn.net/decorator2015/article/details/50914479 在Eclipse的Debug页签中设置虚拟机参数 步骤 1,Run->De ...
- 用于实现tab页签切换页面的angular路由复用策略
使用场景 打开菜单页面的时候,出现对应页面的页签.切换页签,原来的页面信息状态保留,关闭页签则保留的信息删除.使用路由复用策略,保存路由快照.实现效果如图所示 实现过程 概述: 1.在app.modu ...
- 实现Vue的多页签组件
在之前的博客中 关于vue的多页面标签功能,对于嵌套router-view缓存的最终无奈解决方法 有写过vue的多页签功能的解决方案 可以看到我当时那个多页签的组件还是比较简单 的,只有打开跟关闭 ...
- 基于微前端qiankun的多页签缓存方案实践
作者:vivo 互联网前端团队- Tang Xiao 本文梳理了基于阿里开源微前端框架qiankun,实现多页签及子应用缓存的方案,同时还类比了多个不同方案之间的区别及优劣势,为使用微前端进行多页签开 ...
- ASP.NET MVC搭建项目后台UI框架—4、tab多页签支持
目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...
- WPF如何实现一个漂亮的页签导航UI
最近看到一个比较漂亮的UI主界面,该UI是用左边的页签进行导航,比较有特色,就想着尝试用WPF来实现一下.经过一番尝试,基本上将UI设计图的效果用WPF程序进行了实现.下面介绍一下主要的思路: 1 U ...
- JavaScript选项卡/页签/Tab的实现
选项卡,也称页签,英文用Tab(Module-Tabs)表示.Tab将不同的内容重叠放在一个布局块内,重叠的内容区里每次只有其中一个是可见的. Tab可以在相同的空间里展示更多的信息,它把相似的主题分 ...
- C# 重绘tabControl,添加关闭按钮(页签)
C# 重绘tabControl,添加关闭按钮(页签) 调用方法 参数: /// <summary> /// 初始化 /// </summary> /// <param n ...
- 实现TabView(页签)效果
今天花了点时间,设计了一个网页上用的tabview(页签.tabcontrol)效果.个人觉得实现得比较不错,网页元素用得比较少,js代码也比较精练.测试了一下支持IE.FireFox以及chrome ...
随机推荐
- Flutter 打印日志封装及创建Live Templates快捷打印日志
只需要输入logi 就可出现以下代码 /// tag(类名.函数名)LogUtil.i(index, tag: '_MyHomePageState.onItemClick:');打印日志效果如下: 实 ...
- Java之万年历
@(文章目录) 二.Java之万年历 2.1 要求 输入年份: 输入月份: 输出某年某月的日历. 2.2 思路 实现从控制台接收年和月,判断是否是闰年(判断是否是闰年:能被4整除但不能被100整除:或 ...
- MPU9250/MPU6050与运动数据处理与卡尔曼滤波(1)
第一篇--概述和MPU6050及其自带的DMP输出四元数 概述 InvenSense(国内一般译为应美盛)公司产的数字运动传感器在国内非常流行,我用过它的两款,9250和6050.出于被国产芯片惯坏的 ...
- 基于pgrouting的路径规划处理
对于GIS业务来说,路径规划是非常基础的一个业务,一般公司如果处理,都会直接选择调用已经成熟的第三方的接口,比如高德.百度等.当然其实路径规划的算法非常多,像比较著名的Dijkstra.A*算法等.当 ...
- 雪花算法生成分布式ID
分布式主键ID生成方案 分布式主键ID的生成方案有以下几种: 数据库自增主键 缺点: 导入旧数据时,可能会ID重复,导致导入失败 分布式架构,多个Mysql实例可能会导致ID重复 UUID 缺点: 占 ...
- python学习-Day24
目录 今日内容详细 主菜 : ATM+购物车作业 项目开发流程 需求分析 架构设计 分组开发 项目测试 交付上线 需求分析 提炼项目功能 项目大致技术栈 架构设计 编程历经过程 三层架构 将ATM分为 ...
- XCTF练习题---MISC---3-11
XCTF练习题---MISC---3-11 flag:FLAG{LSB_i5_SO_EASY} 解题思路: 1.观察题目,下载附件 2.下载后是一张图片,根据习惯直接Stegsolve打开查看 3.通 ...
- 【ACM程序设计】差分
差分 假设有一个数列,我们需要对数列中的一个区间加上或减去一个值,直接想到的便是对该区间进行一次循环逐项加减. 但是当请求的操作变得非常多的时候,每次请求都进行一次循环会很容易爆时间,因此我们引入了差 ...
- screen使用小结
目录 安装 shell-screen-window关系 常用参数 快捷键 离开当前screen 打开一个新的窗口 查看窗口列表 窗口的快速切换 回到行首 关闭窗口 关闭所有窗口 关闭screen 删除 ...
- 【译】defer-panic-and-recover
Go 有通用的控制流程:if,for,switch,goto.它也有go语句用于让代码运行在单独的协程.这里我将讨论一些不常见的问题:defer,panic 和 recover. defer语句将函数 ...