物料主数据批导
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
物料主数据批导
*&---------------------------------------------------------------------*
*& Report ZMAINTAIN_MATERAIL
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zmaintain_materail.
CONSTANTS cnst_excel_file_path_name TYPE string VALUE '物料主数据导⼊Excel⽂件路径'.
CONSTANTS cnst_button_text TYPE string VALUE '执⾏物料导⼊'.
CONSTANTS cnst_button_text_test TYPE string VALUE '导⼊测试,不提交数据库'.
CONSTANTS cnst_button_text_bg TYPE string VALUE '提交后台执⾏'.
CONSTANTS cnst_button_text_job_info TYPE string VALUE '查看JOB信息'.
CONSTANTS cnst_template_name TYPE string VALUE '物料主数据导⼊模板'.
*//***************************************************************************
TABLES sscrfields.
DATA functxt TYPE smp_dyntxt.
TYPE-POOLS icon.
SELECTION-SCREEN: FUNCTION KEY 1,FUNCTION KEY 2.
*//***************************************************************************
PARAMETERS p_file TYPE rlgrap-filename.
PARAMETERS p_bg TYPE abap_bool DEFAULT abap_false NO-DISPLAY."// ⽤于标识后台执⾏,创建job时赋值ABAP_TRUE PARAMETERS p_srtfd TYPE indx_srtfd NO-DISPLAY."//⽤于保存内表
PARAMETERS p_srtfd1 TYPE indx_srtfd NO-DISPLAY. "//⽤于保存内表结构
*//***************************************************************************
DATA: BEGIN OF gs_field,
fieldname TYPE fieldname,
END OF gs_field.
DATA gt_fields LIKE TABLE OF gs_field.
*//***************************************************************************
DATA: BEGIN OF gs_field_list,
fieldname TYPE string,
fielddesc TYPE string,
END OF gs_field_list,
gt_fields_list LIKE TABLE OF gs_field_list.
*//***************************************************************************
DATA gs_job TYPE tbtcjob.
DATA gs_job_return TYPE bapiret2.
DATA go_job TYPE REF TO zcl_job.
*//***************************************************************************
DATA gr_error TYPE REF TO cx_root.
DATA gv_test_run TYPE char1 VALUE IS INITIAL.
DATA gv_background TYPE abap_bool VALUE abap_false.
FIELD-SYMBOLS <gt_output> TYPE STANDARD TABLE.
DATA gt_output_table TYPE REF TO data.
*//***************************************************************************
*//***************************************************************************
CLASS lcl_process DEFINITION.
PUBLIC SECTION.
CLASS-DATA: lo_salv TYPE REF TO cl_salv_table,
lo_container TYPE REF TO cl_gui_container,
lo_docking TYPE REF TO cl_gui_docking_container,
lo_events TYPE REF TO cl_salv_events_table.
CLASS-DATA: lr_columns TYPE REF TO cl_salv_columns.
CLASS-DATA lr_column TYPE REF TO cl_salv_column.
CLASS-DATA lr_columns_table TYPE REF TO cl_salv_columns_table.
CLASS-DATA lr_column_table TYPE REF TO cl_salv_column_table.
CLASS-DATA component_tab TYPE cl_abap_structdescr=>component_table.
CLASS-METHODS read_excel IMPORTING i_file TYPE rlgrap-filename
CHANGING it_table TYPE STANDARD TABLE OPTIONAL.
CLASS-METHODS display
IMPORTING button_text TYPE string OPTIONAL
CHANGING it_table TYPE STANDARD TABLE OPTIONAL.
CLASS-METHODS on_user_command FOR EVENT added_function OF cl_salv_events IMPORTING e_salv_function. CLASS-METHODS on_link_click FOR EVENT if_salv_events_actions_table~link_click OF cl_salv_events_table
IMPORTING row column.
CLASS-METHODS on_doubleclick FOR EVENT if_salv_events_actions_table~double_click OF cl_salv_events_table IMPORTING sender row column.
CLASS-METHODS refresh.
CLASS-DATA: BEGIN OF gwa_field_relation,
excel_original_text TYPE string,
excel_fieldname TYPE string,
excel_column_seq TYPE i,
tab_desc TYPE string.
INCLUDE TYPE dfies.
CLASS-DATA:END OF gwa_field_relation.
CLASS-DATA gt_field_relation LIKE TABLE OF gwa_field_relation.
CLASS-METHODS prepare_field_relation_logic IMPORTING tabname TYPE char30.
CLASS-METHODS prepare_field_relation.
CLASS-DATA: BEGIN OF gs_bapi_ext_relation,
tabname TYPE char30,
fieldname TYPE char30,
tabname_bapi_ext TYPE char30,
fieldname_bapi_ext TYPE char30,
tabname_bapi_extx TYPE char30,
bapi_ext_row TYPE REF TO data,
bapi_ext_rowx TYPE REF TO data,
END OF gs_bapi_ext_relation,
gt_bapi_ext_relation LIKE TABLE OF gs_bapi_ext_relation.
ENDCLASS.
*//***************************************************************************
*//***************************************************************************
START-OF-SELECTION.
IF p_bg = abap_false.
gv_background = abap_false.
lcl_process=>read_excel( i_file = p_file ).
CHECK <gt_output> IS ASSIGNED.
CHECK <gt_output> IS NOT INITIAL.
lcl_process=>display( EXPORTING button_text = cnst_button_text CHANGING it_table = <gt_output> ). ELSE.
CLEAR gt_fields.
IMPORT itab_structure = gt_fields FROM DATABASE indx(zx) ID p_srtfd1.
IF gt_fields IS INITIAL.
MESSAGE'⽆法获取所处理的内表的结构'TYPE'S' DISPLAY LIKE'E'.
RETURN.
ENDIF.
DATA go_structdescr TYPE REF TO cl_abap_structdescr.
DATA go_tabledesc TYPE REF TO cl_abap_tabledescr.
DATA go_datadescr TYPE REF TO cl_abap_datadescr.
DATA gt_components TYPE abap_component_tab.
CLEAR gt_components.
go_datadescr ?= cl_abap_datadescr=>describe_by_name( 'STRING' ).
LOOP AT gt_fields ASSIGNING FIELD-SYMBOL(<ls_field>).
APPEND INITIAL LINE TO gt_components ASSIGNING FIELD-SYMBOL(<gs_component>).
IF <ls_field>-fieldname <> '_RETURN'.
<gs_component>-name = <ls_field>-fieldname.
<gs_component>-type = go_datadescr.
ELSE.
DATA return_temp TYPE TABLE OF bapi_matreturn2.
<gs_component>-name = <ls_field>-fieldname.
<gs_component>-type ?= cl_abap_datadescr=>describe_by_data( return_temp )..
ENDIF.
ENDLOOP.
TRY.
go_structdescr = cl_abap_structdescr=>create( gt_components ).
go_tabledesc = cl_abap_tabledescr=>create( go_structdescr ).
CATCH cx_root INTO DATA(lv_create_error).
MESSAGE |构建内表失败:{ lv_create_error->get_text( ) }| TYPE'S' DISPLAY LIKE'E'.
RETURN.
ENDTRY.
CREATE DATA gt_output_table TYPE HANDLE go_tabledesc.
ASSIGN gt_output_table->* TO <gt_output>.
TRY.
IMPORT itab = <gt_output> FROM DATABASE indx(zx) ID p_srtfd.
CATCH cx_root INTO DATA(lx_import_error).
MESSAGE |导⼊内表内容失败:{ lx_import_error->get_text( ) }| TYPE'S' DISPLAY LIKE'E'.
RETURN.
ENDTRY.
IF <gt_output> IS INITIAL.
MESSAGE'没有找到合适的数据,⽆法后台执⾏处理,请确认!'TYPE'S' DISPLAY LIKE'E'. ELSE.
PERFORM frm_exec.
MESSAGE |{ repeat( val = '*' occ = 80 ) }| TYPE'S'.
MESSAGE'处理完成,请检查'TYPE'S'.
MESSAGE |{ repeat( val = '*' occ = 80 ) }| TYPE'S'.
ENDIF.
ENDIF.
*//***************************************************************************
*//***************************************************************************
INITIALIZATION.
%_p_file_%_app_%-text = cnst_excel_file_path_name.
functxt-text = ''."最多四⼗个字符.如果有按钮icon_text的话,就不显⽰了
functxt-icon_id = icon_xxl.
functxt-quickinfo = '指定导⼊字段,⽣成导⼊模板'.
functxt-icon_text = '指定导⼊字段,⽣成导⼊模板'.
sscrfields-functxt_01 = functxt.
functxt-text = ''."最多四⼗个字符.如果有按钮icon_text的话,就不显⽰了
functxt-icon_id = icon_history.
functxt-quickinfo = '查看设置的模板'.
functxt-icon_text = '查看设置的模板'.
sscrfields-functxt_02 = functxt.
*//***************************************************************************
*//***************************************************************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
p_file = zcl_excel_tools=>get_upload_path( ).
*//***************************************************************************
*//***************************************************************************
AT SELECTION-SCREEN.
CASE sy-ucomm.
WHEN 'FC01'.
* CALL SELECTION-SCREEN 9000 STARTING AT 20 1 ENDING AT 170 22.
lcl_process=>prepare_field_relation( ).
DATA(gdt_selected) = zcl_tabbed=>select(
is_alv = VALUE #(
io_tabbed = zcl_tabbed=>new( lcl_process=>gt_field_relation )
iv_alv_except_fields = |excel_original_text,excel_field_name,excel_column_seq,| &&
|excel_fieldname,authorid,keyflag,lowercase,mac,genkey,noforkey,| &&
|noauthch,sign,ltrflddis,bidictrlc,outputstyle,nohistory,ampmformat,checktable,precfield,| &&
|mask,masklen,comptype,lfieldname,dynpfld,f4availabl,valexi,reptext,logflag,scrlen1,scrlen2,| && |scrlen3,headlen,langu,position,offset|
iv_alv_fields_desc = |tab_desc:BAPI结构名| &&
||
iv_alv_fields_position = |fieldtext:3,fieldname:3,tab_Desc:5,rollname:5,domname:5,leng:5,intlen:5|
)
).
PERFORM frm_get_selected_fields USING gdt_selected.
WHEN 'FC02'.
PERFORM frm_view_templates.
ENDCASE.
*//***************************************************************************
*//***************************************************************************
AT SELECTION-SCREEN OUTPUT.
*//***************************************************************************
*//***************************************************************************
*//***************************************************************************
*//***************************************************************************
FORM frm_get_selected_fields USING idt_selected TYPE REF TO data.
FIELD-SYMBOLS <lt_selected> TYPE STANDARD TABLE.
ASSIGN idt_selected->* TO <lt_selected>.
CHECK sy-subrc = 0.
DATA lt_selected LIKE lcl_process=>gt_field_relation.
CLEAR lt_selected.
MOVE-CORRESPONDING <lt_selected> TO lt_selected.
CHECK lt_selected IS NOT INITIAL.
DATA lo_struct TYPE REF TO cl_abap_structdescr.
DATA lo_table TYPE REF TO cl_abap_tabledescr.
DATA lo_data TYPE REF TO cl_abap_datadescr.
DATA components TYPE cl_abap_structdescr=>component_table.
CLEAR: components.
lo_data ?= cl_abap_datadescr=>describe_by_name( 'STRING' ).
DO lines( lt_selected ) TIMES.
APPEND INITIAL LINE TO components ASSIGNING FIELD-SYMBOL(<ls_comp>).
<ls_comp>-name = 'COL' && sy-tabix.
<ls_comp>-type = lo_data.
ENDDO.
lo_struct = cl_abap_structdescr=>create( components ).
lo_table = cl_abap_tabledescr=>create( lo_struct ).
DATA t_table TYPE REF TO data.
FIELD-SYMBOLS <t_table> TYPE STANDARD TABLE.
DATA ls_row1 TYPE REF TO data.
FIELD-SYMBOLS <ls_row1> TYPE any.
DATA ls_row2 TYPE REF TO data.
FIELD-SYMBOLS <ls_row2> TYPE any.
CREATE DATA ls_row1 TYPE HANDLE lo_struct.
ASSIGN ls_row1->* TO <ls_row1>.
CREATE DATA ls_row2 TYPE HANDLE lo_struct.
ASSIGN ls_row2->* TO <ls_row2>.
CREATE DATA t_table TYPE HANDLE lo_table.
ASSIGN t_table->* TO <t_table>.
DATA lv_counter TYPE i VALUE IS INITIAL.
CLEAR gt_fields_list.
LOOP AT lt_selected ASSIGNING FIELD-SYMBOL(<ls_selected>).
lv_counter = lv_counter + 1.
ASSIGN COMPONENT lv_counter OF STRUCTURE <ls_row1> TO FIELD-SYMBOL(<value1>). <value1> = <ls_selected>-tabname && '-' && <ls_selected>-fieldname.
ASSIGN COMPONENT lv_counter OF STRUCTURE <ls_row2> TO FIELD-SYMBOL(<value2>). <value2> = <ls_selected>-scrtext_l.
APPEND INITIAL LINE TO gt_fields_list ASSIGNING FIELD-SYMBOL(<ls_field_list>).
<ls_field_list>-fieldname = <value1>.
<ls_field_list>-fielddesc = <value2>.
ENDLOOP.
APPEND <ls_row1> TO <t_table>.
APPEND <ls_row2> TO <t_table>.
"//弹出框,输⼊模板名称
DATA ls_name TYPE j_3gbelk.
CLEAR ls_name.
zcl_xhl=>get_input_values( EXPORTING iv_structure_name = 'J_3GBELK'
iv_fields = 'J_3GVVCOM1'
CHANGING cs_structure = ls_name ).
IF ls_name-j_3gvvcom1 IS INITIAL.
ls_name-j_3gvvcom1 = |物料主数据导⼊模板-{ sy-datum }-{ sy-uzeit }|.
ENDIF.
DATA ls_indx TYPE indx.
CLEAR ls_indx.
TRY.
ls_indx-srtfd = cl_system_uuid=>create_uuid_c22_static( ).
CATCH cx_root.
ENDTRY.
ls_indx-relid = 'ZX'.
ls_indx-usera = 'MAT_MAINTAIN'.
ls_indx-aedat = sy-datum.
ls_indx-pgmid = ls_name-j_3gvvcom1.
EXPORT itab = gt_fields_list TO DATABASE indx(zx) FROM ls_indx ID ls_indx-srtfd. COMMIT WORK.
PERFORM download_template USING <t_table> ''.
ENDFORM.
*//***************************************************************************
*//***************************************************************************
CLASS lcl_process IMPLEMENTATION.
*//********************************************************************
METHOD read_excel.
DATA(lo_excel) = zcl_excel_tools=>upload_by_fdt( CONV #( i_file ) ).
ASSIGN lo_excel->gt_excel->* TO FIELD-SYMBOL(<lt_excel>).
DATA lo_struct TYPE REF TO cl_abap_structdescr.
DATA lo_table TYPE REF TO cl_abap_tabledescr.
DATA lo_data TYPE REF TO cl_abap_datadescr.
DATA components TYPE cl_abap_structdescr=>component_table.
FIELD-SYMBOLS <component> TYPE LINE OF cl_abap_structdescr=>component_table. DATA component TYPE LINE OF cl_abap_structdescr=>component_table.
lo_data ?= cl_abap_datadescr=>describe_by_name( 'STRING' ).
lo_table ?= cl_abap_tabledescr=>describe_by_data( <lt_excel> ).
lo_struct ?= lo_table->get_table_line_type( ).
component_tab = lo_struct->get_components( ).
MOVE-CORRESPONDING component_tab TO components.
component-name = '_SEQ'.
component-type = lo_data.
APPEND component TO components.
component-name = '_ICON'.
component-type = lo_data.
APPEND component TO components.
component-name = '_MSG'.
component-type = lo_data.
APPEND component TO components.
component-name = '_CLICK'.
component-type = lo_data.
APPEND component TO components.
DATA return_temp TYPE TABLE OF bapi_matreturn2.
component-name = '_RETURN'.
component-type ?= cl_abap_datadescr=>describe_by_data( return_temp )..
APPEND component TO components.
lo_struct = cl_abap_structdescr=>create( components ).
lo_table = cl_abap_tabledescr=>create( lo_struct ).
CREATE DATA gt_output_table TYPE HANDLE lo_table.
ASSIGN gt_output_table->* TO <gt_output>.
MOVE-CORRESPONDING <lt_excel> TO <gt_output>.
LOOP AT <gt_output> ASSIGNING FIELD-SYMBOL(<row>).
CHECK sy-tabix > 2.
ASSIGN COMPONENT'_SEQ'OF STRUCTURE <row> TO FIELD-SYMBOL(<value>).
IF <value> IS ASSIGNED.
<value> = sy-tabix - 2.
ENDIF.
ASSIGN COMPONENT'_MSG'OF STRUCTURE <row> TO <value>.
IF <value> IS ASSIGNED.
<value> = '等待导⼊'.
ENDIF.
ASSIGN COMPONENT'_ICON'OF STRUCTURE <row> TO <value>.
IF <value> IS ASSIGNED.
<value> = icon_yellow_light.
ENDIF.
ASSIGN COMPONENT'_CLICK'OF STRUCTURE <row> TO <value>.
IF <value> IS ASSIGNED.
<value> = '点击查看'.
ENDIF.
ENDLOOP.
ENDMETHOD.
*//********************************************************************
METHOD display.
WRITE space.
DATA lv_style TYPE i.
lv_style = cl_gui_control=>ws_child
+ cl_gui_control=>ws_border
+ cl_gui_control=>ws_visible.
IF lo_docking IS INITIAL.
CREATE OBJECT lo_docking
EXPORTING
parent = cl_gui_custom_container=>default_screen
no_autodef_progid_dynnr = 'X'
style = lv_style.
CALL METHOD lo_docking->set_extension
EXPORTING
extension = 10000.
lo_container ?= lo_docking.
ENDIF.
TRY.
CALL METHOD cl_salv_table=>factory
EXPORTING
r_container = lo_container
IMPORTING
r_salv_table = lo_salv
CHANGING
t_table = it_table.
CATCH cx_salv_msg INTO DATA(lo_err01).
ENDTRY.
DATA functions TYPE REF TO cl_salv_functions_list.
functions = lo_salv->get_functions( ).
functions->set_all( 'X' ).
TRY.
functions->add_function( EXPORTING
name = 'EXEC'
icon = '@15@'
text = button_text
tooltip = button_text
position = if_salv_c_function_position=>left_of_salv_functions ).
CATCH cx_salv_existing INTO DATA(lo_err02).
CATCH cx_salv_wrong_call INTO DATA(lo_err03).
ENDTRY.
TRY.
functions->add_function( EXPORTING
name = 'EXEC_TEST'
icon = '@15@'
text = cnst_button_text_test
tooltip = cnst_button_text_test
position = if_salv_c_function_position=>left_of_salv_functions ).
CATCH cx_salv_existing INTO DATA(lo_err04).
CATCH cx_salv_wrong_call INTO DATA(lo_err05).
ENDTRY.
TRY.
functions->add_function( EXPORTING
name = 'BACKGROUND'
icon = '@M4@'
text = cnst_button_text_bg
tooltip = cnst_button_text_bg
position = if_salv_c_function_position=>right_of_salv_functions ).
CATCH cx_salv_existing INTO DATA(lo_err16).
CATCH cx_salv_wrong_call INTO DATA(lo_err17).
ENDTRY.
TRY.
functions->add_function( EXPORTING
name = 'JOB_INFO'
icon = '@M5@'
text = cnst_button_text_job_info
tooltip = cnst_button_text_job_info
position = if_salv_c_function_position=>right_of_salv_functions ).
CATCH cx_salv_existing INTO DATA(lo_err18).
CATCH cx_salv_wrong_call INTO DATA(lo_err19).
ENDTRY.
lo_events = lo_salv->get_event( ).
SET HANDLER on_user_command FOR lo_events.
SET HANDLER on_link_click FOR lo_events.
SET HANDLER on_doubleclick FOR lo_events.
lr_columns = lo_salv->get_columns( ).
lr_columns_table ?= lr_columns.
lr_columns_table->set_column_position( columnname = '_CLICK' position = 1 ).
lr_columns_table->set_column_position( columnname = '_MSG' position = 1 ).
lr_columns_table->set_column_position( columnname = '_ICON' position = 1 ).
lr_columns_table->set_column_position( columnname = '_SEQ' position = 1 ).
TRY.
lr_column_table ?= lr_columns_table->get_column( '_SEQ' ).
lr_column_table->set_long_text( '数据序号' ).
lr_column_table->set_medium_text( '数据序号' ).
lr_column_table->set_short_text( '数据序号' ).
CATCH cx_salv_not_found INTO DATA(lo_err06).
ENDTRY.
TRY.
lr_column_table ?= lr_columns_table->get_column( '_ICON' ).
lr_column_table->set_long_text( '状态' ).
lr_column_table->set_medium_text( '状态' ).
lr_column_table->set_short_text( '状态' ).
lr_column_table->set_icon( 'X' ).
CATCH cx_salv_not_found INTO DATA(lo_err07).
ENDTRY.
TRY.
lr_column_table ?= lr_columns_table->get_column( '_MSG' ).
lr_column_table->set_long_text( '消息' ).
lr_column_table->set_medium_text( '消息' ).
lr_column_table->set_short_text( '消息' ).
CATCH cx_salv_not_found INTO DATA(lo_err08).
ENDTRY.
TRY.
lr_column_table ?= lr_columns_table->get_column( '_CLICK' ).
lr_column_table->set_long_text( 'BAPI消息' ).
lr_column_table->set_medium_text( 'BAPI消息' ).
lr_column_table->set_short_text( 'BAPI消息' ).
lr_column_table->set_cell_type( if_salv_c_cell_type=>hotspot ).
CATCH cx_salv_not_found INTO DATA(lo_err09).
ENDTRY.
lr_columns_table->set_optimize( 'X' ).
DATA lo_err TYPE REF TO cx_root.
FIELD-SYMBOLS <component> TYPE LINE OF cl_abap_structdescr=>component_table. DATA fname TYPE lvc_fname.
DATA txt_long TYPE scrtext_l.
DATA txt_medium TYPE scrtext_m.
DATA txt_short TYPE scrtext_s.
DATA txt_tip TYPE lvc_tip.
LOOP AT component_tab ASSIGNING <component>.
fname = <component>-name.
TRY.
lr_column = lr_columns->get_column( fname ).
txt_long = fname.
txt_medium = fname.
txt_short = fname.
lr_column->set_long_text( txt_long ).
lr_column->set_medium_text( txt_medium ).
lr_column->set_short_text( txt_short ).
txt_tip = fname && '列'.
lr_column->set_tooltip( txt_tip ).
CATCH cx_salv_not_found INTO lo_err.
ENDTRY.
ENDLOOP.
DATA: lr_display TYPE REF TO cl_salv_display_settings,
ls_layout TYPE salv_s_layout_key,
lr_layout TYPE REF TO cl_salv_layout.
DATA lv_header_text TYPE lvc_title.
lv_header_text = 'Excel内容'.
lr_display = lo_salv->get_display_settings( )..
lr_display->set_striped_pattern( cl_salv_display_settings=>true ).
lr_display->set_list_header( lv_header_text ).
lr_layout = lo_salv->get_layout( ).
ls_layout-report = sy-repid.
lr_layout->set_key( ls_layout ).
lr_layout->set_default( 'X' )..
lr_layout->set_save_restriction( cl_salv_layout=>restrict_none ).
DATA lo_selections TYPE REF TO cl_salv_selections.
lo_selections = lo_salv->get_selections( ).
lo_selections->set_selection_mode( if_salv_c_selection_mode=>row_column ).
CALL METHOD lo_salv->display( ).
ENDMETHOD.
*//********************************************************************
METHOD on_user_command.
CASE e_salv_function.
WHEN 'EXEC'.
IF gv_background = abap_true.
MESSAGE'已经提交后台,不能重复提交'TYPE'S' DISPLAY LIKE'W'.
ELSE.
gv_test_run = ''.
PERFORM frm_exec IN PROGRAM (sy-repid) IF FOUND.
ENDIF.
WHEN 'EXEC_TEST'.
IF gv_background = abap_true.
MESSAGE'已经提交后台,不能重复提交'TYPE'S' DISPLAY LIKE'W'.
ELSE.
gv_test_run = 'X'.
PERFORM frm_exec IN PROGRAM (sy-repid) IF FOUND.
ENDIF.
WHEN 'BACKGROUND'.
IF gv_background = abap_true.
IF zcl_xhl=>confirm( '已经提交后台任务,确定要再次提交?' ) = abap_true.
PERFORM frm_prepare_2_bg.
ENDIF.
ELSE.
PERFORM frm_prepare_2_bg.
ENDIF.
WHEN 'JOB_INFO'.
PERFORM frm_display_job.
ENDCASE.
ENDMETHOD.
*//********************************************************************
METHOD on_doubleclick.
CHECK row > 2.
CHECK <gt_output> IS ASSIGNED.
CHECK lines( <gt_output> ) > 2.
READ TABLE <gt_output> ASSIGNING FIELD-SYMBOL(<ls_row>) INDEX 2.
CHECK sy-subrc = 0.
READ TABLE <gt_output> ASSIGNING FIELD-SYMBOL(<ls_currrent_row>) INDEX row. CHECK sy-subrc = 0.
DATA lo_structdescr TYPE REF TO cl_abap_structdescr.
lo_structdescr ?= cl_abap_structdescr=>describe_by_data( <ls_currrent_row> ).
DATA(lt_components) = lo_structdescr->get_included_view( ).
DATA lv_matnr TYPE char18.
CLEAR lv_matnr.
LOOP AT lt_components ASSIGNING FIELD-SYMBOL(<ls_comp>).
ASSIGN COMPONENT <ls_comp>-name OF STRUCTURE <ls_row> TO FIELD-SYMBOL(<lv_mat>).
IF <lv_mat> CS 'MATERIAL'.
ASSIGN COMPONENT <ls_comp>-name OF STRUCTURE <ls_currrent_row> TO FIELD-SYMBOL(<lv_mat_value>). lv_matnr = <lv_mat_value>.
EXIT.
ENDIF.
ENDLOOP.
CHECK lv_matnr IS NOT INITIAL.
DATA ls_return TYPE bapiret1.
lv_matnr = |{ lv_matnr ALPHA = IN }|.
CALL FUNCTION'BAPI_MATERIAL_DISPLAY'
EXPORTING
material = lv_matnr
* MATERIAL_EVG =
* MATERIAL_LONG =
IMPORTING
return = ls_return.
.
ENDMETHOD.
*//********************************************************************
METHOD on_link_click.
CHECK row > 0.
READ TABLE <gt_output> ASSIGNING FIELD-SYMBOL(<row>) INDEX row.
CHECK <row> IS ASSIGNED.
ASSIGN COMPONENT'_RETURN'OF STRUCTURE <row> TO FIELD-SYMBOL(<bapi>).
CHECK <bapi> IS ASSIGNED.
DATA lr_salv TYPE REF TO cl_salv_table.
IF lr_salv IS INITIAL.
TRY.
CALL METHOD cl_salv_table=>factory
IMPORTING
r_salv_table = lr_salv
CHANGING
t_table = <bapi>.
CATCH cx_salv_existing INTO DATA(lo_err10).
CATCH cx_salv_msg INTO DATA(lo_err11).
ENDTRY.
ENDIF.
lr_salv->set_screen_popup(
start_column = 15
end_column = 120
start_line = 1
end_line = 10 ).
DATA lr_columns TYPE REF TO cl_salv_columns.
lr_columns = lr_salv->get_columns( ).
lr_columns->set_optimize( 'X' ).
lr_salv->display( ).
ENDMETHOD.
*//********************************************************************
METHOD refresh.
IF lo_salv IS NOT INITIAL.
lr_columns = lo_salv->get_columns( ).
lr_columns->set_optimize( 'X' ).
CALL METHOD lo_salv->refresh( ).
ENDIF.
ENDMETHOD.
*//********************************************************************
METHOD prepare_field_relation_logic.
DATA lt_dfies TYPE TABLE OF dfies.
CLEAR lt_dfies.
CALL FUNCTION'DDIF_FIELDINFO_GET'
EXPORTING
tabname = tabname
langu = sy-langu
TABLES
dfies_tab = lt_dfies.
CLEAR gwa_field_relation.
DATA ls_dd02v TYPE dd02v.
CALL FUNCTION'DDIF_TABL_GET'
EXPORTING
name = tabname
state = 'A'
langu = '1'
IMPORTING
dd02v_wa = ls_dd02v.
LOOP AT lt_dfies ASSIGNING FIELD-SYMBOL(<dfies>).
MOVE-CORRESPONDING <dfies> TO gwa_field_relation.
gwa_field_relation-tab_desc = ls_dd02v-ddtext.
APPEND gwa_field_relation TO gt_field_relation.
CLEAR gwa_field_relation.
ENDLOOP.
ENDMETHOD.
*//********************************************************************
METHOD prepare_field_relation.
CLEAR gt_field_relation.
prepare_field_relation_logic( 'BAPIMATHEAD' ).
prepare_field_relation_logic( 'BAPI_MAKT' ).
prepare_field_relation_logic( 'BAPI_MARA' ).
prepare_field_relation_logic( 'BAPI_MARC' ).
prepare_field_relation_logic( 'BAPI_MPOP' ).
prepare_field_relation_logic( 'BAPI_MPGD' ).
prepare_field_relation_logic( 'BAPI_MARD' ).
prepare_field_relation_logic( 'BAPI_MBEW' ).
prepare_field_relation_logic( 'BAPI_MLGN' ).
prepare_field_relation_logic( 'BAPI_MVKE' ).
prepare_field_relation_logic( 'BAPI_MLGT' ).
prepare_field_relation_logic( 'BAPI_MEAN' ).
prepare_field_relation_logic( 'BAPI_MLAN' ).
prepare_field_relation_logic( 'BAPI_MFHM' ).
ENDMETHOD.
ENDCLASS.
*//***************************************************************************
*//***************************************************************************
FORM download_template USING it_table TYPE STANDARD TABLE
iv_file_name TYPE string.
* DATA(lv_path) = zcl_excel_tools=>set_download_path( '物料主数据导⼊模板' ). * CHECK lv_path IS NOT INITIAL.
* zcl_excel_tools=>download_template( EXPORTING iv_path = lv_path
* id_data = it_table
* iv_fields_desc = ''
** IT_FIELDS_DESC
* ).
* RETURN.
DATA lo_salv TYPE REF TO cl_salv_table.
DATA lo_columns TYPE REF TO cl_salv_columns_table.
DATA lo_column TYPE REF TO cl_salv_column_table.
DATA l_columns TYPE salv_t_column_ref.
FIELD-SYMBOLS <l_column> TYPE LINE OF salv_t_column_ref.
DATA: lo_result_data TYPE REF TO cl_salv_ex_result_data_table.
DATA e_xstring TYPE xstring.
DATA it_sort TYPE lvc_t_sort.
DATA it_filt TYPE lvc_t_filt.
DATA is_layout TYPE lvc_s_layo.
DATA lo_aggreg TYPE REF TO cl_salv_aggregations.
DATA lt_fcat TYPE lvc_t_fcat.
FIELD-SYMBOLS <fcat> TYPE lvc_s_fcat.
DATA: l_size TYPE i.
DATA: lt_bintab TYPE solix_tab.
DATA: l_filename TYPE string.
IF iv_file_name IS INITIAL.
CONCATENATE cnst_template_name '-' sy-datum '-' sy-uzeit INTO l_filename. ELSE.
CONCATENATE iv_file_name '-' sy-datum '-' sy-uzeit INTO l_filename. ENDIF.
DATA: l_path TYPE string.
DATA: f_path TYPE string.
DATA: mt_data TYPE REF TO data.
FIELD-SYMBOLS <mt_data> TYPE STANDARD TABLE.
CREATE DATA mt_data LIKE it_table.
ASSIGN mt_data->* TO <mt_data>.
<mt_data> = it_table.
DELETE <mt_data> INDEX 2.
TRY.
CALL METHOD cl_salv_table=>factory
IMPORTING
r_salv_table = lo_salv
CHANGING
t_table = <mt_data>.
CATCH cx_salv_msg INTO DATA(lo_err15).
ENDTRY.
CHECK lo_salv IS NOT INITIAL.
DATA lr_columns TYPE REF TO cl_salv_columns.。