Sie sind auf Seite 1von 12

SAP Data Archiving :->

1. Goto t-code AOBJ and create archiving object say : Z_AOBJ.

At the same time create 3 diff. programs : Z_ARCHIVING_WRITE Z_ARCHIVING_DELETE Z_ZRCHIVING_READ and pass these program names to archiving object. 2. Now goto Structure Definition & pass the segment and structure name as below :

3. Now goto customize settings and give the file size for data object.

And save this archiving object. 4. Now we will go through the code of all 3 programs ( Read , write & delete ). Read Program :
REPORT z_archive_read.

* selections SELECT-OPTIONS: s_date FOR sy-datum. "further selections.. * data declaration DATA: lt_uilog lt_uilog_tmp DATA: lv_handle FIELD-SYMBOLS: <fs_uilog> START-OF-SELECTION. AUTHORITY-CHECK OBJECT 'Z_UILOG' ID 'ACTVT' FIELD z_if_masking_constant=>gc_auth_display. IF sy-subrc <> 0. MESSAGE e052(z_ui) WITH sy-uname. EXIT. ENDIF. * open existing archive files CALL FUNCTION 'ARCHIVE_OPEN_FOR_READ' EXPORTING object = 'Z_AOBJ' IMPORTING archive_handle = lv_handle EXCEPTIONS OTHERS = 1. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. EXIT. ENDIF. * loop to get the next data object from the archive file(s) DO. CALL FUNCTION 'ARCHIVE_GET_NEXT_OBJECT' EXPORTING archive_handle = lv_handle

TYPE z_tt_uilog, TYPE z_tt_uilog. LIKE sy-tabix. TYPE z_uilog.

EXCEPTIONS end_of_file IF sy-subrc <> 0. EXIT. ENDIF. * *

= 1.

"nur die Ausnahmen, auf die man "wirklich reagieren will

get data records from the data container SBOOK CALL FUNCTION 'ARCHIVE_GET_TABLE' EXPORTING archive_handle = lv_handle record_structure = 'Z_UILOG' all_records_of_object = 'X' TABLES table = lt_uilog_tmp EXCEPTIONS end_of_object = 0. "not entries of this type check lt_sbook_tmp entries against selections. Delete not requested entries LOOP AT lt_uilog_tmp ASSIGNING <fs_uilog> WHERE view_date IN s_date. APPEND <fs_uilog> TO lt_uilog. ENDLOOP. REFRESH lt_uilog_tmp. ENDDO.

* *

* prepare data * ...

(sort etc.)

* would be better to use e.g. 'REUSE_ALV_LIST_DISPLAY' LOOP AT lt_uilog ASSIGNING <fs_uilog>. WRITE: / 'CLIENT :', <fs_uilog>-client, / 'GUID :', <fs_uilog>-guid, / 'VIEW_DATE :', <fs_uilog>-view_date, / 'VIEW_TIME :', <fs_uilog>-view_time, / 'USER_NAME :', <fs_uilog>-user_name, / 'PERNR :', <fs_uilog>-pernr, / 'MACHINE_IP :', <fs_uilog>-machine_ip, / 'T_CODE :', <fs_uilog>-t_code, / 'SCR_PRG :', <fs_uilog>-scr_prg, / 'SCR_NO :', <fs_uilog>-scr_no, / 'TAB_NAME :', <fs_uilog>-tab_name, / 'FLD_NAME :', <fs_uilog>-fld_name, / 'FLD_VALUE :', <fs_uilog>-fld_value, / 'FREE_TEXT :', <fs_uilog>-free_text.

SKIP. ENDLOOP. * close the archiving session CALL FUNCTION 'ARCHIVE_CLOSE_FILE' EXPORTING archive_handle = lv_handle.

Write Program :

REPORT

z_archive_write.

CONSTANTS: gc_object DATA:

TYPE arch_obj-object VALUE 'Z_AOBJ'. TYPE TYPE LIKE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE c, c, sy-tabix, c VALUE ' ', string, i, i, c. z_tt_uilog, z_uilog, sy-datum.

DATA:

lv_files_create(1) lv_delete_testmode(1) lv_handle lv_session_interrupted(1) lv_object_identifier lv_total_object_number lv_objects_processed lv_progress_send(1) lt_uilog ls_uilog lv_date_new

* selection criteria and parameters SELECTION-SCREEN BEGIN OF BLOCK uilog_archiving WITH FRAME TITLE text001. SELECT-OPTIONS: s_date FOR sy-datum. SELECTION-SCREEN END OF BLOCK uilog_archiving. INCLUDE arch_write_prg_standard2. INITIALIZATION. PERFORM standard_opt_writeprg_init. AT SELECTION-SCREEN OUTPUT. " flow control

" flow contol: frame titel

PERFORM standard_opt_writeprg_atoutput USING gc_object. " options for start of delete program START-OF-SELECTION.

AUTHORITY-CHECK OBJECT 'Z_UILOG' ID 'ACTVT' FIELD z_if_masking_constant=>gc_auth_write. IF sy-subrc <> 0. MESSAGE e060(z_ui) WITH sy-uname. EXIT. ENDIF. * set parameters for 'ARCHIVE_OPEN_FOR_WRITE' from selection screen lv_delete_testmode = 'X'. IF p_writst = 'X'. lv_files_create = space. ELSE. lv_files_create = 'X'. IF p_deltst IS INITIAL. lv_delete_testmode = space. ENDIF. ENDIF. lv_date_new = s_date. * select key fields SELECT * FROM z_uilog INTO TABLE lt_uilog WHERE view_date IN s_date. * open a new archiving session to archive data CALL FUNCTION 'ARCHIVE_OPEN_FOR_WRITE' EXPORTING call_delete_job_in_test_mode = lv_delete_testmode * comments = p_coment create_archive_file = lv_files_create object = 'Z_AOBJ' output_sel_screen_when_dialog = '' IMPORTING archive_handle = lv_handle.

LOOP AT lt_uilog INTO ls_uilog. * initialize a new data object CALL FUNCTION 'ARCHIVE_NEW_OBJECT' EXPORTING archive_handle = lv_handle. * object_id = lv_data_object_id. " optional: ADK index * put data records into ADK's data container CALL FUNCTION 'ARCHIVE_PUT_RECORD' EXPORTING archive_handle = lv_handle

record_structure = 'Z_UILOG' record = ls_uilog. * write data object into the archive file CALL FUNCTION 'ARCHIVE_SAVE_OBJECT' EXPORTING archive_handle = lv_handle EXCEPTIONS termination_requested = 1. IF sy-subrc = 1. lv_session_interrupted = 'X'. EXIT. ENDIF. ENDLOOP. * create the default spool list CALL FUNCTION 'ARCHIVE_WRITE_STATISTICS' EXPORTING archive_handle = lv_handle. * close the archiving session CALL FUNCTION 'ARCHIVE_CLOSE_FILE' EXPORTING archive_handle = lv_handle. Delete Program :

REPORT

z_archive_delete.

* data declaration CONSTANTS: gc_object DATA: lv_handle lv_commit_cnt lv_object_cnt lv_delcnt lv_cnt DATA: lt_uilog lt_uilog_delete LIKE LIKE TYPE TYPE TYPE

LIKE arch_obj-object VALUE 'Z_AOBJ'. sy-tabix, arch_usr-arch_comit, i, i, i. TYPE z_tt_uilog, TYPE z_tt_uilog.

DATA: lv_document TYPE admi_run-document, lv_archive_key TYPE admi_files-archiv_key, lv_objects_to_delete TYPE i. INCLUDE arch_delete_prg_standard1. "<<< flow control

INITIALIZATION. PERFORM standard_opt_deleteprg_init. START-OF-SELECTION.

"<<< flow control: frame titel

AUTHORITY-CHECK OBJECT 'ZCDP_UILOG' ID 'ACTVT' FIELD z_if_masking_constant=>gc_auth_delete. IF sy-subrc <> 0. MESSAGE e053(z_ui) WITH sy-uname. EXIT. ENDIF.

* open a new archiving session to delete data CALL FUNCTION 'ARCHIVE_OPEN_FOR_DELETE' EXPORTING object = gc_object test_mode = p_deltst IMPORTING archive_handle = lv_handle. * get Customizing data from the archiving object CALL FUNCTION 'ARCHIVE_GET_CUSTOMIZING_DATA' EXPORTING object = gc_object IMPORTING commit_count_for_delete_prg = lv_commit_cnt. * get total number of objects to be deleted CALL FUNCTION 'ARCHIVE_GET_INFORMATION' EXPORTING archive_handle = lv_handle IMPORTING archive_document = lv_document archive_name = lv_archive_key. SELECT SINGLE obj_count FROM admi_files INTO lv_objects_to_delete WHERE document = lv_document AND archiv_key = lv_archive_key. * loop to get the next data object from the archive file(s) CLEAR lv_object_cnt. DO. CALL FUNCTION 'ARCHIVE_GET_NEXT_OBJECT' EXPORTING archive_handle = lv_handle

EXCEPTIONS end_of_file IF sy-subrc = 1. EXIT. ENDIF.

= 01.

ADD 1 TO lv_object_cnt. REFRESH lt_uilog. CALL FUNCTION 'ARCHIVE_GET_TABLE' EXPORTING archive_handle = lv_handle record_structure = 'Z_UILOG' all_records_of_object = 'X' TABLES table = lt_uilog. APPEND LINES OF lt_uilog TO lt_uilog_delete. IF lv_object_cnt = lv_commit_cnt. * delete data (if running in production mode) or simulate deletion (if * running in test mode) and collect statistics PERFORM delete_from_table USING lv_handle p_deltst lv_object_cnt lt_uilog_delete. DESCRIBE TABLE lt_uilog_delete LINES lv_cnt. ADD lv_object_cnt TO lv_delcnt. CLEAR lv_object_cnt. REFRESH lt_uilog_delete. ".. dependig/further tables ENDIF.

" value of commit counter

* send progress indicator CALL FUNCTION 'PROGRESS_INDICATOR' EXPORTING i_text = '&1 (&2 von &3) der Einzelflugbuchungen bearbeite t'(003) i_processed = lv_delcnt i_total = lv_objects_to_delete. ENDDO. IF lv_object_cnt >= 1. PERFORM delete_from_table USING lv_handle " deleting last package p_deltst lv_object_cnt lt_uilog_delete.

ADD lv_object_cnt TO lv_delcnt. CLEAR lv_object_cnt. ".. dependig/further tables ENDIF. IF lv_delcnt = lv_objects_to_delete. * send progress indicator at the end CALL FUNCTION 'PROGRESS_INDICATOR' EXPORTING i_text = '&1 (&2 von &3) der Einzelflugbuchungen bearbeitet'(003) i_processed = lv_delcnt i_total = lv_objects_to_delete i_output_immediately = 'X'. ENDIF. * create statistics list CALL FUNCTION 'ARCHIVE_WRITE_STATISTICS' EXPORTING archive_handle = lv_handle statistics_only_per_file = 'X'. * close the archiving session CALL FUNCTION 'ARCHIVE_CLOSE_FILE' EXPORTING archive_handle = lv_handle. *---------------------------------------------------------------------* * FORM DELETE_FROM_TABLE * *---------------------------------------------------------------------* * --> P_HANDLE ADK handle * --> P_TESTMODE X = deleting in test mode * --> P_OBJECT_CNT number of deleted data objects * --> PT_SBOOK_DELETE records to delete from SBOOK * --> PT_... records to delete from further tables *---------------------------------------------------------------------* FORM delete_from_table USING value(p_handle) LIKE sy-tabix value(p_testmode) LIKE p_deltst value(p_object_cnt) LIKE sy-dbcnt pt_uilog_delete LIKE lt_uilog_delete. DATA: ls_stat_itab TYPE arch_stat, lt_stat_itab TYPE TABLE OF arch_stat, lt_uilog_aux TYPE zcdp_tt_uilog, lv_dbcnt TYPE sy-dbcnt.

"#EC NEEDED

REFRESH lt_stat_itab.

IF p_testmode IS INITIAL. * delete data on DB if running in production mode DELETE zcdp_uilog FROM TABLE pt_uilog_delete. " delete job restart able lv_dbcnt = sy-dbcnt. ".. dependig/further tables ELSE. * select data from DB if running in test mode SELECT * FROM z_uilog INTO TABLE lt_uilog_aux FOR ALL ENTRIES IN pt_uilog_delete WHERE view_date = pt_uilog_delete-view_date AND view_time = pt_uilog_delete-view_time. lv_dbcnt = sy-dbcnt. ".. dependig/further tables ENDIF. ls_stat_itab-tabname = ls_stat_itab-count = APPEND ls_stat_itab TO ls_stat_itab-tabname = ls_stat_itab-count = APPEND ls_stat_itab TO ' '. p_object_cnt. lt_stat_itab. 'Z_UILOG'. lv_dbcnt. lt_stat_itab.

* provide ADK with statistics data (before every COMMIT WORK!) CALL FUNCTION 'ARCHIVE_GIVE_STATISTICS' EXPORTING archive_handle = p_handle TABLES table = lt_stat_itab. COMMIT WORK. ENDFORM. " DELETE_FROM_TABLE

5. Now we need to go to the t-code SARA .

From here we can Read , Write and Delete the archiving object but we need to pass the archiving object name.

Das könnte Ihnen auch gefallen