ZARCHIVE_WRITE(限制用于Z表)
来源:互联网 发布:linux 开启snmp 编辑:程序博客网 时间:2024/05/17 22:11
最好只用于Z表的归档
Code listing for: ZARCHIVE_WRITE
Description: Archive write program for ZTABLE
REPORT zarchive_write.
************************************************************************
* Tables *
************************************************************************
* Tables *
************************************************************************
TABLES: dd03l.
************************************************************************
* Types *
************************************************************************
* Types *
************************************************************************
TYPES: BEGIN OF ty_tab,
tabname TYPE zdvm_clearrule-tabname,
END OF ty_tab.
TYPES: BEGIN OF ty_cond,
cond TYPE char72,
END OF ty_cond.
tabname TYPE zdvm_clearrule-tabname,
END OF ty_tab.
TYPES: BEGIN OF ty_cond,
cond TYPE char72,
END OF ty_cond.
************************************************************************
* Marco *
************************************************************************
* Marco *
************************************************************************
DEFINE mac_format_error.
* set format for errors.
format color col_negative.
END-OF-DEFINITION.
DEFINE mac_format_normal.
format color col_normal.
END-OF-DEFINITION.
END-OF-DEFINITION.
DEFINE mac_format_normal.
format color col_normal.
END-OF-DEFINITION.
************************************************************************
* 变量定义 *
************************************************************************
* 变量定义 *
************************************************************************
DATA:g_archive_handle TYPE sy-tabix,
g_commit_count TYPE arch_usr-arch_comit,
g_maintain_index TYPE arch_usr-arch_index.
DATA:gt_dyn_itab TYPE REF TO data,
gs_wa TYPE REF TO data.
DATA:gv_string(18).
DATA:gt_tabrule TYPE TABLE OF zdvm_clearrule,
gs_tabrule TYPE zdvm_clearrule.
FIELD-SYMBOLS: <fs_itab> TYPE STANDARD TABLE,
<fs_wa> TYPE any.
g_commit_count TYPE arch_usr-arch_comit,
g_maintain_index TYPE arch_usr-arch_index.
DATA:gt_dyn_itab TYPE REF TO data,
gs_wa TYPE REF TO data.
DATA:gv_string(18).
DATA:gt_tabrule TYPE TABLE OF zdvm_clearrule,
gs_tabrule TYPE zdvm_clearrule.
FIELD-SYMBOLS: <fs_itab> TYPE STANDARD TABLE,
<fs_wa> TYPE any.
************************************************************************
* 常量定义 *
************************************************************************
* 常量定义 *
************************************************************************
DATA con_object LIKE arch_obj-object VALUE 'ZTABLE'.
************************************************************************
* 选择屏幕参数 *
************************************************************************
*PARAMETERS: P_TAB LIKE DD03L-TABNAME MEMORY ID TABNAME OBLIGATORY.
* 选择屏幕参数 *
************************************************************************
*PARAMETERS: P_TAB LIKE DD03L-TABNAME MEMORY ID TABNAME OBLIGATORY.
SELECTION-SCREEN BEGIN OF BLOCK tb1 WITH FRAME TITLE tblock1. " TableN
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(14) tabname.
PARAMETERS: p_tab LIKE dd03l-tabname OBLIGATORY.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK tb1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE condit.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (10) scf1 .
PARAMETERS: s_cf1 LIKE dd03l-fieldname OBLIGATORY.
SELECT-OPTIONS: s_cv1 FOR gv_string OBLIGATORY.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (10) scf2 .
PARAMETERS: s_cf2 LIKE dd03l-fieldname.
SELECT-OPTIONS: s_cv2 FOR gv_string.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (10) scf3 .
PARAMETERS: s_cf3 LIKE dd03l-fieldname.
SELECT-OPTIONS: s_cv3 FOR gv_string.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (10) scf4 .
PARAMETERS: s_cf4 LIKE dd03l-fieldname.
SELECT-OPTIONS: s_cv4 FOR gv_string.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (10) scf5 .
PARAMETERS: s_cf5 LIKE dd03l-fieldname.
SELECT-OPTIONS: s_cv5 FOR gv_string.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (10) scf6 .
PARAMETERS: s_cf6 LIKE dd03l-fieldname.
SELECT-OPTIONS: s_cv6 FOR gv_string.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK b2.
SELECTION-SCREEN BEGIN OF BLOCK blk02 WITH FRAME TITLE mode.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS:p_del AS CHECKBOX DEFAULT 'X'. " 仅在测试模式下删除
SELECTION-SCREEN COMMENT (50) pdel .
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS:p_prod AS CHECKBOX. " 测试运行=不创建档案文件
SELECTION-SCREEN COMMENT (50) pprod.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK blk02.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(14) tabname.
PARAMETERS: p_tab LIKE dd03l-tabname OBLIGATORY.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK tb1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE condit.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (10) scf1 .
PARAMETERS: s_cf1 LIKE dd03l-fieldname OBLIGATORY.
SELECT-OPTIONS: s_cv1 FOR gv_string OBLIGATORY.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (10) scf2 .
PARAMETERS: s_cf2 LIKE dd03l-fieldname.
SELECT-OPTIONS: s_cv2 FOR gv_string.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (10) scf3 .
PARAMETERS: s_cf3 LIKE dd03l-fieldname.
SELECT-OPTIONS: s_cv3 FOR gv_string.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (10) scf4 .
PARAMETERS: s_cf4 LIKE dd03l-fieldname.
SELECT-OPTIONS: s_cv4 FOR gv_string.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (10) scf5 .
PARAMETERS: s_cf5 LIKE dd03l-fieldname.
SELECT-OPTIONS: s_cv5 FOR gv_string.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (10) scf6 .
PARAMETERS: s_cf6 LIKE dd03l-fieldname.
SELECT-OPTIONS: s_cv6 FOR gv_string.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK b2.
SELECTION-SCREEN BEGIN OF BLOCK blk02 WITH FRAME TITLE mode.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS:p_del AS CHECKBOX DEFAULT 'X'. " 仅在测试模式下删除
SELECTION-SCREEN COMMENT (50) pdel .
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS:p_prod AS CHECKBOX. " 测试运行=不创建档案文件
SELECTION-SCREEN COMMENT (50) pprod.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK blk02.
* 3. archiving run memo
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (30) pcomment.
PARAMETERS: p_coment TYPE admi_run-comments.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN COMMENT (30) pcomment.
PARAMETERS: p_coment TYPE admi_run-comments.
SELECTION-SCREEN END OF LINE.
******************************************************************
*----------------------------------------------------------------------
* initialisation
*----------------------------------------------------------------------
*----------------------------------------------------------------------
* initialisation
*----------------------------------------------------------------------
INITIALIZATION.
tblock1 = 'Table Name(Optional)'.
tabname = 'Table Name'.
condit = 'SelectCondition'.
scf1 = 'Sel.Cond.1'.
scf2 = 'Sel.Cond.2'.
scf3 = 'Sel.Cond.3'.
scf4 = 'Sel.Cond.4'.
scf5 = 'Sel.Cond.5'.
scf6 = 'Sel.Cond.6'.
mode = 'Mode'.
pdel = 'Call delete program in Test mode'."仅在测试模式下删除
pprod = 'Productive mode : Create archive file'."
pcomment = 'Archiving Session Note'.
PERFORM frm_get_tablerul.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_tab.
PERFORM frm_f4_help.
tblock1 = 'Table Name(Optional)'.
tabname = 'Table Name'.
condit = 'SelectCondition'.
scf1 = 'Sel.Cond.1'.
scf2 = 'Sel.Cond.2'.
scf3 = 'Sel.Cond.3'.
scf4 = 'Sel.Cond.4'.
scf5 = 'Sel.Cond.5'.
scf6 = 'Sel.Cond.6'.
mode = 'Mode'.
pdel = 'Call delete program in Test mode'."仅在测试模式下删除
pprod = 'Productive mode : Create archive file'."
pcomment = 'Archiving Session Note'.
PERFORM frm_get_tablerul.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_tab.
PERFORM frm_f4_help.
************************************************************************
* at selection screen
************************************************************************
* at selection screen
************************************************************************
AT SELECTION-SCREEN.
PERFORM frm_check_input.
PERFORM frm_check_input.
************************************************************************
* Event top of page
************************************************************************
* Event top of page
************************************************************************
TOP-OF-PAGE.
************************************************************************
* event Start of Selection
************************************************************************
* event Start of Selection
************************************************************************
START-OF-SELECTION.
PERFORM frm_prepare_archive. " 归档写入准备
PERFORM frm_create_dynamic_table."
PERFORM frm_prepare_archive. " 归档写入准备
PERFORM frm_create_dynamic_table."
* Version 1.1
PERFORM frm_archive_ztsde007a. " 取准备归档掉的ztsde007a
PERFORM frm_archive_multilist. " 取准备归档掉的多表信息
include zarchive_write_ztsde007a."特殊逻辑的表ztsde007a归档
include zarchive_write_multilist."多表联动归档
PERFORM frm_archive_multilist. " 取准备归档掉的多表信息
include zarchive_write_ztsde007a."特殊逻辑的表ztsde007a归档
include zarchive_write_multilist."多表联动归档
************************************************************************
*EVENT End-of selection
************************************************************************
*EVENT End-of selection
************************************************************************
END-OF-SELECTION.
PERFORM frm_archive_ztable. " 取准备归档掉的Z表数据
PERFORM frm_archive_ztable. " 取准备归档掉的Z表数据
************************************************************************
*EVENT End-of page
************************************************************************
*EVENT End-of page
************************************************************************
END-OF-PAGE.
************************************************************************
************************************************************************
** forms
************************************************************************
*&---------------------------------------------------------------------*
*& Form frm_prepare_archive
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
************************************************************************
** forms
************************************************************************
*&---------------------------------------------------------------------*
*& Form frm_prepare_archive
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_prepare_archive .
* 归档写入准备
CALL FUNCTION 'ARCHIVE_OPEN_FOR_WRITE'
EXPORTING
call_delete_job_in_test_mode = p_del "
create_archive_file = p_prod "
comments = p_coment
object = con_object " 归档对象名称
IMPORTING
archive_handle = g_archive_handle
EXCEPTIONS
internal_error = 1
object_not_found = 2
open_error = 3
not_authorized = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
EXPORTING
call_delete_job_in_test_mode = p_del "
create_archive_file = p_prod "
comments = p_coment
object = con_object " 归档对象名称
IMPORTING
archive_handle = g_archive_handle
EXCEPTIONS
internal_error = 1
object_not_found = 2
open_error = 3
not_authorized = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
* 获取归档对象的系统配置数据
CALL FUNCTION 'ARCHIVE_GET_CUSTOMIZING_DATA'
EXPORTING
object = con_object
IMPORTING
commit_count_for_delete_prg = g_commit_count " 提交数据库事务计数器
maintain_index = g_maintain_index " 是否维护索引
EXCEPTIONS
object_not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " frm_prepare_archive
EXPORTING
object = con_object
IMPORTING
commit_count_for_delete_prg = g_commit_count " 提交数据库事务计数器
maintain_index = g_maintain_index " 是否维护索引
EXCEPTIONS
object_not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " frm_prepare_archive
*&---------------------------------------------------------------------*
*& Form FRM_ARCHIVE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
*& Form FRM_ARCHIVE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_archive .
CALL FUNCTION 'ARCHIVE_NEW_OBJECT'
EXPORTING
archive_handle = g_archive_handle
EXCEPTIONS
internal_error = 1
wrong_access_to_archive = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
CALL FUNCTION 'ARCHIVE_NEW_OBJECT'
EXPORTING
archive_handle = g_archive_handle
EXCEPTIONS
internal_error = 1
wrong_access_to_archive = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
* 循环内表,插入归档数据
* ARCHIVE_PUT_RECORD用于归单条记录
* ARCHIVE_PUT_TABLE用于归整表记录
* ARCHIVE_PUT_RECORD用于归单条记录
* ARCHIVE_PUT_TABLE用于归整表记录
CALL FUNCTION 'ARCHIVE_PUT_TABLE'
EXPORTING
archive_handle = g_archive_handle
record_flags = 'X' " 标记该记录是要被删除程序删除的
record_structure = p_tab
TABLES
table = <fs_itab>
EXPORTING
archive_handle = g_archive_handle
record_flags = 'X' " 标记该记录是要被删除程序删除的
record_structure = p_tab
TABLES
table = <fs_itab>
* RECORD_FLAGS_TABLE =
EXCEPTIONS
internal_error = 1
wrong_access_to_archive = 2
invalid_record_structure = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
internal_error = 1
wrong_access_to_archive = 2
invalid_record_structure = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
* 根据归档处理号,保存数据到归档文件
CALL FUNCTION 'ARCHIVE_SAVE_OBJECT'
EXPORTING
archive_handle = g_archive_handle
EXPORTING
archive_handle = g_archive_handle
* IMPORTING
* OBJECT_OFFSET =
* ARCHIVE_NAME =
* OBJECT_OFFSET =
* ARCHIVE_NAME =
EXCEPTIONS
file_io_error = 1
internal_error = 2
open_error = 3
termination_requested = 4
wrong_access_to_archive = 5
OTHERS = 6.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " FRM_ARCHIVE
file_io_error = 1
internal_error = 2
open_error = 3
termination_requested = 4
wrong_access_to_archive = 5
OTHERS = 6.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " FRM_ARCHIVE
*&---------------------------------------------------------------------*
*& Form frm_archive_ztable
*&---------------------------------------------------------------------*
* create itab by selection-screen info
*----------------------------------------------------------------------*
*& Form frm_archive_ztable
*&---------------------------------------------------------------------*
* create itab by selection-screen info
*----------------------------------------------------------------------*
FORM frm_archive_ztable .
DATA: lv_selection TYPE string.
DATA: lv_condition TYPE string.
DATA: l_cursor TYPE cursor.
CLEAR: lv_selection.
lv_selection = ' * '.
IF s_cf1 IS NOT INITIAL.
IF lv_condition IS INITIAL.
CONCATENATE lv_condition
s_cf1
` IN s_cv1 ` "#EC NOTEXT
INTO lv_condition.
ELSE.
CONCATENATE lv_condition
` AND `
s_cf1
` IN s_cv1 ` "#EC NOTEXT
INTO lv_condition.
ENDIF.
ENDIF.
IF s_cf2 IS NOT INITIAL.
IF lv_condition IS INITIAL.
CONCATENATE lv_condition
s_cf2
` IN s_cv2 ` "#EC NOTEXT
INTO lv_condition.
ELSE.
CONCATENATE lv_condition
` AND `
s_cf2
` IN s_cv2 ` "#EC NOTEXT
INTO lv_condition.
ENDIF.
ENDIF.
IF s_cf3 IS NOT INITIAL.
IF lv_condition IS INITIAL.
CONCATENATE lv_condition
s_cf3
` IN s_cv3 ` "#EC NOTEXT
INTO lv_condition.
ELSE.
CONCATENATE lv_condition
` AND `
s_cf3
` IN s_cv3 ` "#EC NOTEXT
INTO lv_condition.
ENDIF.
ENDIF.
IF s_cf4 IS NOT INITIAL.
IF lv_condition IS INITIAL.
CONCATENATE lv_condition
s_cf4
` IN s_cv4 ` "#EC NOTEXT
INTO lv_condition.
ELSE.
CONCATENATE lv_condition
` AND `
s_cf4
` IN s_cv4 ` "#EC NOTEXT
INTO lv_condition.
ENDIF.
ENDIF.
IF s_cf5 IS NOT INITIAL.
IF lv_condition IS INITIAL.
CONCATENATE lv_condition
s_cf5
` IN s_cv5 ` "#EC NOTEXT
INTO lv_condition.
ELSE.
CONCATENATE lv_condition
` AND `
s_cf5
` IN s_cv5 ` "#EC NOTEXT
INTO lv_condition.
ENDIF.
ENDIF.
IF s_cf6 IS NOT INITIAL.
IF lv_condition IS INITIAL.
CONCATENATE lv_condition
s_cf6
` IN s_cv6 ` "#EC NOTEXT
INTO lv_condition.
ELSE.
CONCATENATE lv_condition
` AND `
s_cf6
` IN s_cv6 ` "#EC NOTEXT
INTO lv_condition.
ENDIF.
ENDIF.
OPEN CURSOR WITH HOLD l_cursor FOR
SELECT (lv_selection) " all data download into 1 file
FROM (p_tab)
WHERE (lv_condition)
ORDER BY PRIMARY KEY.
DO.
FETCH NEXT CURSOR l_cursor
INTO TABLE <fs_itab>
PACKAGE SIZE g_commit_count.
IF sy-subrc = 0.
PERFORM frm_archive.
CLEAR:<fs_itab>.
ELSE.
" no more data to be archived
EXIT.
ENDIF.
ENDDO.
CLOSE CURSOR l_cursor.
DATA: lv_selection TYPE string.
DATA: lv_condition TYPE string.
DATA: l_cursor TYPE cursor.
CLEAR: lv_selection.
lv_selection = ' * '.
IF s_cf1 IS NOT INITIAL.
IF lv_condition IS INITIAL.
CONCATENATE lv_condition
s_cf1
` IN s_cv1 ` "#EC NOTEXT
INTO lv_condition.
ELSE.
CONCATENATE lv_condition
` AND `
s_cf1
` IN s_cv1 ` "#EC NOTEXT
INTO lv_condition.
ENDIF.
ENDIF.
IF s_cf2 IS NOT INITIAL.
IF lv_condition IS INITIAL.
CONCATENATE lv_condition
s_cf2
` IN s_cv2 ` "#EC NOTEXT
INTO lv_condition.
ELSE.
CONCATENATE lv_condition
` AND `
s_cf2
` IN s_cv2 ` "#EC NOTEXT
INTO lv_condition.
ENDIF.
ENDIF.
IF s_cf3 IS NOT INITIAL.
IF lv_condition IS INITIAL.
CONCATENATE lv_condition
s_cf3
` IN s_cv3 ` "#EC NOTEXT
INTO lv_condition.
ELSE.
CONCATENATE lv_condition
` AND `
s_cf3
` IN s_cv3 ` "#EC NOTEXT
INTO lv_condition.
ENDIF.
ENDIF.
IF s_cf4 IS NOT INITIAL.
IF lv_condition IS INITIAL.
CONCATENATE lv_condition
s_cf4
` IN s_cv4 ` "#EC NOTEXT
INTO lv_condition.
ELSE.
CONCATENATE lv_condition
` AND `
s_cf4
` IN s_cv4 ` "#EC NOTEXT
INTO lv_condition.
ENDIF.
ENDIF.
IF s_cf5 IS NOT INITIAL.
IF lv_condition IS INITIAL.
CONCATENATE lv_condition
s_cf5
` IN s_cv5 ` "#EC NOTEXT
INTO lv_condition.
ELSE.
CONCATENATE lv_condition
` AND `
s_cf5
` IN s_cv5 ` "#EC NOTEXT
INTO lv_condition.
ENDIF.
ENDIF.
IF s_cf6 IS NOT INITIAL.
IF lv_condition IS INITIAL.
CONCATENATE lv_condition
s_cf6
` IN s_cv6 ` "#EC NOTEXT
INTO lv_condition.
ELSE.
CONCATENATE lv_condition
` AND `
s_cf6
` IN s_cv6 ` "#EC NOTEXT
INTO lv_condition.
ENDIF.
ENDIF.
OPEN CURSOR WITH HOLD l_cursor FOR
SELECT (lv_selection) " all data download into 1 file
FROM (p_tab)
WHERE (lv_condition)
ORDER BY PRIMARY KEY.
DO.
FETCH NEXT CURSOR l_cursor
INTO TABLE <fs_itab>
PACKAGE SIZE g_commit_count.
IF sy-subrc = 0.
PERFORM frm_archive.
CLEAR:<fs_itab>.
ELSE.
" no more data to be archived
EXIT.
ENDIF.
ENDDO.
CLOSE CURSOR l_cursor.
* 当所有数据都写完后
* a)输出标准的归档信息,从而可在假脱机处查看
* a)输出标准的归档信息,从而可在假脱机处查看
CALL FUNCTION 'ARCHIVE_WRITE_STATISTICS'
EXPORTING
archive_handle = g_archive_handle
EXCEPTIONS
EXPORTING
archive_handle = g_archive_handle
EXCEPTIONS
* internal_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
PERFORM msg_write_error_with_msg USING 'Archiving statistics write error'.
ENDIF.
IF sy-subrc <> 0.
PERFORM msg_write_error_with_msg USING 'Archiving statistics write error'.
ENDIF.
* b)最后关闭并生成归档文件
CALL FUNCTION 'ARCHIVE_CLOSE_FILE'
EXPORTING
archive_handle = g_archive_handle
EXCEPTIONS
internal_error = 1
wrong_access_to_archive = 2
OTHERS = 3.
IF sy-subrc <> 0.
PERFORM msg_write_error_with_msg USING 'Archive write error'.
ENDIF.
ENDFORM.
FORM msg_write_error_with_msg
USING txt TYPE c.
DATA:
len TYPE i,
flg_msg(1) TYPE c,
buf(200) TYPE c.
IF sy-msgid <> space AND
sy-msgty <> space AND
sy-msgno <> space.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
INTO buf.
flg_msg = 'X'.
ELSE.
flg_msg = space.
ENDIF.
mac_format_error.
len = strlen( txt ).
WRITE: / txt(len).
IF flg_msg = 'X'.
len = strlen( buf ).
WRITE: / buf(len).
ENDIF.
mac_format_normal.
ENDFORM.
EXPORTING
archive_handle = g_archive_handle
EXCEPTIONS
internal_error = 1
wrong_access_to_archive = 2
OTHERS = 3.
IF sy-subrc <> 0.
PERFORM msg_write_error_with_msg USING 'Archive write error'.
ENDIF.
ENDFORM.
FORM msg_write_error_with_msg
USING txt TYPE c.
DATA:
len TYPE i,
flg_msg(1) TYPE c,
buf(200) TYPE c.
IF sy-msgid <> space AND
sy-msgty <> space AND
sy-msgno <> space.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
INTO buf.
flg_msg = 'X'.
ELSE.
flg_msg = space.
ENDIF.
mac_format_error.
len = strlen( txt ).
WRITE: / txt(len).
IF flg_msg = 'X'.
len = strlen( buf ).
WRITE: / buf(len).
ENDIF.
mac_format_normal.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CREATE_DYNAMIC_TABLE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
*& Form FRM_CREATE_DYNAMIC_TABLE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_create_dynamic_table .
CREATE DATA gt_dyn_itab TYPE TABLE OF (p_tab).
ASSIGN gt_dyn_itab->* TO <fs_itab>.
CREATE DATA gs_wa TYPE (p_tab).
ASSIGN gs_wa->* TO <fs_wa>.
ENDFORM.
CREATE DATA gt_dyn_itab TYPE TABLE OF (p_tab).
ASSIGN gt_dyn_itab->* TO <fs_itab>.
CREATE DATA gs_wa TYPE (p_tab).
ASSIGN gs_wa->* TO <fs_wa>.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_GET_TABLERUL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
*& Form FRM_GET_TABLERUL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_get_tablerul .
SELECT *
INTO TABLE gt_tabrule
FROM zdvm_clearrule
WHERE type = 'A'.
IF sy-subrc <> 0.
MESSAGE s000(zsd_001) WITH text-m01.
LEAVE LIST-PROCESSING.
ENDIF.
SORT gt_tabrule BY tabname fieldname.
ENDFORM. " FRM_GET_TABLERUL
SELECT *
INTO TABLE gt_tabrule
FROM zdvm_clearrule
WHERE type = 'A'.
IF sy-subrc <> 0.
MESSAGE s000(zsd_001) WITH text-m01.
LEAVE LIST-PROCESSING.
ENDIF.
SORT gt_tabrule BY tabname fieldname.
ENDFORM. " FRM_GET_TABLERUL
*&---------------------------------------------------------------------*
*& Form FRM_F4_HELP
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
*& Form FRM_F4_HELP
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_f4_help .
DATA: lt_tab TYPE TABLE OF ty_tab,
ls_tab TYPE ty_tab,
lt_return TYPE TABLE OF ddshretval,
ls_return TYPE ddshretval,
lv_tabname TYPE zdvm_clearrule-tabname.
SORT gt_tabrule BY tabname fieldname.
IF gt_tabrule IS NOT INITIAL.
LOOP AT gt_tabrule INTO gs_tabrule.
ls_tab-tabname = gs_tabrule-tabname.
APPEND ls_tab TO lt_tab.
ENDLOOP.
SORT lt_tab.
DELETE ADJACENT DUPLICATES FROM lt_tab.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'TABNAME'
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'P_TAB'
value_org = 'S'
TABLES
value_tab = lt_tab
return_tab = lt_return
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ELSE.
MESSAGE s000(zsd_001) WITH text-m01.
LEAVE LIST-PROCESSING.
ENDIF.
ENDFORM. " FRM_F4_HELP
DATA: lt_tab TYPE TABLE OF ty_tab,
ls_tab TYPE ty_tab,
lt_return TYPE TABLE OF ddshretval,
ls_return TYPE ddshretval,
lv_tabname TYPE zdvm_clearrule-tabname.
SORT gt_tabrule BY tabname fieldname.
IF gt_tabrule IS NOT INITIAL.
LOOP AT gt_tabrule INTO gs_tabrule.
ls_tab-tabname = gs_tabrule-tabname.
APPEND ls_tab TO lt_tab.
ENDLOOP.
SORT lt_tab.
DELETE ADJACENT DUPLICATES FROM lt_tab.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'TABNAME'
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'P_TAB'
value_org = 'S'
TABLES
value_tab = lt_tab
return_tab = lt_return
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ELSE.
MESSAGE s000(zsd_001) WITH text-m01.
LEAVE LIST-PROCESSING.
ENDIF.
ENDFORM. " FRM_F4_HELP
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
*& Form FRM_CHECK_INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_check_input .
DATA: lv_message TYPE char50,
lv_string TYPE string.
SORT gt_tabrule BY tabname.
READ TABLE gt_tabrule INTO gs_tabrule WITH KEY tabname = p_tab BINARY SEARCH.
IF sy-subrc = 0 .
IF p_tab+0(1) <> 'Z'.
CONCATENATE text-m08 p_tab text-m10
INTO lv_message SEPARATED BY space.
MESSAGE e000(zsd_001) WITH lv_message.
ENDIF.
IF gs_tabrule-type = 'A'.
ELSE.
CONCATENATE text-m08 p_tab text-m11
INTO lv_message SEPARATED BY space.
MESSAGE e000(zsd_001) WITH lv_message.
ENDIF.
ELSE.
CONCATENATE text-m08 p_tab text-m09
INTO lv_message SEPARATED BY space.
MESSAGE e000(zsd_001) WITH lv_message.
ENDIF.
SORT gt_tabrule BY tabname fieldname.
DEFINE mac_check_fieldlist.
IF &1 IS NOT INITIAL.
READ TABLE gt_tabrule INTO gs_tabrule WITH KEY tabname = p_tab
fieldname = &1 BINARY SEARCH.
IF sy-subrc <> 0.
lv_string = &1.
CONDENSE lv_string.
CONCATENATE &2 lv_string text-m04 p_tab
INTO lv_message SEPARATED BY space.
MESSAGE e000(zsd_001) WITH lv_message.
ENDIF.
ENDIF.
END-OF-DEFINITION.
mac_check_fieldlist:s_cf1 scf1,
s_cf2 scf2,
s_cf3 scf3,
s_cf4 scf4,
s_cf5 scf5,
s_cf6 scf6.
ENDFORM.
DATA: lv_message TYPE char50,
lv_string TYPE string.
SORT gt_tabrule BY tabname.
READ TABLE gt_tabrule INTO gs_tabrule WITH KEY tabname = p_tab BINARY SEARCH.
IF sy-subrc = 0 .
IF p_tab+0(1) <> 'Z'.
CONCATENATE text-m08 p_tab text-m10
INTO lv_message SEPARATED BY space.
MESSAGE e000(zsd_001) WITH lv_message.
ENDIF.
IF gs_tabrule-type = 'A'.
ELSE.
CONCATENATE text-m08 p_tab text-m11
INTO lv_message SEPARATED BY space.
MESSAGE e000(zsd_001) WITH lv_message.
ENDIF.
ELSE.
CONCATENATE text-m08 p_tab text-m09
INTO lv_message SEPARATED BY space.
MESSAGE e000(zsd_001) WITH lv_message.
ENDIF.
SORT gt_tabrule BY tabname fieldname.
DEFINE mac_check_fieldlist.
IF &1 IS NOT INITIAL.
READ TABLE gt_tabrule INTO gs_tabrule WITH KEY tabname = p_tab
fieldname = &1 BINARY SEARCH.
IF sy-subrc <> 0.
lv_string = &1.
CONDENSE lv_string.
CONCATENATE &2 lv_string text-m04 p_tab
INTO lv_message SEPARATED BY space.
MESSAGE e000(zsd_001) WITH lv_message.
ENDIF.
ENDIF.
END-OF-DEFINITION.
mac_check_fieldlist:s_cf1 scf1,
s_cf2 scf2,
s_cf3 scf3,
s_cf4 scf4,
s_cf5 scf5,
s_cf6 scf6.
ENDFORM.
*Text elements
*----------------------------------------------------------
* M01 Please Maintain in Table ZDVM_CLEARRULE with Type A(Archive)!
* M02 Please input
* M03 value!
* M04 not exist in table
* M06 Table
* M07 not exist in system!
* M08 Table
* M09 not exist in table ZDVM_CLEARRULE with Type A(Archive)!
* M10 is not Z table!
* M11 is not Header Table!
*Messages
*----------------------------------------------------------
*
* Message class: ZSD_001
*000 &1&2&3&4
Extracted by Mass Download version 1.5.0 - E.G.Mellodew. 1998-2017. Sap Release 740*----------------------------------------------------------
* M01 Please Maintain in Table ZDVM_CLEARRULE with Type A(Archive)!
* M02 Please input
* M03 value!
* M04 not exist in table
* M06 Table
* M07 not exist in system!
* M08 Table
* M09 not exist in table ZDVM_CLEARRULE with Type A(Archive)!
* M10 is not Z table!
* M11 is not Header Table!
*Messages
*----------------------------------------------------------
*
* Message class: ZSD_001
*000 &1&2&3&4
以下代码针对多表(抬头表+行项目+日志表等)联动归档;
Code listing for: ZARCHIVE_WRITE_MULTILIST
Description: Include ZARCHIVE_WRITE_MULTILIST
*&---------------------------------------------------------------------*
*& Include ZARCHIVE_WRITE_MULTILIST
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form frm_archive_MULTILIST
*&---------------------------------------------------------------------*
* create itab by selection-screen info
*----------------------------------------------------------------------*
*& Include ZARCHIVE_WRITE_MULTILIST
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form frm_archive_MULTILIST
*&---------------------------------------------------------------------*
* create itab by selection-screen info
*----------------------------------------------------------------------*
FORM frm_archive_multilist .
DATA: lv_selection TYPE string.
DATA: lv_condition TYPE string.
DATA: lv_answer.
DATA: l_cursor TYPE cursor.
DATA: lt_tabrule TYPE TABLE OF zdvm_clearrule WITH HEADER LINE,
lw_tabrule TYPE zdvm_clearrule.
CHECK p_tab <> 'ZTSDE007A'.
SELECT *
INTO TABLE lt_tabrule
FROM zdvm_clearrule
WHERE type IN ('I','L')
AND header = p_tab.
CASE sy-dbcnt.
WHEN 0.
CHECK 0 = 1.
WHEN 1.
READ TABLE lt_tabrule INTO lw_tabrule INDEX 1.
CONCATENATE 'Table'
p_tab
'has item table:'
lw_tabrule-tabname
', Continue?'
INTO lv_selection SEPARATED BY space.
WHEN OTHERS.
LOOP AT lt_tabrule.
lw_tabrule = lt_tabrule.
AT FIRST.
CONCATENATE 'Table'
p_tab
'has item/log table:'
lw_tabrule-tabname
INTO lv_selection SEPARATED BY space.
CONTINUE.
ENDAT.
CONCATENATE lv_selection
'/'
lw_tabrule-tabname
INTO lv_selection.
AT LAST.
CONCATENATE lv_selection
', Continue?'
INTO lv_selection.
ENDAT.
ENDLOOP.
ENDCASE.
DATA: lv_selection TYPE string.
DATA: lv_condition TYPE string.
DATA: lv_answer.
DATA: l_cursor TYPE cursor.
DATA: lt_tabrule TYPE TABLE OF zdvm_clearrule WITH HEADER LINE,
lw_tabrule TYPE zdvm_clearrule.
CHECK p_tab <> 'ZTSDE007A'.
SELECT *
INTO TABLE lt_tabrule
FROM zdvm_clearrule
WHERE type IN ('I','L')
AND header = p_tab.
CASE sy-dbcnt.
WHEN 0.
CHECK 0 = 1.
WHEN 1.
READ TABLE lt_tabrule INTO lw_tabrule INDEX 1.
CONCATENATE 'Table'
p_tab
'has item table:'
lw_tabrule-tabname
', Continue?'
INTO lv_selection SEPARATED BY space.
WHEN OTHERS.
LOOP AT lt_tabrule.
lw_tabrule = lt_tabrule.
AT FIRST.
CONCATENATE 'Table'
p_tab
'has item/log table:'
lw_tabrule-tabname
INTO lv_selection SEPARATED BY space.
CONTINUE.
ENDAT.
CONCATENATE lv_selection
'/'
lw_tabrule-tabname
INTO lv_selection.
AT LAST.
CONCATENATE lv_selection
', Continue?'
INTO lv_selection.
ENDAT.
ENDLOOP.
ENDCASE.
* popup item table info
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
text_question = lv_selection
IMPORTING
answer = lv_answer.
IF lv_answer <> '1'.
LEAVE LIST-PROCESSING.
ENDIF.
CLEAR:lv_selection.
lv_selection = ' * '.
IF s_cf1 IS NOT INITIAL.
IF lv_condition IS INITIAL.
CONCATENATE lv_condition
s_cf1
` IN s_cv1 ` "#EC NOTEXT
INTO lv_condition.
ELSE.
CONCATENATE lv_condition
` AND `
s_cf1
` IN s_cv1 ` "#EC NOTEXT
INTO lv_condition.
ENDIF.
ENDIF.
IF s_cf2 IS NOT INITIAL.
IF lv_condition IS INITIAL.
CONCATENATE lv_condition
s_cf2
` IN s_cv2 ` "#EC NOTEXT
INTO lv_condition.
ELSE.
CONCATENATE lv_condition
` AND `
s_cf2
` IN s_cv2 ` "#EC NOTEXT
INTO lv_condition.
ENDIF.
ENDIF.
IF s_cf3 IS NOT INITIAL.
IF lv_condition IS INITIAL.
CONCATENATE lv_condition
s_cf3
` IN s_cv3 ` "#EC NOTEXT
INTO lv_condition.
ELSE.
CONCATENATE lv_condition
` AND `
s_cf3
` IN s_cv3 ` "#EC NOTEXT
INTO lv_condition.
ENDIF.
ENDIF.
IF s_cf4 IS NOT INITIAL.
IF lv_condition IS INITIAL.
CONCATENATE lv_condition
s_cf4
` IN s_cv4 ` "#EC NOTEXT
INTO lv_condition.
ELSE.
CONCATENATE lv_condition
` AND `
s_cf4
` IN s_cv4 ` "#EC NOTEXT
INTO lv_condition.
ENDIF.
ENDIF.
IF s_cf5 IS NOT INITIAL.
IF lv_condition IS INITIAL.
CONCATENATE lv_condition
s_cf5
` IN s_cv5 ` "#EC NOTEXT
INTO lv_condition.
ELSE.
CONCATENATE lv_condition
` AND `
s_cf5
` IN s_cv5 ` "#EC NOTEXT
INTO lv_condition.
ENDIF.
ENDIF.
IF s_cf6 IS NOT INITIAL.
IF lv_condition IS INITIAL.
CONCATENATE lv_condition
s_cf6
` IN s_cv6 ` "#EC NOTEXT
INTO lv_condition.
ELSE.
CONCATENATE lv_condition
` AND `
s_cf6
` IN s_cv6 ` "#EC NOTEXT
INTO lv_condition.
ENDIF.
ENDIF.
OPEN CURSOR WITH HOLD l_cursor FOR
SELECT (lv_selection) " all data download into 1 file
FROM (p_tab)
WHERE (lv_condition)
ORDER BY PRIMARY KEY.
g_commit_count = gs_tabrule-commitsize.
DO.
FETCH NEXT CURSOR l_cursor
INTO TABLE <fs_itab>
PACKAGE SIZE g_commit_count.
IF sy-subrc = 0.
EXPORTING
text_question = lv_selection
IMPORTING
answer = lv_answer.
IF lv_answer <> '1'.
LEAVE LIST-PROCESSING.
ENDIF.
CLEAR:lv_selection.
lv_selection = ' * '.
IF s_cf1 IS NOT INITIAL.
IF lv_condition IS INITIAL.
CONCATENATE lv_condition
s_cf1
` IN s_cv1 ` "#EC NOTEXT
INTO lv_condition.
ELSE.
CONCATENATE lv_condition
` AND `
s_cf1
` IN s_cv1 ` "#EC NOTEXT
INTO lv_condition.
ENDIF.
ENDIF.
IF s_cf2 IS NOT INITIAL.
IF lv_condition IS INITIAL.
CONCATENATE lv_condition
s_cf2
` IN s_cv2 ` "#EC NOTEXT
INTO lv_condition.
ELSE.
CONCATENATE lv_condition
` AND `
s_cf2
` IN s_cv2 ` "#EC NOTEXT
INTO lv_condition.
ENDIF.
ENDIF.
IF s_cf3 IS NOT INITIAL.
IF lv_condition IS INITIAL.
CONCATENATE lv_condition
s_cf3
` IN s_cv3 ` "#EC NOTEXT
INTO lv_condition.
ELSE.
CONCATENATE lv_condition
` AND `
s_cf3
` IN s_cv3 ` "#EC NOTEXT
INTO lv_condition.
ENDIF.
ENDIF.
IF s_cf4 IS NOT INITIAL.
IF lv_condition IS INITIAL.
CONCATENATE lv_condition
s_cf4
` IN s_cv4 ` "#EC NOTEXT
INTO lv_condition.
ELSE.
CONCATENATE lv_condition
` AND `
s_cf4
` IN s_cv4 ` "#EC NOTEXT
INTO lv_condition.
ENDIF.
ENDIF.
IF s_cf5 IS NOT INITIAL.
IF lv_condition IS INITIAL.
CONCATENATE lv_condition
s_cf5
` IN s_cv5 ` "#EC NOTEXT
INTO lv_condition.
ELSE.
CONCATENATE lv_condition
` AND `
s_cf5
` IN s_cv5 ` "#EC NOTEXT
INTO lv_condition.
ENDIF.
ENDIF.
IF s_cf6 IS NOT INITIAL.
IF lv_condition IS INITIAL.
CONCATENATE lv_condition
s_cf6
` IN s_cv6 ` "#EC NOTEXT
INTO lv_condition.
ELSE.
CONCATENATE lv_condition
` AND `
s_cf6
` IN s_cv6 ` "#EC NOTEXT
INTO lv_condition.
ENDIF.
ENDIF.
OPEN CURSOR WITH HOLD l_cursor FOR
SELECT (lv_selection) " all data download into 1 file
FROM (p_tab)
WHERE (lv_condition)
ORDER BY PRIMARY KEY.
g_commit_count = gs_tabrule-commitsize.
DO.
FETCH NEXT CURSOR l_cursor
INTO TABLE <fs_itab>
PACKAGE SIZE g_commit_count.
IF sy-subrc = 0.
* 取item表信息归档
PERFORM frm_archive_item TABLES lt_tabrule[].
CLEAR:<fs_itab>.
ELSE.
" no more data to be archived
EXIT.
ENDIF.
ENDDO.
CLOSE CURSOR l_cursor.
CLEAR:<fs_itab>.
ELSE.
" no more data to be archived
EXIT.
ENDIF.
ENDDO.
CLOSE CURSOR l_cursor.
* 当所有数据都写完后
* a)输出标准的归档信息,从而可在假脱机处查看
* a)输出标准的归档信息,从而可在假脱机处查看
CALL FUNCTION 'ARCHIVE_WRITE_STATISTICS'
EXPORTING
archive_handle = g_archive_handle
EXCEPTIONS
EXPORTING
archive_handle = g_archive_handle
EXCEPTIONS
* internal_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
PERFORM msg_write_error_with_msg USING 'Archiving statistics write error'.
ENDIF.
IF sy-subrc <> 0.
PERFORM msg_write_error_with_msg USING 'Archiving statistics write error'.
ENDIF.
* b)最后关闭并生成归档文件
CALL FUNCTION 'ARCHIVE_CLOSE_FILE'
EXPORTING
archive_handle = g_archive_handle
EXCEPTIONS
internal_error = 1
wrong_access_to_archive = 2
OTHERS = 3.
IF sy-subrc <> 0.
PERFORM msg_write_error_with_msg USING 'Archive write error'.
ENDIF.
LEAVE LIST-PROCESSING.
ENDFORM.
EXPORTING
archive_handle = g_archive_handle
EXCEPTIONS
internal_error = 1
wrong_access_to_archive = 2
OTHERS = 3.
IF sy-subrc <> 0.
PERFORM msg_write_error_with_msg USING 'Archive write error'.
ENDIF.
LEAVE LIST-PROCESSING.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_ARCHIVE_ITEM
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
*& Form FRM_ARCHIVE_ITEM
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_archive_item TABLES pt_tabrule STRUCTURE zdvm_clearrule.
DATA:lr_item TYPE REF TO data,
lw_tabrule TYPE zdvm_clearrule,
lt_cond TYPE TABLE OF ty_cond,
ls_cond TYPE ty_cond.
FIELD-SYMBOLS:<fs_item> TYPE STANDARD TABLE.
SORT:pt_tabrule BY tabname fieldname.
LOOP AT <fs_itab> ASSIGNING <fs_wa>.
CALL FUNCTION 'ARCHIVE_NEW_OBJECT'
EXPORTING
archive_handle = g_archive_handle
EXCEPTIONS
internal_error = 1
wrong_access_to_archive = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
DATA:lr_item TYPE REF TO data,
lw_tabrule TYPE zdvm_clearrule,
lt_cond TYPE TABLE OF ty_cond,
ls_cond TYPE ty_cond.
FIELD-SYMBOLS:<fs_item> TYPE STANDARD TABLE.
SORT:pt_tabrule BY tabname fieldname.
LOOP AT <fs_itab> ASSIGNING <fs_wa>.
CALL FUNCTION 'ARCHIVE_NEW_OBJECT'
EXPORTING
archive_handle = g_archive_handle
EXCEPTIONS
internal_error = 1
wrong_access_to_archive = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
* 循环内表,插入归档数据
CALL FUNCTION 'ARCHIVE_PUT_RECORD' "用于归单条记录
EXPORTING
archive_handle = g_archive_handle
record = <fs_wa>
record_flags = 'X' " 标记该记录是要被删除程序删除的
record_structure = p_tab
EXCEPTIONS
internal_error = 1
wrong_access_to_archive = 2
invalid_record_structure = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
LOOP AT pt_tabrule.
lw_tabrule = pt_tabrule.
CLEAR:ls_cond.
IF lt_cond IS NOT INITIAL.
CONCATENATE 'AND' ls_cond INTO ls_cond RESPECTING BLANKS.
ENDIF.
CONCATENATE lw_tabrule-fieldname '= <FS_WA>-' lw_tabrule-fname_h INTO ls_cond RESPECTING BLANKS.
APPEND ls_cond TO lt_cond.
AT END OF tabname.
CREATE DATA lr_item TYPE TABLE OF (lw_tabrule-tabname).
ASSIGN lr_item->* TO <fs_item>.
SELECT *
INTO TABLE <fs_item>
FROM (pt_tabrule-tabname)
WHERE (lt_cond).
IF sy-subrc = 0.
CALL FUNCTION 'ARCHIVE_PUT_TABLE' "用于归整表记录
EXPORTING
archive_handle = g_archive_handle
record_flags = 'X' " 标记该记录是要被删除程序删除的
record_structure = pt_tabrule-tabname
TABLES
table = <fs_item>
EXPORTING
archive_handle = g_archive_handle
record = <fs_wa>
record_flags = 'X' " 标记该记录是要被删除程序删除的
record_structure = p_tab
EXCEPTIONS
internal_error = 1
wrong_access_to_archive = 2
invalid_record_structure = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
LOOP AT pt_tabrule.
lw_tabrule = pt_tabrule.
CLEAR:ls_cond.
IF lt_cond IS NOT INITIAL.
CONCATENATE 'AND' ls_cond INTO ls_cond RESPECTING BLANKS.
ENDIF.
CONCATENATE lw_tabrule-fieldname '= <FS_WA>-' lw_tabrule-fname_h INTO ls_cond RESPECTING BLANKS.
APPEND ls_cond TO lt_cond.
AT END OF tabname.
CREATE DATA lr_item TYPE TABLE OF (lw_tabrule-tabname).
ASSIGN lr_item->* TO <fs_item>.
SELECT *
INTO TABLE <fs_item>
FROM (pt_tabrule-tabname)
WHERE (lt_cond).
IF sy-subrc = 0.
CALL FUNCTION 'ARCHIVE_PUT_TABLE' "用于归整表记录
EXPORTING
archive_handle = g_archive_handle
record_flags = 'X' " 标记该记录是要被删除程序删除的
record_structure = pt_tabrule-tabname
TABLES
table = <fs_item>
* RECORD_FLAGS_TABLE =
EXCEPTIONS
internal_error = 1
wrong_access_to_archive = 2
invalid_record_structure = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDIF.
CLEAR:lt_cond.
ENDAT.
ENDLOOP.
internal_error = 1
wrong_access_to_archive = 2
invalid_record_structure = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDIF.
CLEAR:lt_cond.
ENDAT.
ENDLOOP.
* 根据归档处理号,保存数据到归档文件
CALL FUNCTION 'ARCHIVE_SAVE_OBJECT'
EXPORTING
archive_handle = g_archive_handle
EXPORTING
archive_handle = g_archive_handle
* IMPORTING
* OBJECT_OFFSET =
* ARCHIVE_NAME =
* OBJECT_OFFSET =
* ARCHIVE_NAME =
EXCEPTIONS
file_io_error = 1
internal_error = 2
open_error = 3
termination_requested = 4
wrong_access_to_archive = 5
OTHERS = 6.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDLOOP.
ENDFORM.
Extracted by Mass Download version 1.5.0 - E.G.Mellodew. 1998-2017. Sap Release 740file_io_error = 1
internal_error = 2
open_error = 3
termination_requested = 4
wrong_access_to_archive = 5
OTHERS = 6.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDLOOP.
ENDFORM.
0 0
- ZARCHIVE_WRITE(限制用于Z表)
- 限制输入A-Z a-z 0-9
- SQL高级语句-约束 (Constraints)用于限制加入表的数据的类型。
- EditText 利用IntentFilter 限制输入 0-9 a-z A-Z
- 解锁Program&Z表
- z
- z
- Z
- Z
- Z
- Z
- Z
- Z
- [GPU体系结构/GPU架构]深度解析AMD GPU中的Hierarchical Z以及Early-z被诸多限制的原因
- 用于
- wap应用对请求地址的限制 filter,也可以用于其他
- 用于限制文本中输入框中只能输入日期格式的函数
- wap应用对请求地址的限制 filter,也可以用于其他
- 应用java mail和阿里云发送邮件和上传附件
- 使用HTML5制作云层效果
- TNS:listener could not find available handler with matching protocol stack 解决办法
- 斐波那契额数列
- 机器学习之-分类性能指标-准确率-召回率-ROC曲线
- ZARCHIVE_WRITE(限制用于Z表)
- FFMPEG 图像拉伸缩放及数据格式转换
- 软件测试面试题
- C#学习心得
- esxi
- 关于.net连接mysql时配置文件要怎么写
- 【设计模式】面向对象原则
- 微信小程序开发过程中总结的注意事项
- 包围球的计算