abap 动态编程 dynamic programming in abap

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的使用,因为动态编程中只有到运行期才确定,所以会带来性能上的下降并且会避开语法检查阶段,如果不是特别需要,不要使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值