Посмотрел на кучу макросов индуса по ссылке и типа "инсталлятор"...
Решил написать сам. Код сырой, но может кому пригодиться....
Выгрузка/загрузка идет прямыми селектами/инсертами, поэтому юзаем на свой страх и риск.
Есть бага с переименованием. Если грузим в ту же систему, откуда выгружали, переименовывая - то создается отдельный формуляр в названии которого (при просмотре через транзакцию smartforms), однако, будет фигурировать старое имя. Ни к каким проблемам это не приводит, но искать ошибку некогда.
Code:
REPORT zrufr_testapo.
* Selection screen:
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
* Form name in the system
PARAMETERS: pformnam TYPE tdsfname MATCHCODE OBJECT sh_stxfadm
OBLIGATORY.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME.
* Master lang.
PARAMETERS: nlangu TYPE sy-langu DEFAULT 'E',
* New form name while uploading
nformnam TYPE tdsfname.
SELECTION-SCREEN END OF BLOCK b2.
SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME.
* Download / upload option
PARAMETERS: option(8) DEFAULT 'DOWNLOAD'.
SELECTION-SCREEN END OF BLOCK b3.
CONSTANTS: c_type(1) VALUE 'F',
c_relid TYPE sychar02 VALUE 'XX',
c_dir TYPE localfile VALUE 'C:\SMARTFORMS\',
c_pgmid TYPE pgmid VALUE 'R3TR',
c_obj TYPE trobjtype VALUE 'SSFO',
c_bin TYPE char10 VALUE 'BIN',
c_tmp TYPE devclass VALUE '$TMP',
c_size TYPE i VALUE 256,
c_bigsize TYPE i VALUE 4096,
c_stxfobjt TYPE tabname16 VALUE 'STXFOBJT',
c_stxftxt TYPE tabname16 VALUE 'STXFTXT',
c_stxfadmt TYPE tabname16 VALUE 'STXFADMT',
c_stxfvart TYPE tabname16 VALUE 'STXFVART',
c_stxfvar TYPE tabname16 VALUE 'STXFVAR',
c_stxfcont TYPE tabname16 VALUE 'STXFCONT',
c_carret TYPE x VALUE 0.
DATA: dir TYPE localfile,
file TYPE string,
size TYPE i.
DATA: t_stxfobjt TYPE TABLE OF stxfobjt,
t_stxftxt TYPE TABLE OF stxftxt,
t_stxfcont TYPE TABLE OF stxfcont,
t_stxfadmt TYPE TABLE OF stxfadmt,
t_stxfvart TYPE TABLE OF stxfvart,
t_stxfvar TYPE TABLE OF stxfvar.
DATA: wa_tadir TYPE tadir,
wa_stxfadm TYPE stxfadm,
wa_stxfobjt TYPE stxfobjt,
wa_stxftxt TYPE stxftxt,
wa_stxfcont TYPE stxfcont,
wa_stxfadmt TYPE stxfadmt,
wa_stxfvart TYPE stxfvart,
wa_stxfvar TYPE stxfvar.
DATA: carret,
carr2(2).
FIELD-SYMBOLS: <tmp>.
START-OF-SELECTION.
ASSIGN carret TO <tmp> TYPE 'X'.
<tmp> = c_carret.
CONCATENATE carret carret INTO carr2.
PERFORM init_proc.
IF option EQ 'DOWNLOAD'.
PERFORM download_proc.
ELSEIF option EQ 'UPLOAD'.
PERFORM upload_proc.
ENDIF.
*---------------------------------------------------------------------*
* FORM init_proc *
*---------------------------------------------------------------------*
FORM init_proc.
CLEAR: dir, file, size,
wa_tadir, wa_stxfadm,
wa_stxfobjt, wa_stxftxt,
wa_stxfcont, wa_stxfadmt,
wa_stxfvart, wa_stxfvar.
REFRESH: t_stxfobjt, t_stxftxt,
t_stxfcont, t_stxfadmt,
t_stxfvart.
* Create directory for output files
CONCATENATE c_dir pformnam '\' INTO dir.
ENDFORM.
*---------------------------------------------------------------------*
* FORM download_proc *
*---------------------------------------------------------------------*
FORM download_proc.
CALL FUNCTION 'GUI_CREATE_DIRECTORY'
EXPORTING
dirname = c_dir
EXCEPTIONS
OTHERS = 0.
CALL FUNCTION 'GUI_CREATE_DIRECTORY'
EXPORTING
dirname = dir
EXCEPTIONS
OTHERS = 0.
* Get STXFCONT
SELECT * FROM stxfcont INTO TABLE t_stxfcont
WHERE formname EQ pformnam AND
relid EQ c_relid AND
srtf2 GE 0.
IF sy-dbcnt GT 0.
size = c_bigsize * sy-dbcnt.
CONCATENATE dir c_stxfcont INTO file.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
bin_filesize = size
filename = file
filetype = c_bin
TABLES
data_tab = t_stxfcont
EXCEPTIONS
OTHERS = 0.
ENDIF.
* Get STXFADMT
SELECT * FROM stxfadmt INTO TABLE t_stxfadmt
WHERE formname EQ pformnam.
IF sy-dbcnt GT 0.
CONCATENATE dir c_stxfadmt INTO file.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
bin_filesize = 1024
filename = file
filetype = c_bin
TABLES
data_tab = t_stxfadmt
EXCEPTIONS
OTHERS = 0.
ENDIF.
* Get STXFVART
SELECT * FROM stxfvart INTO TABLE t_stxfvart
WHERE formname EQ pformnam.
IF sy-dbcnt GT 0.
CONCATENATE dir c_stxfvart INTO file.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
bin_filesize = 1024
filename = file
filetype = c_bin
TABLES
data_tab = t_stxfvart
EXCEPTIONS
OTHERS = 0.
ENDIF.
* Get STXFVAR
SELECT * FROM stxfvar INTO TABLE t_stxfvar
WHERE formname EQ pformnam.
IF sy-dbcnt EQ 0.
wa_stxfvar-FORMNAME = pformnam.
INSERT wa_stxfvar INTO TABLE t_stxfvar.
ENDIF.
CONCATENATE dir c_stxfvar INTO file.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
bin_filesize = 1024
filename = file
filetype = c_bin
TABLES
data_tab = t_stxfvar
EXCEPTIONS
OTHERS = 0.
* Get STXFOBJT
SELECT * FROM stxfobjt INTO TABLE t_stxfobjt
WHERE formname EQ pformnam.
IF sy-dbcnt GT 0.
size = c_size * sy-dbcnt.
CONCATENATE dir c_stxfobjt INTO file.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
bin_filesize = size
filename = file
filetype = c_bin
TABLES
data_tab = t_stxfobjt
EXCEPTIONS
OTHERS = 0.
ENDIF.
* Get STXFTXT
SELECT * FROM stxftxt INTO TABLE t_stxftxt
WHERE formname EQ pformnam AND
txtype EQ c_type.
IF sy-dbcnt GT 0.
size = c_size * sy-dbcnt.
CONCATENATE dir c_stxftxt INTO file.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
bin_filesize = size
filename = file
filetype = c_bin
TABLES
data_tab = t_stxftxt
EXCEPTIONS
OTHERS = 0.
ENDIF.
ENDFORM.
*---------------------------------------------------------------------*
* FORM upload_proc *
*---------------------------------------------------------------------*
FORM upload_proc.
* Set TADIR
IF NOT nformnam IS INITIAL.
wa_tadir-obj_name = nformnam.
ELSE.
wa_tadir-obj_name = pformnam.
ENDIF.
wa_tadir-pgmid = c_pgmid.
wa_tadir-object = c_obj.
wa_tadir-srcsystem = sy-sysid.
wa_tadir-author = sy-uname.
wa_tadir-devclass = c_tmp.
wa_tadir-cproject = ' L '.
IF NOT nlangu IS INITIAL.
wa_tadir-masterlang = nlangu.
ELSE.
wa_tadir-masterlang = 'E'.
ENDIF.
* Set STXFADM
IF NOT nformnam IS INITIAL.
wa_stxfadm-formname = nformnam.
ELSE.
wa_stxfadm-formname = pformnam.
ENDIF.
IF NOT nlangu IS INITIAL.
wa_stxfadm-masterlang = nlangu.
ELSE.
wa_stxfadm-masterlang = 'E'.
ENDIF.
wa_stxfadm-devclass = c_tmp.
wa_stxfadm-version = 1.
wa_stxfadm-firstuser = sy-uname.
wa_stxfadm-firstdate = sy-datum.
wa_stxfadm-firsttime = sy-uzeit.
wa_stxfadm-lastuser = sy-uname.
wa_stxfadm-lastdate = sy-datum.
wa_stxfadm-lasttime = sy-uzeit.
* Get STXFCONT
CONCATENATE dir c_stxfcont INTO file.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = file
filetype = c_bin
TABLES
data_tab = t_stxfcont
EXCEPTIONS
OTHERS = 0.
DELETE t_stxfcont WHERE relid EQ carr2.
IF NOT nformnam IS INITIAL.
wa_stxfcont-formname = nformnam.
MODIFY t_stxfcont FROM wa_stxfcont TRANSPORTING formname
WHERE formname = pformnam.
ENDIF.
* Get STXFADMT
CONCATENATE dir c_stxfadmt INTO file.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = file
filetype = c_bin
TABLES
data_tab = t_stxfadmt
EXCEPTIONS
OTHERS = 0.
DELETE t_stxfadmt WHERE langu EQ carret.
IF NOT nformnam IS INITIAL.
wa_stxfadmt-formname = nformnam.
MODIFY t_stxfadmt FROM wa_stxfadmt TRANSPORTING formname
WHERE formname = pformnam.
ENDIF.
* Get STXFVART
CONCATENATE dir c_stxfvart INTO file.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = file
filetype = c_bin
TABLES
data_tab = t_stxfvart
EXCEPTIONS
OTHERS = 0.
DELETE t_stxfvart WHERE langu EQ carret.
IF NOT nformnam IS INITIAL.
wa_stxfvart-formname = nformnam.
MODIFY t_stxfvart FROM wa_stxfvart TRANSPORTING formname
WHERE formname = pformnam.
ENDIF.
* Get STXFVAR
CONCATENATE dir c_stxfvar INTO file.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = file
filetype = c_bin
TABLES
data_tab = t_stxfvar
EXCEPTIONS
OTHERS = 0.
DELETE t_stxfvar WHERE formname CO carret.
IF NOT nformnam IS INITIAL.
wa_stxfvar-formname = nformnam.
MODIFY t_stxfvar FROM wa_stxfvar TRANSPORTING formname
WHERE formname = pformnam.
ENDIF.
* Get STXFOBJT
CONCATENATE dir c_stxfobjt INTO file.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = file
filetype = c_bin
TABLES
data_tab = t_stxfobjt
EXCEPTIONS
OTHERS = 0.
DELETE t_stxfobjt WHERE langu EQ carret.
IF NOT nformnam IS INITIAL.
wa_stxfobjt-formname = nformnam.
MODIFY t_stxfobjt FROM wa_stxfobjt TRANSPORTING formname
WHERE formname = pformnam.
ENDIF.
* Get STXFTXT
CONCATENATE dir c_stxftxt INTO file.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = file
filetype = c_bin
TABLES
data_tab = t_stxftxt
EXCEPTIONS
OTHERS = 0.
DELETE t_stxftxt WHERE spras EQ carret.
IF NOT nformnam IS INITIAL.
wa_stxftxt-formname = nformnam.
MODIFY t_stxftxt FROM wa_stxftxt TRANSPORTING formname
WHERE formname = pformnam.
ENDIF.
INSERT INTO tadir VALUES wa_tadir.
INSERT: stxfcont FROM TABLE t_stxfcont,
stxfadmt FROM TABLE t_stxfadmt.
INSERT INTO stxfadm VALUES wa_stxfadm.
INSERT: stxfvar FROM TABLE t_stxfvar,
stxfvart FROM TABLE t_stxfvart,
stxfobjt FROM TABLE t_stxfobjt,
stxftxt FROM TABLE t_stxftxt.
COMMIT WORK AND WAIT.
ENDFORM.