zoukankan      html  css  js  c++  java
  • ABAP-基于MEMORY动态传参

    EXPORT ... TO MEMORY ID ...

    IMPORT ... TO MEMORY ID ...

    如何传递动态内表数据:

    1.发送方根据动态内表记录重新生成新的内表结构体,并将动态数据转换到新的内表,传值两个记录表:结构体,数据记录。

    2.接收方根据结构体重新生成新的内表,根据新生成内表接收数据。

    1.发送方

    function zfgtr_17_bill_detail.
    *"----------------------------------------------------------------------
    *"*"本地接口:
    *"  TABLES
    *"      ET_RETURN STRUCTURE  BAPIRET2 OPTIONAL
    *"      IT_ANY_TAB OPTIONAL
    *"      IT_ANY_TAB_01 OPTIONAL
    *"----------------------------------------------------------------------
      data:
        lr_any_t  type ref to data,
        lr_any_s  type ref to data.
      data:
        lr_dref   type ref to data,
        lr_stru   type ref to cl_abap_structdescr,
        lr_table  type ref to cl_abap_tabledescr,
        lr_elem   type ref to cl_abap_elemdescr,
        lt_para   type cl_abap_structdescr=>component_table,
        lt_comp   type cl_abap_structdescr=>component_table.
      field-symbols:
        <fs_tab>  type any,
        <ft_tab>  type standard table.
    
      try.
    lr_stru ?
    = cl_abap_tabledescr=>describe_by_data( it_any_tab_01 ). loop at lr_stru->components[] into data(ls_comps). if ls_comps-type_kind = 'P' or ls_comps-type_kind = 'X'. else. ls_comps-length = ls_comps-length / 2. endif. append initial line to lt_comp assigning field-symbol(<fs_comp>). <fs_comp>-name = ls_comps-name. <fs_comp>-type ?= cl_abap_elemdescr=>get_by_kind( p_type_kind = ls_comps-type_kind p_length    = ls_comps-length p_decimals = ls_comps-decimals ). unassign <fs_comp>. endloop. if lt_comp[] is not initial. clear:lr_stru,lr_table. lr_stru = cl_abap_structdescr=>create( lt_comp ). lr_table = cl_abap_tabledescr=>create( lr_stru ). create data lr_any_s type handle lr_stru. assign lr_any_s->* to <fs_tab>. create data lr_any_t type handle lr_table. assign lr_any_t->* to <ft_tab>. endif. move-corresponding it_any_tab_01[] to <ft_tab>[]. free memory id 'ZDTR0780_V1'. free memory id 'ZDTR0780_V2'. export tab = lr_stru->components to memory id 'ZDTR0780_V1'. export tab = <ft_tab>[] to memory id 'ZDTR0780_V2'. submit zdtr0780 and return.
    catch cx_root into data(lr_root). data(lv_msg)
    = lr_root->get_text( ). perform frm_public_message_get tables et_return using 'ZMCTR0040' '000' 'E' lv_msg space space space. endtry. endfunction.

    2.接收方

    form frm_get_data .
      data:
        lr_any_t  type ref to data,
        lr_any_s  type ref to data.
      data:
        lr_dref   type ref to data,
        lr_stru   type ref to cl_abap_structdescr,
        lr_table  type ref to cl_abap_tabledescr,
        lr_elem   type ref to cl_abap_elemdescr,
        lt_para   type cl_abap_structdescr=>component_table,
        lt_comp   type cl_abap_structdescr=>component_table.
      data:
        lt_comps  type table of abap_compdescr.
      field-symbols:
        <fs_tab>  type any,
        <ft_tab>  type standard table.
    
      import tab = lt_comps from memory id 'ZDTR0780_V1'.
    
      loop at lt_comps into data(ls_comps).
        if ls_comps-type_kind = 'P'
        or ls_comps-type_kind = 'X'.
        else.
          ls_comps-length = ls_comps-length / 2.
        endif.
    
        append initial line to lt_comp assigning field-symbol(<fs_comp>).
        <fs_comp>-name  =   ls_comps-name.
        <fs_comp>-type  ?=  cl_abap_elemdescr=>get_by_kind(
                            p_type_kind  = ls_comps-type_kind
                            p_length     = ls_comps-length
                            p_decimals   = ls_comps-decimals ).
        unassign <fs_comp>.
      endloop.
    
      if lt_comp[] is not initial.
        clear:lr_stru,lr_table.
        lr_stru   =   cl_abap_structdescr=>create( lt_comp ).
        lr_table  =   cl_abap_tabledescr=>create( lr_stru ).
    
        create data lr_any_s type handle lr_stru.
        assign lr_any_s->* to <fs_tab>.
    
        create data lr_any_t type handle lr_table.
        assign lr_any_t->* to <ft_tab>.
      endif.
    
      import tab = <ft_tab>[] from memory id 'ZDTR0780_V2'.
      free memory id 'ZDTR0780_V1'.
      free memory id 'ZDTR0780_V2'.
    move
    -corresponding <ft_tab>[] to gt_alv[].
    endform.
  • 相关阅读:
    vue 中使用阿里iconfont彩色图标
    团队作业九
    团队作业八
    团队作业七
    第二篇
    第三篇
    第一篇
    beta冲刺计划安排
    团队作业六
    团队作业五
  • 原文地址:https://www.cnblogs.com/ricoo/p/13882973.html
Copyright © 2011-2022 走看看