发表时间:2009-04-04
最后修改:2009-04-04
1. 获取DDIC中的table,view.structure的结构的每个字段。
FORM get_components_ddic USING p_name TYPE any
CHANGING pt_component TYPE abap_component_tab.
DATA : lrf_linetype TYPE REF TO cl_abap_structdescr.
lrf_linetype ?= cl_abap_structdescr=>describe_by_name( p_name ).
pt_component = lrf_linetype->get_components( ).
ENDFORM . "get_components_ddic
知道了字段名后,则可以动态访问这个字段的值。以名称:值形式输出如:
FORM handle_detail_item_data USING p_ddic_name TYPE any
p_list TYPE ANY TABLE .
FIELD -SYMBOLS: <l_comp> TYPE ANY ,
<l_component> TYPE abap_componentdescr,
<l_comp_value> TYPE ANY .
DATA :lt_component TYPE abap_component_tab,
l_str TYPE string,
l_pos TYPE i .
PERFORM get_components_ddic USING p_ddic_name
CHANGING lt_component.
LOOP AT lt_component ASSIGNING <l_component>.
WRITE :/ , AT 5 (10 ) <l_component>-name LEFT -JUSTIFIED.
CLEAR l_pos.
LOOP AT p_list ASSIGNING <l_comp>.
l_pos = l_pos + 20 .
CONCATENATE '<l_comp>-' <l_component>-name INTO l_str.
ASSIGN (l_str) TO <l_comp_value>.
WRITE : AT l_pos
<l_comp_value> LEFT -JUSTIFIED .
ENDLOOP .
ENDLOOP .
ENDFORM . " hadle_detail_item_data
注意<l_comp_value>这个field symbol中即为字段的值。
2. OPEN SQL
data : itab type STANDARD TABLE OF sflight with HEADER LINE .
select *
into TABLE itab
from ('sflight' )
.
loop at itab.
WRITE : / itab-carrid.
ENDloop .
表名可以动态化,条件也可以动态化。如
select *
into TABLE itab
from ('sflight' )
where ( where_str).
注意where_str是个内表,行类型是字符串。
而且结合上例中取得表中的各个字段名,可以实现如SE16的效果。
PS: 主要为field symbol与RTTS的使用,因为动态编程中只有到运行期才确定,所以会带来性能上的下降并且会避开语法检查阶段,如果不是特别需要,不要使用。