Chinaunix首页 | 论坛 | 博客
  • 博客访问: 710317
  • 博文数量: 145
  • 博客积分: 3446
  • 博客等级: 中校
  • 技术积分: 1567
  • 用 户 组: 普通用户
  • 注册时间: 2006-08-30 13:58
文章分类

全部博文(145)

文章存档

2021年(1)

2020年(1)

2019年(1)

2018年(6)

2017年(1)

2016年(10)

2015年(12)

2014年(10)

2013年(15)

2012年(33)

2011年(21)

2010年(9)

2009年(18)

2008年(2)

2006年(5)

我的朋友

分类: Web开发

2006-09-01 11:39:20

有感于权限太小(没有se11,12,16),准备研究一下动态内表,准备结合动态内表和动态查询写一个function,达到类试se16的功能。
 
  data tabname type tabname .
  data where_clause type string .

  data: d_ref type ref to data.
  field-symbols: type table.
  data: dr_line  type ref to data.
  field-symbols: type any.
  data: i_alv_cat type table of lvc_s_fcat,
        ls_alv_cat like line of i_alv_cat.

  call function 'LVC_FIELDCATALOG_MERGE'
    exporting
      i_structure_name = tabname
    changing
      ct_fieldcat      = i_alv_cat.

* internal table build
  call method cl_alv_table_create=>create_dynamic_table
    exporting
      it_fieldcatalog = i_alv_cat
    importing
      ep_table        = d_ref.
  assign d_ref->* to .

* Create dynamic work area and assign to FS
  create data dr_line like line of .
  assign dr_line->* to .
* get data
  select * into table
    from (tabname)
    where (where_clause) .

初步解决一下,还有很多问题,关键是怎么把转换成普通内表。


定义动态结构 方案2:

    DATAlt_ztp009 TYPE TABLE OF ztp009,
          ls_ztp009 TYPE ztp009,
          dyn_wa    TYPE REF TO data.
    FIELD-SYMBOLS    TYPE any,
                    TYPE any.


    CREATE DATA dyn_wa TYPE (iv_attribute_structure_name).       " 定义动态结构
    ASSIGN dyn_wa->TO .

          ASSIGN COMPONENT ls_ztp009-fieldname OF STRUCTURE  TO .
          CLEAR   .



详细CODE:
SPAN { font-family: "Courier New"; font-size: 10pt; color: #000000; background: #FFFFFF; } .L0S31 { font-style: italic; color: #808080; } .L0S32 { color: #3399FF; } .L0S33 { color: #4DA619; } .L0S52 { color: #0000FF; } .L0S55 { color: #800080; } .L0S70 { color: #808080; } FUNCTION zfm_code_add.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     REFERENCE(IV_TABNAME) TYPE  TABNAME
*"----------------------------------------------------------------------

************定义变量
  DATAlt_fieldcat TYPE lvc_t_fcat,
        ls_fieldcat TYPE lvc_s_fcat,
        d_ref       TYPE REF TO data,
        dr_line     TYPE REF TO data.
  FIELD-SYMBOLS TYPE ANY TABLE,
                   TYPE any,
                  TYPE any.
****************************************************


  CHECK iv_tabname IS NOT INITIAL .

*********获得表结构
  REFRESH lt_fieldcat .
  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
    EXPORTING
      i_structure_name       iv_tabname
    CHANGING
      ct_fieldcat            lt_fieldcat
    EXCEPTIONS
      inconsistent_interface 1
      program_error          2
      OTHERS                 3.

  CHECK lt_fieldcat[] IS NOT INITIAL .

*********创建动态内表
  CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING
      it_fieldcatalog lt_fieldcat
    IMPORTING
      ep_table        d_ref.
  ASSIGN d_ref->TO .

*********创建动态内表工作区
  CREATE DATA dr_line LIKE LINE OF .
  ASSIGN dr_line->TO  .

*********动态内表取数
  SELECT INTO TABLE 
     FROM (iv_tabname.
*     where (where_clause) .

******** 动态内表 值处理
  LOOP AT  ASSIGNING .

    CLEAR ls_fieldcat .
    LOOP AT lt_fieldcat INTO ls_fieldcat.

      ASSIGN COMPONENT ls_fieldcat-fieldname OF STRUCTURE  TO  .

*      = '' .

      CLEAR ls_fieldcat .
    ENDLOOP.

  ENDLOOP.

ENDFUNCTION.
 


http://www.cnblogs.com/VerySky/articles/2514436.html

SPAN { font-family: "Courier New"; font-size: 10pt; color: #000000; background: #FFFFFF; } .L0S31 { font-style: italic; color: #808080; } .L0S32 { color: #3399FF; } .L0S33 { color: #4DA619; } .L0S52 { color: #0000FF; } .L0S55 { color: #800080; } .L0S70 { color: #808080; } FUNCTION zfm_code_add1.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     REFERENCE(P_NAME) TYPE  TABNAME DEFAULT 'BUT000'
*"----------------------------------------------------------------------

  DATAlt_table  TYPE TABLE OF dfies"字段结构表
        ls_table  TYPE dfies,
        lr_struc  TYPE REF TO cl_abap_structdescr,
        lr_table  TYPE REF TO cl_abap_tabledescr,
        lr_type   TYPE REF TO cl_abap_typedescr,
        lr_data   TYPE REF TO cl_abap_datadescr,
        lt_comp   TYPE  abap_component_tab,
        ls_comp   LIKE LINE OF  lt_comp,
        dyn_wa    TYPE REF TO data,
        dyn_table TYPE REF TO data,
        l_string  TYPE string.

  FIELD-SYMBOLS TYPE STANDARD TABLE,
                     TYPE any.

*1.获取表中的字段结构
  CALL FUNCTION 'DDIF_NAMETAB_GET'
    EXPORTING
      tabname   p_name
    TABLES
      dfies_tab lt_table
    EXCEPTIONS
      not_found 1
      OTHERS    2.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.


  LOOP AT lt_table INTO ls_table.

    CONCATENATE ls_table-tabname '-' ls_table-fieldname INTO l_string.

    ls_comp-name ls_table-fieldname.
*读取字段类型
    CALL METHOD cl_abap_datadescr=>describe_by_name
      EXPORTING
        p_name         l_string
      RECEIVING
        p_descr_ref    lr_type
      EXCEPTIONS
        type_not_found 1
        OTHERS         2.
    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.

    ls_comp-type ?= lr_type.
    APPEND ls_comp TO lt_comp.
    CLEAR ls_comp.
  ENDLOOP.

*根据字段目录创建动态结构类型
  CALL METHOD cl_abap_structdescr=>create
    EXPORTING
      p_components lt_comp
    RECEIVING
      p_result     lr_struc.

*根据动态结构创建动态内表类型
  CALL METHOD cl_abap_tabledescr=>create
    EXPORTING
      p_line_type lr_struc
    RECEIVING
      p_result    lr_table.

*参照动态结构类型和动态内表类型创建内表与工作区
  CREATE DATA dyn_wa    TYPE HANDLE lr_struc.
  CREATE DATA dyn_table TYPE HANDLE lr_table.

*指定内表与工作区到字段符号
  ASSIGN dyn_wa->TO .
  ASSIGN dyn_table->TO .




ENDFUNCTION.

阅读(1813) | 评论(8) | 转发(0) |
给主人留下些什么吧!~~