Добрый день, Игорь.
Внес небольшую доработку в Workbench, может она Вас заинтересует, и Вы добавите ее в новую версию.
Суть доработки - добавлен функционал, позволяющий импортировать новый файл Excel в готовый формуляр, с сохранением настроек формуляра.
Реализация:
Изменен
CLASS lcl_workbench
METHOD action_importCode:
* check existence
IF lcl_form=>get_devclass( lv_formname ) IS NOT INITIAL .
*** + <
me->reimport( lv_formname ).
EXIT.
*** + >
*** MESSAGE i000(lp)
*** WITH v_text-t014 " text: A form already exists with the name
*** lv_formname
*** RAISING process_terminated .
ENDIF .
Добавлен метод reimportCode:
METHOD reimport.
DATA: l_answer TYPE char20,
ls_head TYPE lcl_form=>ty_s_head,
lt_properties TYPE lcl_form=>ty_t_properties,
lt_hierarchy TYPE lcl_form=>ty_t_hierarchy,
ls_key TYPE wwwdatatab,
lv_devclass TYPE tadir-devclass,
lv_objid TYPE wwwdatatab-objid,
lt_document_table TYPE tsfmime,
lv_document_size TYPE i,
lt_html_table TYPE STANDARD TABLE OF w3html,
cl_form TYPE REF TO lcl_form,
lv_formdescr TYPE wwwdatatab-text.
" Диалог с пользователем
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
titlebar = 'Импорт'
text_question = 'Формуляр существует. Перегрузить?'
default_button = '2'
display_cancel_button = ''
IMPORTING
answer = l_answer
EXCEPTIONS
text_not_found = 1
OTHERS = 2.
CHECK l_answer EQ '1'.
" Загрузка старого формуляра
CREATE OBJECT r_formtemplate
EXPORTING
iv_formname = iv_formname
iv_create_new = space
iv_editor = abap_on
EXCEPTIONS
OTHERS = 1.
IF sy-subrc NE 0 .
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 .
RAISE process_terminated .
ENDIF .
" Запоминаем настройки формуляра
cl_form ?= r_formtemplate.
lv_formdescr = cl_form->v_formdescr.
r_formtemplate->r_exceltemplate->formparameters_struc_get(
EXPORTING iv_path = r_formtemplate->r_exceltemplate->c_path-formhead
CHANGING cs_struc = ls_head ) .
r_formtemplate->r_exceltemplate->formparameters_table_get(
EXPORTING iv_path = r_formtemplate->r_exceltemplate->c_path-formproperties
CHANGING ct_tab = lt_properties ) .
r_formtemplate->r_exceltemplate->formparameters_table_get(
EXPORTING iv_path = r_formtemplate->r_exceltemplate->c_path-formhierarchy
CHANGING ct_tab = lt_hierarchy ) .
r_formtemplate->r_exceltemplate->free( ).
CLEAR: r_formtemplate.
" UPLOAD новый формуляр
* lock an object
IF lcl_form=>enq_lock( iv_formname = iv_formname ) IS NOT INITIAL .
MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
RAISING process_terminated .
ENDIF .
* upload file
ls_key-relid = lcl_form=>c_relid .
ls_key-objid = lcl_form=>conv_formname_ei( iv_formname ) .
ls_key-text = lv_formdescr .
CALL FUNCTION 'UPLOAD_WEB_OBJECT'
EXPORTING
key = ls_key.
* unlock the object
lcl_form=>enq_unlock( iv_formname = iv_formname ) .
" Считываем загруженный формуляр
CREATE OBJECT r_formtemplate
EXPORTING
iv_formname = iv_formname
iv_create_new = space
iv_editor = abap_on
EXCEPTIONS
OTHERS = 1.
IF sy-subrc NE 0 .
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 .
RAISE process_terminated .
ENDIF .
" Настройки формуляра
r_formtemplate->r_exceltemplate->formparameters_struc_set(
EXPORTING iv_path = r_formtemplate->r_exceltemplate->c_path-formhead
is_struc = ls_head ) .
r_formtemplate->r_exceltemplate->formparameters_table_set(
EXPORTING iv_path = r_formtemplate->r_exceltemplate->c_path-formproperties
it_tab = lt_properties ) .
r_formtemplate->r_exceltemplate->formparameters_table_set(
EXPORTING iv_path = r_formtemplate->r_exceltemplate->c_path-formhierarchy
it_tab = lt_hierarchy ) .
" Сохраняем
lv_objid = r_formtemplate->conv_formname_ei( r_formtemplate->v_formname ).
IF r_formtemplate->v_devclass IS INITIAL .
lv_devclass = popup_devclass( iv_objid = lv_objid ) .
ELSE .
lv_devclass = r_formtemplate->v_devclass .
ENDIF.
CHECK lv_devclass IS NOT INITIAL .
r_formtemplate->r_exceltemplate->rawdata_get_as_table(
IMPORTING et_document_table = lt_document_table
ev_document_size = lv_document_size ) .
CALL FUNCTION 'EXPORT_WEB_OBJECT'
EXPORTING
object_id = lv_objid
mimetype = lcl_form=>c_mimetype
text = lv_formdescr
size = lv_document_size
devclass = lv_devclass
TABLES
html = lt_html_table
mime = lt_document_table
EXCEPTIONS
size_not_specified = 1
object_locked = 2
OTHERS = 3.
IF sy-subrc NE 0 .
msg_syst_catch( ) .
EXIT .
ENDIF .
ENDMETHOD.