2023年2月

原文链接:https://blog.csdn.net/dobear_0922/article/details/2393235

--1.删除测试用表
IF OBJECT_ID(N'Test', N'U') IS NOT NULL
    DROP TABLE Test

--2.建立测试表,并填充测试数据
SELECT * INTO Test 
FROM
(
    SELECT CONVERT(DATETIME, '2008-1-1', 120) AS dt UNION ALL SELECT '2008-1-15' UNION ALL SELECT '2008-1-31'
    UNION ALL SELECT '2008-2-1' UNION ALL SELECT '2008-2-15' UNION ALL SELECT '2008-2-29'
    UNION ALL SELECT '2007-2-1' UNION ALL SELECT '2007-2-15' UNION ALL SELECT '2007-2-28'
    UNION ALL SELECT '2007-4-1' UNION ALL SELECT '2007-4-15' UNION ALL SELECT '2007-4-30'
) T

--3.根据日期计算当月有多少天
SELECT *
    --当月天数=32-[(上月最后最后一天+32天)的日期值]
    --e.g. '2008-1':32-day('2008-2-1') '2008-2':32-day('2008-3-3')
    , ds1=32-DAY(dt-DAY(dt)+32)
    
    --当月天数=当月最后一天的日期值
    --e.g. '2008-1':day('2008-1-31') '2008-2':day('2008-2-29')
    , ds2=DAY(DATEADD(mm,1,dt)-DAY(DATEADD(mm,1,dt)))    
    , ds3=DAY(DATEADD(mm, MONTH(dt), dt-DATEPART(dy,dt)))    
    , ds4=DAY(DATEADD(d, -1, CONVERT(VARCHAR(8), DATEADD(m,1,dt), 120)+'01'))

    --当月天数=本月一号到下月一号的天数差值
    --e.g. datediff(d, '2008-1-1', '2008-2-1')
    , ds5=DATEDIFF(d, DATEADD(dd,1-DAY(dt),dt), DATEADD(mm, 1, DATEADD(dd,1-DAY(dt),dt)))
    , ds6=DATEDIFF(d, DATEADD(m, DATEDIFF(m, 0, dt), 0), DATEADD(m, datediff(m, 0, dt)+1, 0))
    , ds7=DATEDIFF(d, CONVERT(VARCHAR(8), dt, 120)+'01', CONVERT(VARCHAR(8), DATEADD(m,1,dt), 120)+'01')        
from Test

/*
dt                      ds1         ds2         ds3         ds4         ds5         ds6         ds7
----------------------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
2008-01-01 00:00:00.000 31          31          31          31          31          31          31
2008-01-15 00:00:00.000 31          31          31          31          31          31          31
2008-01-31 00:00:00.000 31          31          31          31          31          31          31
2008-02-01 00:00:00.000 29          29          29          29          29          29          29
2008-02-15 00:00:00.000 29          29          29          29          29          29          29
2008-02-29 00:00:00.000 29          29          29          29          29          29          29
2007-02-01 00:00:00.000 28          28          28          28          28          28          28
2007-02-15 00:00:00.000 28          28          28          28          28          28          28
2007-02-28 00:00:00.000 28          28          28          28          28          28          28
2007-04-01 00:00:00.000 30          30          30          30          30          30          30
2007-04-15 00:00:00.000 30          30          30          30          30          30          30
2007-04-30 00:00:00.000 30          30          30          30          30          30          30

(12 row(s) affected)
*/

--4.删除测试表
DROP TABLE Test
————————————————
原文链接:https://blog.csdn.net/dobear_0922/article/details/2393235

SAP 增强已经发展过几代了,可参考 SAP 标准教材 BC425 和 BC427。简单的说SAP的用户出口总共有四代:
1、第一代  基于源代码的增强。
SAP提供一个空代码的子过程,在这个子过程中用户可以添加自己的代码,控制自己的需求。这类增强都需要修改sap的标准代码。
示例:USEREXIT.. in SAPMV45A

源代码增强以子程序形式发布,在 SAP 的发行版本中,使用 PERFORM 调用这些子程序,它们在发布时都是空的,集中在一些文件名倒数第二个字符为 Z 的包含程序中。用户增强时,应首先到 service marketplace 申请对象键,然后才能修改这些子程序,这些子程序可以使用程序中所有的全局数据。
屏幕增强以客户屏幕形式发布,它们包含在标准程序中,没有什么特别规律。
这种源代码增强和屏幕增强的说明可以从事务码 spro 后台配置中相关模块的路径里面找到。
同时使用的针对数据表的增强是 append structure,可以在事务码 se11 中打开透明表,点击应用工具栏最右边的那个 append structure 按钮就能为数据表追加新的字段。
2、第二代 基于函数模块的增强。
SAP提供的是CUSTOMER-FUNCTION,它是通过SMOD和CMOD完成实现。

源代码增强以函数模块形式发布,在 SAP 的发行版本中,使用 CALL CUSTOMER-FUNCTION 调用这些函数模块,它们在发布时只有一句代码 INCLUDE xxxxxxx。用户增强时,无需申请对象键,直接双击这个包含,然后回车,就可以创建相关的包含文件,编写相应的代码了。这些函数模块中只能使用接口中传递的参数,不能使用调用程序的全局变量。
屏幕增强也包含在函数模块所属的函数组中。
针对数据表的增强是 CI_ 结构,这些结构以 .INCLUDE 结构的形式包含在 SAP 发布的数据表中,用户可以通过向这些结构中添加字段而对数据表进行增强。
上述这类增强通过事务码 SMOD 进行维护,CMOD 进行实现。SMOD 中的一个增强可以包含上述的源代码、屏幕和表结构增强,按照较容易理解的逻辑结构来管理这些增强,使用相对更加便利。
3、第三代  基于面向对象概念的增强。
SAP提供的第三代的用户出口就是BADI,它使用类、接口及方法等面向对象的概念,采用一种使用面向对象的方法来进行SAP 增强,他的调用方式是CALL METHOD (instance),(相关的TCODE是SE18和SE19),可以通过EXIT_HANDLER这个单词查找BADI。

BAdI(Business Add-Ins),源代码增强以接口形式发布,在 SAP 的发行版本中,也是通过接口的方法调用来使用。用户增强时,实际是实现一个(或多个)基于这个接口的实现类。由于接口可以有多个实现类,所以对一个增强可以有多种不同的源代码,它们通过过滤器应用于不同的业务场景。
这种增强使用事务码 SE18 创建、SE19 实现。

4、第四代:Switch Framework。
SAP 从 NetWeaver 7.0 以后推出的新增强体系,它对 BAdI 做出了改进,改叫新 BAdI 了。还新增 Enhancement Spot 和 Enhancement Section 以及隐式增强点的概念,基本可以在面向对象的程序里实现处处皆可增强的最高境界。


方法一、利用TCODE寻找增强(第二代的增强)
    执行一个程序(源代码后附),在选择屏幕处输入你所需要增强的程序TCODE,执行後,就会出现一个列表,那里就有关于如何增强这个的绝大部分SMOD增强。
    点击进去,本人手动寻找需要的增强。
    这是第二代增强

 

 方法二、利用系统函数寻找     
    MODX_FUNCTION_ACTIVE_CHECK
    在这个FUNCTION的代码最后添加一个断点。执行需要增强的TCODE,如果有增强,就会自动跳入DEBUG界面。在DEBUG界面,查看f_tab字段,这里面所显示的Smod就是关于这个TCODE所有的增强项目的列表。这些增强都是属于EXIT_XXXXXX_XXX这种形式。
    至于如何查看这个增强是属于哪个SMOD,查阅 MODSAP这个表(SAP Enhancements).
    这是第二代增强。


    还有一些FUNCTION供参考:
    [1].DYNP_VALUES_READ
    [2]. MODX_ALL_ACTIVE_MENUENTRIES(菜单增强)
    [3].MODX_FUNCTION_ACTIVE_CHECK(出口函数增强)
    [4].MODX_MENUENTRY_ACTIVE_CHECK(菜单增强)
    [5].MODX_SUBSCREEN_ACTIVE_CHECK(屏幕增强)
    这些的使用方法和上述的一样,能够针对各种情况寻找增强。


    方法三、从程序代码中找
对于第一代增强,可以用以下方法查找增强:
   在需要增强的程序里面,打开SYSTEM——》status,双击进入PROGRAM,打开欲增强的程序,点击工具栏上的“Display Object List”按钮,选择Subroutines,查找以“UserExit”开头的子程序,根据子程序前面的注释文档来查找用户出口, 由描述来确定合适的需要增强的FORM。

 

对于第二代增强,可以用以下方法查找增强

用户增强通常包括下面3类,顾名思义,就是增强SAP的可能没有提供的功能(通过后台配置也不能实现).
1.E Enhancement exits :就是常说User_exit (用户出口)
使用SE37搜索EXIT*的函数大都是做exit用的,通常里面预包含了一个Z开头
的程序. SE16查询TFDIR(函数表)输入EXIT*也可.
2.C GUI codes( GUI接口增强)
3. S Subscreens (屏幕增强)
Enhancement在表MODSAP可看到,而TFDIR字段 MAND(值为C表示此出口函数被激活).使用SMOD(CMOD)当然可激活exit function,有时候一时难以查询到相关Enhancement时可使用下面程序将出口函数激活.

REPORT Zactexitfun .
data ztfdir like tfdir .
* select single * from tfdir into ztfdir
* where FUNCNAME =
* 'EXIT_SAPMM06E_013'.
* ztfdir-MAND = 'C' .
* update tfdir from ztfdir.
* 将EXIT_SAPMM06E_013换成实际所需exit函数名
update tfdir set MAND = 'C'.
where FUNcname = 'EXIT_SAPMM06E_013'.

***当然也可SE16:MODSAP表enhancement输入EXIT_SAPMM06E_013然后得到enhancement name MM06E005后使用SMOD测试激活exit函数.

Table:
[1]. TFDIR->function module table
[2]. MODSAP->sap enhancement table
[3]. TSDIR->Dynpro Areas CALL CUSTOMER SUBSCREEN(屏幕增强)
[4]. CUATEXTS-> GUI Interface: Menu Texts Changed(GUI 菜单文本增强)

***注意,为了确保一个出口被真正应用,必须同时激活相关程序(SE38)和出口函数(SMOD|CMOD,反正就是要保证tfdir-mandt=’C’,用程序也可.
    方法四、针对BADI的增强 
     
    1、badi对象的消息存储在SXS_INTER, SXC_EXIT, SXC_CLASS 和SXC_ATTR 这四个表中。
来源:www.va1314.com/bc
    2、sap程序都会调用cl_exithandler=>get_instance来判断对象能否具有,并前往实例;其实get_instance就是对上述几个表和他们的视图(V_EXT_IMP 和 V_EXT_ACT)进行查询和搜索。

因此可以通过SE24-> CL_EXITHANDLE->方法GET_INSTANCE设置断点,获取相关的BADI。
    3、基于这个机理,用ST05来监控一个TCODE来跟踪,然后选择查找有关上述几个表和视图的操做,就可获得相关BADI。
    4、se18 查找接口,se19 实现接口就能够实现用户增强。

 

方法五、通过SPRO后台配置相关模块下的菜单查找,此处的增强组件有比较详细的说明

 

原文链接丢失,如有侵权,请与我联系删除

 

原文链接:https://www.cnblogs.com/icycore/p/10493237.html

有的时候,需要知道近段时间SQLSERVER执行了什么语句,可以用下面的方法:

SELECT     TOP 1000 QS.creation_time, SUBSTRING(ST.text, (QS.statement_start_offset / 2) + 1,
                      ((CASE QS.statement_end_offset WHEN - 1 THEN DATALENGTH(st.text) ELSE QS.statement_end_offset END - QS.statement_start_offset) / 2) + 1)
                      AS statement_text, ST.text, QS.total_worker_time, QS.last_worker_time, QS.max_worker_time, QS.min_worker_time
FROM         sys.dm_exec_query_stats QS CROSS APPLY sys.dm_exec_sql_text(QS.sql_handle) ST
WHERE     QS.creation_time BETWEEN '2017-09-09 10:00:00' AND '2017-09-11 18:00:00' AND ST.text LIKE '%%'
ORDER BY QS.creation_time DESC

原文链接:https://blog.csdn.net/wtxhai/article/details/90632686

        用户通过屏幕操作来实现与SAP的数据交互,而SAP的屏幕开发一般分为两种,一种是通过SAP ABAP语法创建屏幕元素,称之为选择屏幕,选择屏幕主要是用来输入查询参数;第二种是通过SAP的屏幕编辑器开发,通过屏幕编辑器可以实现数据多种展现模式。

1.1、屏幕基本输入域对象的创建及相关属性

         SAP中可以通过ABAP来创建屏幕元素,共分为两种模式,一种是通过SELECT-OPTIONS语法来建立数据输入域,另一种则是通过PARAMETERS语法来创建数据输入域。

1.1.1、屏幕元素创建的基本语法

          SELECT-OPTIONS与PARAMETERS的属性有很多相似之处,但是SELECT-OPTIONS创建的是一个输入的区间,其定义时必须制定参考表及参考字段,SELECT-OPTIONS<对象名>FOR<参考对象>。

PARAMETERS通常用于建立一个单一的屏幕输入对象,其参考对象相对比较灵活,可以参考数据表的字段,也可以参考具体的数据元素,PARAMETERS<对象名>LIKE/TYPE<参考对象>。

 

1.1.2、动态定义输入域的参考对象

        SAP允许动态定义屏幕输入域的对象,这样可以对一些需要动态变更屏幕元素的程序带来莫大的方便(例如SAP的表对象查询程序,则可以通过动态字段来变更查询输入条件)。动态对象的定义实际上是通过修改参考对象的地址来实现类型的变换,当参考对象的值与数据对象中的字段一致时,则会参考该数据字段类型建立屏幕对象,如下图所示:

 

 

1.1.3、屏幕输入域显示参数控制

        SELECT-OPTIONS和PARAMETERS的显示参数控制机制基本类似。

     1.OBLIGATORY必输项控制
        控制该屏幕元素是否为必输项,SELECT-OPTIONS一般只对下限值字段(LOW字段)有效。
     2.NO-DISPLAY显示控制
        程序运行后不显示该对象,SELECT-OPTIONS与PARAMETERS属性一致。
     3.VISIBLE LENGTH vlen显示长队控制
        控制对象的显示长度,其取值范围为1-18.
     4.NO-EXTENSION多行输入控制
        SELECT-OPTIONS和PARAMETERS所定义的对象都可以输入多行数值,加上该参数后,限制只能输入单一行,在屏幕对象后面的多行输入控制按钮将隐藏。
     5.NO-INTERVALS输入范围值控制
         该属性针对于SELECTION-OPTIONS所定义的对象是输入范围值,上限值到下限值,在内表中分别为“LOW”和“HIGH”两个字段,加上该参数后,在屏幕上只会显示上限值输入字段。
     6.MODIFY ID modid 编辑组控制
         该参数可以将定义的屏幕对象进行分组,以方便在程序运行中对分组的对象属性进行统一修改及控制,例如控制某组对象为不可输入,如下代码中将G2分钟的对象在屏幕输出时设置为不可输入。该属性 在SELECT-OPTIONS和PARAMETERS中的操作基本一致。

 

 

 

1.1.4、输入值的控制

        SAP提供数据输入控制参数来控制屏幕对象的输入值,包括如下。

     1.控制输入默认值
      ● DEFAULT vall [ TO val2 ] [ OPTION opt ] [ SIGN sgn]控制输入默认值范围
        该参数针对SELECT-OPTIONS所定义对象屏幕加载后所显示的默认值,其中vall [ TO val2 ]为输入值的上下限,OPTION代表数据关系,SIGN代表输入类型,具体如下表:

栏目名 参考值 描述
SIGN I或者E 输入类型,I表示包括,E表示排除
OPTION NB或者BT 表示前后输入栏关系,NB(不包括)、BT(包括)

 

         输入默认值范围也可以在程序加载时进行更改,代码如下:

 

 

    ● DEFAULT vall
        控制PARAMETERS所对应对象输入默认值范围:该参数定义对象在屏幕加载后所显示的默认值,输入默认值范围也可以在程序加载时进行更改。
    2. LOWER CASD允许输入小写字母
        SAP所有屏幕字段输入后都会将字母默认转换为大写,加上该参数允许输入小写字母。
    3. MATCHCODE OBJECT search help 屏幕对象F4帮助
        为屏幕对象加上指定的F4帮助,F4帮助功能会在数据字典章节做具体介绍,系统也提供了很多已经定义好的F4帮助对象,如下图所示。

 

 

    4. MEMORY ID pid 定义SELECT-OPTIONS内存参数
        可以将屏幕对象输入的值保存到制定的内存参数,通过GET PARAMETERS方法可以直接从内从读取该对象的值,如以下代码,将内存值取到制定字段并输出。

 

 

1.1.5屏幕对象的F1/F4输入帮助功能
    1. HELP-REQUEST [ FOR {LOW | HIGH} ]字段的F1帮助
         当选中SAP屏幕中的指定字段并按键盘上的F1时,可以调用自定义的程序或者系统帮助文件,该功能通常被称为F1帮助。F1帮助可以通过ABAP事件AT SELECTION-SCREEN来控制,在自定义程序中,可以通过调用系统标准函数HELP_OBJECT_SHOW(或者HELP_OBJECT_SHOW_FOR_FIELD)来实现。

 

 

     2.VALUE-REQUEST [ { LOW | HIGH } ] 字段的F4帮助
        当在指定的字段F4键时,可以调用自定义的程序或者系统帮助数据,该过程是通过但是F4事件来触发的,所以也可以通过ABAP语法事件控住语法AT SELECTION-SCREEN来调用。
        当该参数主要是在定义帮助数据时使用,在参照数据表建立的屏幕对象一般会取用默认帮助对象,与F1不同的是,F1是进行信息提示,而F4是显示填充值的列表,所以取得值将返回给所操作的屏幕对象,可以调用系统函数F4IF_FIELD_VALUE_REQUEST参照某一具体字段来维护F4帮助,如下所示:

 

 

     3.NO DATABASE SELECTION不选取逻辑数据库约束
        在调用逻辑数据库的程序中,往往会对用户输入的数据按权限来进行筛选,倘若在定义的对象后面加上NO DATABASE SELECTION参数,该对象所输入的对象则不会收到逻辑数据库的约束。
        目前ABAP中需要运用NO DATABASE SELECTION定义的逻辑数据库比较少,例如HR模块关联的PNP逻辑数据库中,其所有的帮助条件都采用Search Help的方式进行定义。而在引用逻辑数据库FIS开发的程序中,通过按F4键只能看到用户权限所限制的数据,以连接编号CONNID字段为例,通过按F4键只能看到用户被分配的CONNID的取值范围。在引用逻辑库的程序中,通过NO DATABASE SELECTION参数可以读取非限制条件的数据。逻辑数据库可以在ABAP编辑器的属性页面进行定义。执行逻辑数据库需要引用定义NODES或TABLES,使用NO DATABASE SELECTION定义如下:

 

 

    1.1.6、PARAMETERS屏幕元素的特性功能开发
                 PARAMETERS所创建的对象除了数据输入域外,还可以创建其他比较特殊的屏幕对象。
    1.定义复选框
       相关语法:PARAMETERS < 对象名 > AS CHECKBOX  [ USER-COMMAND fcode]
       在屏幕上产生一个复选框,当复选框对象被选中时,其值为“X”,否则为空。在所对应的对象后面加上命令[USER-COMMAND fcode ],可以定义该复选框的单击事件代码,在ABAP代码中,通过事件控制语句AT SELECTION-SCREEN和START-OF-SELECTION过程可以捕捉该单击事件。
        所操作的事务代码被保存在系统变量SY-UCOMM中,如下图:

 

 

     2.定义单选按钮
        相关语法:PARAMETERS < 对象名 > RADIOBUTTON GROUP group [ USER-COMMAND fcode ]
        在屏幕上产生一个单选按钮,当单选按钮被选中时,其值为“X”,否则为空。定义多个单选按钮,需要加上GROUP参数来定义分组,每组按钮数量不能小于两个。同一分组的单选按钮选择值之间会相互约束,每次只能有一个被选中。
        加上[ USER-COMMAND fcode ]可以定义该单选按钮的单价事件代码,ABAP中的AT SELECTION-SCREEN和START-OF-SELECTION过程中可以出发该事件,所操作的事件代码被保存到系统变量SY-UCOMM中。如下图:

 

 

       3.创建下拉列表

        相关语法:PARAMETERS < 对象名 > AS LISTBOX VISIBLE LENGTH vlen [ USER-COMMAND fcode ]

 

 

 

 


————————————————
版权声明:本文为CSDN博主「wtxhai」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wtxhai/article/details/90632686

原文链接:https://blog.csdn.net/wtxhai/article/details/90698683

1.2、SAP屏幕框架的创建
        SAP页面设计中的框架不但可以保证SAP程序外观设计的美观大方,并可以提供诸如按钮,页签等功能组件。
1.2.1、创建包含文本的基本框架
        基本框架的创建语法如下:
        SELECTION-SCREEN BEGIN OF BLOCK block [ WITH FRAME [ TITLE title ] ] [ NO INTERVALS ]. “限制所创建的框架只有一个输入项”
        SELEDTION-SCREEN END OF BLOCK block.

 

 

 

     1.2.2、实现屏幕元素质检的换行
    通过在框架结构中嵌入代码:SELECTION-SCREEN SKIP [ n ],能实现屏幕元素间的换行,n表示换行数目。

 

 

 

     1.2.3、在屏幕上输出直线
         通过语句SELECTION-SCREEN ULINE 1(79) [ / ][ pos ] ( len )可以实现在屏幕上画出一条直长度直线,其中[ / ]表示换行,[ pos ]表示直线起始的位置,( len )表示长度。

 

 

    1.2.4、在屏幕上输出自定义文本及图表
    SELECTION-SCREEN BEGION OF LINE.
   SELECTION-SCREEN COMMENT [ / ] [ pos ] ( len ) text. "len限制输入文本的长度
    SELECTION-SCREEN END OF LINE.

 

 

     1.2.5、在屏幕中实现按钮效果
     很多桌面程序的设计习惯通过按钮来实现与用户动作的交互。在SAP选择开发中也可以实现按钮功能。
     SELECTION-SCREEN PUSHBUTTON [ \ ] [ pos ] ( len ) button_text  "按钮的位置
                                                                                USER-COMMAND fcode      "为按钮分配事件功能代码
                                                                               [ VISIBLE LENGTH vlen ]      "输出长度
                                                                               [ MODIFY ID modid ]               "编辑组ID号码
    1.2.9、在屏幕上创建页签
      SAP允许直接通过ABAP代码在屏幕上创建一个页签。
      语法:SELECTION-SCREEN BEGIN OF TABBED BLOCK <block> FOR n LINES
      每个页签都是由一个单独的子屏幕控制,n代表分页控件的高度,屏幕载入时必须先通过INITIALIZATION事件对其初始化。

*&---------------------------------------------------------------------**& Report ZTEST_SELECTION_SCREEN*&---------------------------------------------------------------------**&*&---------------------------------------------------------------------*
REPORTztest_selection_screen.TABLES: mara.SELECTION-SCREEN BEGIN OF SCREEN 100 AS SUBSCREEN.  "定义子屏幕100
SELECTION-SCREEN BEGIN OF BLOCK a1 WITH FRAME TITLE TEXT-001.SELECT-OPTIONS : mat1 FOR mara-matnr NO INTERVALS.SELECTION-SCREEN SKIP 1.PARAMETERS chk1 AS CHECKBOX DEFAULT 'X'.SELECTION-SCREEN END OF BLOCKa1.SELECTION-SCREEN END OF SCREEN 100.*定义子屏幕200
SELECTION-SCREEN BEGIN OF SCREEN 200AS SUBSCREEN.PARAMETERS : mat2 LIKE mara-matnr.SELECTION-SCREEN END OF SCREEN 200.*定义一个TAB空间,取名为MYTAB,空间高度为5,共分为两个页签,BUTTON1,BUTTON2.*两个也签的功能代码分别为PUSH1,PUSH2
SELECTION-SCREEN : BEGIN OF TABBED BLOCK mytab FOR 5 LINES,
TAB (
20) button1 USER-COMMANDpush1,
TAB (
20) button2 USER-COMMANDpush2,END OF BLOCKmytab.*为TAB控件分配初始化值,引用TEXT element定义为本 INITIALIZATION.
button1
= TEXT-010.
button2
= TEXT-020.
mytab
-prog = sy-repid.
mytab
-dynnr = 100.*为TAB控件页签单击事件,选择不同的页签显示不同的子屏幕 AT SELECTION-SCREEN.CASE sy-ucomm.
WHEN
'PUSH1'.
mytab
-dynnr = 100.
mytab
-activetab = 'BUTTON1'.
WHEN
'PUSH2'.
mytab
-dynnr = 200.
mytab
-activetab = 'BUTTON2'.ENDCASE.