1. 动态取得字段名字
有时你只知道一个透明表的名字,但是你想知道透明表中所有字段的名字。比如你想使用如下语句:ASSIGN COMPONENT fieldname OF TABLE tablename
一般情况下大家可能会想到标准SAP表DD02L,DD03L等
这么做的主要缺点是程序运行的速度较慢,我们还可以使用类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.
将会产生如下的效果:
本文介绍如何使用ABAP编程语言中的类CL_ABAP_TYPEDESCR来动态获取透明表的所有字段名,并提供了一个限制选择屏幕选项的例子,展示了如何禁用特定的选择条件。
&spm=1001.2101.3001.5002&articleId=1684584&d=1&t=3&u=a6c85503c2714459b32541fff613b7c4)
3505

被折叠的 条评论
为什么被折叠?



