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
相关产品推荐
相关产品推荐

