You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SAP ABAP手动创建传输请求后SCC1导入异常问题求助

Issue with Transport Request for Custom Configuration Tables: Only First Table's Record Imported via SCC1

我开发了一个程序,用于向5个自定义配置表中插入记录,目前需要自动创建传输请求(TR)来同步这些配置到其他客户端。

我尝试了两种方案,但都遇到了问题:

  • 方案1:使用函数模块TRINT_ORDER_CHOICE和TR_APPEND_TO_COMM_OBJS_KEYS
    • 在SE09中查看生成的传输请求,能正常显示5个表的所有条目及其键值
    • 但在目标客户端执行SCC1进行数据导入时,仅能获取第一个表的1条记录
  • 方案2:SM30批输入操作
    • 无论设置DISMODE = N还是DISMODE = A,均无法将记录添加至传输请求中,该操作无效

针对第一种方案,我编写了自定义类ZCL_INT_CREATE_TR,完整源代码如下:

CLASS ZCL_INT_CREATE_TR DEFINITION PUBLIC CREATE PUBLIC .
PUBLIC SECTION.
CONSTANTS GC_CUSTOMIZING_ORDER_TYPE type TRFUNCTION value 'W' ##NO_TEXT.
CONSTANTS GC_WORKBENCH_ORDER_TYPE type TRFUNCTION value 'K' ##NO_TEXT.
CONSTANTS GC_CUSTOMIZING_TASK_TYPE type TRFUNCTION value 'Q' ##NO_TEXT.
CONSTANTS GC_WORKBENCH_TASK_TYPE type TRFUNCTION value 'S' ##NO_TEXT.
CONSTANTS GC_CUSTOMIZING_ORDER_CATEGORY type TRCATEG value 'CUST' ##NO_TEXT.
CONSTANTS GC_WORKBENCH_ORDER_CATEGORY type TRCATEG value 'SYST' ##NO_TEXT.
DATA GV_ORDER type TRKORR read-only .
DATA GV_TASK type TRKORR read-only .
METHODS CONSTRUCTOR importing !IV_ORDER_TYPE type TRFUNCTION !IV_TASK_TYPE type TRFUNCTION !IV_CATEGORY type E070-KORRDEV .
METHODS ADD_TABLE importing !IR_DATA type ref to DATA .
METHODS CREATE .
PROTECTED SECTION.
PRIVATE SECTION.
types: BEGIN OF lty_tables,
table TYPE REF TO data,
END OF lty_tables .
types: ltty_tables TYPE STANDARD TABLE OF lty_tables .
data GO_BDC type ref to ZCL_UTL_BDC .
data GT_TABLES type LTTY_TABLES .
data GT_E71 type TT_E071 .
data GT_E71K type TRN_REG_TRANS_KEYS .
data GV_ORDER_TYPE type TRFUNCTION .
data GV_TASK_TYPE type TRFUNCTION .
data GV_CATEGORY type E070-KORRDEV .
methods CALL_TR_DIALOG .
methods FILL_E071 .
methods FILL_E071N importing !IS_E070 type E071 !IT_DATA type STANDARD TABLE !IO_STRDSCR type ref to CL_ABAP_STRUCTDESCR .
methods TR_APPEND_TO_COMM_OBJS_KEYS .
ENDCLASS.

CLASS ZCL_INT_CREATE_TR IMPLEMENTATION.
method ADD_TABLE.
APPEND INITIAL LINE TO me->gt_tables ASSIGNING FIELD-SYMBOL(<lfs_table>).
<lfs_table>-table = ir_data.
endmethod.
METHOD call_tr_dialog.
CALL FUNCTION 'TRINT_ORDER_CHOICE'
EXPORTING
wi_order_type = me->gv_order_type
wi_task_type = me->gv_task_type
wi_category = me->gv_category
IMPORTING
we_order = me->gv_order
we_task = me->gv_task
TABLES
wt_e071 = me->gt_e71
wt_e071k = me->gt_e71k.
ENDMETHOD.
method CONSTRUCTOR.
me->gv_order_type = iv_order_type.
me->gv_task_type = iv_task_type.
me->gv_category = iv_category.
endmethod.
METHOD create.
me->call_tr_dialog( ).
me->fill_e071( ).
me->tr_append_to_comm_objs_keys( ).
ENDMETHOD.
METHOD FILL_E071.
DATA: lo_strucdescr TYPE REF TO cl_abap_structdescr.
DATA: lo_tabledescr TYPE REF TO cl_abap_tabledescr.
FIELD-SYMBOLS: <lfs_tab> TYPE STANDARD TABLE.
LOOP AT me->gt_tables INTO DATA(ls_table).
TRY.
ASSIGN ls_table-table->* TO <lfs_tab>.
IF <lfs_tab> IS ASSIGNED.
lo_tabledescr ?= cl_abap_elemdescr=>describe_by_data_ref( ls_table-table ).
lo_strucdescr ?= lo_tabledescr->get_table_line_type( ).
DATA(ls_header) = lo_strucdescr->get_ddic_header( ).
APPEND INITIAL LINE TO me->gt_e71 ASSIGNING FIELD-SYMBOL(<lfs_e71>).
<lfs_e71>-pgmid = 'R3TR'.
<lfs_e71>-object = 'TABU'.
<lfs_e71>-obj_name = ls_header-tabname.
<lfs_e71>-objfunc = 'K'.
<lfs_e71>-as4pos = lines( me->gt_e71 ).
<lfs_e71>-lang = sy-langu.
me->fill_e071n( EXPORTING is_e070 = <lfs_e71> it_data = <lfs_tab> io_strdscr = lo_strucdescr ).
ENDIF.
CATCH cx_sy_move_cast_error .
ENDTRY.
ENDLOOP.
ENDMETHOD.
METHOD fill_e071n.
DATA(lt_tab_fields) = io_strdscr->get_ddic_field_list( ).
LOOP AT it_data ASSIGNING FIELD-SYMBOL(<lfs_data>).
APPEND INITIAL LINE TO me->gt_e71k ASSIGNING FIELD-SYMBOL(<lfs_e071k>).
<lfs_e071k>-pgmid = is_e070-pgmid.
<lfs_e071k>-object = is_e070-object.
<lfs_e071k>-objname = is_e070-obj_name.
<lfs_e071k>-mastertype = is_e070-object.
<lfs_e071k>-mastername = <lfs_e071k>-objname.
<lfs_e071k>-lang = sy-langu." <lfs_e071k>-lang.
LOOP AT lt_tab_fields INTO DATA(ls_field) WHERE keyflag = 'X'.
ASSIGN COMPONENT ls_field-fieldname OF STRUCTURE <lfs_data> TO FIELD-SYMBOL(<lfs_value>).
<lfs_e071k>-tabkey = <lfs_e071k>-tabkey && <lfs_value>.
ENDLOOP.
ENDLOOP.
ENDMETHOD.
METHOD tr_append_to_comm_objs_keys.
CALL FUNCTION 'TR_APPEND_TO_COMM_OBJS_KEYS'
EXPORTING
wi_trkorr = me->gv_task
TABLES
wt_e071 = me->gt_e71
wt_e071k = me->gt_e71k.
ENDMETHOD.
ENDCLASS.

以下是该类的使用示例(用虚拟表ztdummy1至ztdummy5代表实际的5个自定义配置表):

DATA: lo_tr TYPE REF TO zcl_int_create_tr.
SELECT * FROM ztdummy1 INTO TABLE @data(ltdummy1) WHERE id_dummy = 7.
SELECT * FROM ztdummy2 INTO TABLE @data(ltdummy2) WHERE id_dummy = 7.
SELECT * FROM ztdummy3 INTO TABLE @data(ltdummy3) WHERE id_dummy = 7.
SELECT * FROM ztdummy4 INTO TABLE @data(ltdummy4) WHERE id_dummy = 7.
SELECT * FROM ztdummy5 INTO TABLE @data(ltdummy5) WHERE id_dummy = 7.
CREATE OBJECT lo_tr
EXPORTING
iv_order_type = zcl_int_create_tr=>gc_customizing_order_type
iv_task_type = zcl_int_create_tr=>gc_customizing_task_type
iv_category = zcl_int_create_tr=>gc_customizing_order_category.
lo_tr->add_table( REF #( ltdummy1 ) ).
lo_tr->add_table( REF #( ltdummy2 ) ).
lo_tr->add_table( REF #( ltdummy3 ) ).
lo_tr->add_table( REF #( ltdummy4 ) ).
lo_tr->add_table( REF #( ltdummy5 ) ).
lo_tr->create( ).

恳请各位技术同仁帮忙分析问题根源,提供可行的解决方案,非常感谢!


内容的提问来源于stack exchange,提问作者Ronaldo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 14:53:13