原文出自:http://www.cnblogs.com/jiangzhengjun/archive/2015/01/31/4263775.html
1.13. 动态语句
1.13.1. 内表动态访问
SORT itab BY (comp1)...(compn)
READ TABLE itab WITH KEY (k1)=v1...(kn)=vn
READ TABLE itab... INTO wa COMPARING (comp1)...(compn) TRANSPORTING (comp1)...
MODIFY [TABLE] itab TRANSPORTING (comp1)...(compn)
DELETE TABLE itab WITH TABLE KEY (comp1)...(compn)
DELETE ADJACENT DUPLICATES FROM itab COMPARING (comp1)...(compn)
AT NEW/END OF (comp)
1.13.2. 动态类型
CREATE DATA ... TYPE (type)...
DATA: a TYPE REF TO i.
CREATE DATA a TYPE ('I').
a->* = 1.
CREATE OBJECT ... TYPE (type)...请参考类对象反射章节
1.13.3. 动态SQL
Select请参照后面的动态SQL
MODIFY/ UPDATE (dbtab)...
1.13.4. 动态调用类的方法
CALL METHOD (meth_name)
| cref->(meth_name)
| iref->(meth_name)
| (class_name)=>(meth_name)
| class=>(meth_name)
| (class_name)=>meth
实例请参考类对象反射章节
1.13.5. ASSIGN 动态分配
FIELD-SYMBOLS:<fs>.
DATA:str(20) TYPE c VALUE 'Output String',
name(20) TYPE c VALUE 'STR'.
"静态分配:编译时就知道要分配的对象名
ASSIGN name TO <fs>."结果是<fs>与name变量等同
"通过变量名动态访问变量
ASSIGN (name) TO <fs>."结果是是<fs>的值为str变量值
DATA: BEGIN OF line,
col1 TYPE i VALUE '11',
col2 TYPE i VALUE '22',
col3 TYPE i VALUE '33',
END OF line.
DATA comp(5) VALUE 'COL3'.
FIELD-SYMBOLS: <f1>, <f2>, <f3>.
ASSIGN line TO <f1>.
ASSIGN comp TO <f2>.
"还可以直接使用以下的语法访问其他程序中的变量
ASSIGN ('(ZJDEMO)SBOOK-FLDATE') TO <fs>.
"通过索引动态的访问结构成员
ASSIGN COMPONENT sy-index OF STRUCTURE <f1> TO <f3>.
"通过字段名动态的访问结构成员
ASSIGN COMPONENT <f2> OF STRUCTURE <f1> TO <f3>.
"如果定义的内表没有组件名时,可以使用索引为0的组件来访问这个无名字段(注:不是1)
ASSIGN COMPONENT 0 OF STRUCTURE itab TO <fs>.
1.13.5.1. 动态访问类的属性成员
ASSIGN oref->('attr') TO <attr>.
ASSIGN oref->('static_attr') TO <attr>.
ASSIGN ('C1')=>('static_attr') TO <attr>.
ASSIGN c1=>('static_attr') TO <attr>.
ASSIGN ('C1')=>static_attr TO <attr>.
实例请参考类对象反射章节
本文介绍了ABAP中实现动态编程的多种方法,包括内表动态访问、动态类型、动态SQL、动态调用类的方法及ASSIGN动态分配等内容,旨在帮助开发者提高程序灵活性。

1135

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



