SAP 实例- 页签tabsrip

摘要:
打开屏幕生成器:如下图所示,让我们看看PBO。输出前处理*&

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

下面屏幕有两个页签。

 SAP 实例- 页签tabsrip第1张

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

SAP 实例- 页签tabsrip第2张

看一下屏幕属性

100屏幕:

SAP 实例- 页签tabsrip第3张

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

SAP 实例- 页签tabsrip第4张

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

SAP 实例- 页签tabsrip第5张

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

SAP 实例- 页签tabsrip第6张

SAP 实例- 页签tabsrip第7张

SAP 实例- 页签tabsrip第8张

SAP 实例- 页签tabsrip第9张

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

SAP 实例- 页签tabsrip第10张

 接下来看看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控制页签切换的对象。

 SAP 实例- 页签tabsrip第11张

看一下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屏幕。
SAP 实例- 页签tabsrip第12张

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

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

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

SAP 实例- 页签tabsrip第13张

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

SAP 实例- 页签tabsrip第14张

 修改代码如下:并激活。

*&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,并激活。

SAP 实例- 页签tabsrip第15张

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

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

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

SAP 实例- 页签tabsrip第16张SAP 实例- 页签tabsrip第17张

其对应的结构为:

 SAP 实例- 页签tabsrip第18张

 在主程序中给结构赋值:

SAP 实例- 页签tabsrip第19张

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

se11修改zjw_lable.

点击Append Structure

SAP 实例- 页签tabsrip第20张

输入名字,点击对号。

SAP 实例- 页签tabsrip第21张

 输入组件,并激活

SAP 实例- 页签tabsrip第22张

 此时 zjw_lable 如下。

 SAP 实例- 页签tabsrip第23张

主程序添加如下代码

SAP 实例- 页签tabsrip第24张

页签三对应的子屏幕如下

SAP 实例- 页签tabsrip第25张

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

看看效果

 SAP 实例- 页签tabsrip第26张

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

SAP 实例- 页签tabsrip第27张

看看效果:

SAP 实例- 页签tabsrip第28张

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

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

 SAP 实例- 页签tabsrip第29张

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

SAP 实例- 页签tabsrip第30张

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

页签3消失。

SAP 实例- 页签tabsrip第31张

 设置LIST BOX 下拉框。

se11 设置域,激活保存

SAP 实例- 页签tabsrip第32张

 SAP 实例- 页签tabsrip第33张

 SAP 实例- 页签tabsrip第34张

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

SAP 实例- 页签tabsrip第35张

 添加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调用。

 SAP 实例- 页签tabsrip第36张

 看看效果。

SAP 实例- 页签tabsrip第37张

给屏幕输入加搜索帮助。

 SAP 实例- 页签tabsrip第38张

 代码如下

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》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇dockerfile构建redisArcGIS使用Python脚本进行地理处理下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

VSTO+WinForm+WebService+WCF+WPF示例

前段时间去图书馆借书,无意中发现这样一本书,书名是”新一代 .NET Office开发 Excel篇”,书名比较有意思,就借出来看看.看完以后,发现确实不错.它挖掘了Office产品中我们经常忽略的部分.比如图表,透视表等.下面根据我对这本书的笔记来看看VSTO这个被微软偷偷发布,而被我们遗弃的东东到底是什么样子?由于这本书只针对Excel部分做操作,所以...

解决自定义相机分辨率适配、扭曲的问题

在自定义相机和扫码的时候,如果不设置相机的默认分辨率,有可能导致相机用的是最小的分辨率,照出来的照片很模糊。 所以自定义相机的时候,需要获取屏幕分辨率,相机的预览分辨率,进行最佳的匹配。 由于相机的预览分辨率几乎都是 按照横屏的来描述的,eg 1920*1080 而手机一般是竖屏的,如果自定义的相机是竖屏的,匹配相机预览分辨率的时候,如果直接传入当前的屏幕...

按键消抖

按键消抖原因 使用机械弹性开关,当机械触点闭合/断开时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定的接通,在断开时也不会马上断开。而是会在闭合/断开的瞬间伴随一连串的抖动,为避免这种现象带来的问题,需要进行按键消抖。 硬件消抖 在按键个数较少时可以使用硬件方法消除抖动。下图所示为使用RS触发器进行硬件消抖,当按键未按下时,输出为0;当按键按...

Oracle 汉字转拼音

   --0 select fn_getpy('测试',0) from dual ceshi  --1 select fn_getpy('测试',1) from dual CESHI  --2 select fn_getpy('测试',1) from dual CeShi  --3 select fn_getpy('测试',3) from dual cs...

AI学习---基于TensorFlow的案例[实现线性回归的训练]

线性回归原理复习         1)构建模型               |_> y = w1x1 + w2x2 + …… + wnxn + b        2)构造损失函数               |_> 均方误差        3)优化损失               |_> 梯度下降 实现线性回归的训练         准...

asp11

AppRelativeTemplateSourceDirectory 获取或设置包含该控件的 Page 或 UserControl 对象的应用程序相对虚拟目录。 1.0 BindingContainer 获取包含该控件的数据绑定的控件。 1.0 ClientID 获取由 ASP.NET 生成的服务器控件标识符。 1.0 Controls 获...