ABAP FAQS(译自:sdn.sap.com)

本文介绍如何使用ABAP编程语言中的类CL_ABAP_TYPEDESCR来动态获取透明表的所有字段名,并提供了一个限制选择屏幕选项的例子,展示了如何禁用特定的选择条件。

1.         动态取得字段名字

有时你只知道一个透明表的名字,但是你想知道透明表中所有字段的名字。比如你想使用如下语句:ASSIGN COMPONENT fieldname OF TABLE tablename

一般情况下大家可能会想到标准SAPDD02LDD03L

这么做的主要缺点是程序运行的速度较慢,我们还可以使用类CL_ABAP_TYPEDESCR的方法达到目的,下面是一段例子代码:

REPORT ZLVFLD .

DATA: descr_struc_ref TYPE REF TO cl_abap_structdescr.

descr_struc_ref ?= cl_abap_typedescr=>describe_by_name('SFLIGHT').

其运行的结果如下图所示:

你可以得到关于这个表的很多信息。这个类也可以用来处理结构,表类型等。值得注意的是使用这种方法的速度要快得多,因为它是通过SYSTEM CALL实现了对数据库层的直接访问

2.         限制选择屏幕

当你在选择屏幕上创建选择范围输入框时,你在选择范围时,通常看到的如下图所示:

缺省的选择条件如下图所示:

可是有时候你可能不希望用户选择‘Greater than’项

下面的代码是实现这些功能的一个小例子:

REPORT ZLVSR .

TYPE-POOLS: sscr.

TABLES: sflight.

SELECT-OPTIONS: s_carrid FOR sflight-carrid.

DATA: restrict TYPE sscr_restrict.

DATA: optlist TYPE sscr_opt_list,

               ass     TYPE sscr_ass.

DATA: v_repid LIKE sy-repid.

INITIALIZATION.

v_repid = sy-repid.

optlist-name = 'OBJECTKEY1'.

optlist-options-eq = 'X'.

optlist-options-bt = 'X'.

APPEND optlist TO restrict-opt_list_tab.

ass-kind = 'S'.

ass-name = 'S_CARRID'.

ass-sg_main = 'I'.

ass-sg_addy = space.

ass-op_main = 'OBJECTKEY1'.

APPEND ass TO restrict-ass_tab.

CALL FUNCTION 'SELECT_OPTIONS_RESTRICT'

        EXPORTING

        PROGRAM                      = v_repid

        restriction                  = restrict

  EXCEPTIONS

        TOO_LATE                     = 1

        REPEATED                     = 2

        SELOPT_WITHOUT_OPTIONS       = 3

        SELOPT_WITHOUT_SIGNS         = 4

        INVALID_SIGN                 = 5

        EMPTY_OPTION_LIST            = 6

        INVALID_KIND                 = 7

        REPEATED_KIND_A              = 8

        OTHERS                       = 9.

IF sy-subrc <> 0.

ENDIF.

将会产生如下的效果:

 

 

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值