Посмотрите внимательно на таблицу DBTABLOG
Ключ у нее такой
LOGDATE SYDATS DATS 8 0 ДАТА (8-значн.) для SYST
LOGTIME SYTIME TIMS 6 0 TIME-элемент данных для SYST
LOGID LOGID CHAR 18 0 Уникальный идентификатор записи в DBTABLOG
Индексы такие:
All Log Entries for a Table with Log Key
TABNAME Имя таблицы
LOGKEY Переменная ключевая часть таблицы
All log entries for a table
TABNAME Имя таблицы
Исходя из этого делайте наиболее оптимальный select в DBTABLOG исходя из условий Вашей задачи.
После чего преобразуете LOGDATA.
В интернете есть ряд примеров, например
https://archive.sap.com/discussions/thread/486920Из моих старых заметок вот что нашел, может даже это не я писал, не помню.
Соответственно ФМы типа DBLOG_READ_WITH_STATISTIC Вам не нужно использовать.
Code:
*&---------------------------------------------------------------------*
*& Form LOG_Z_TABLE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM log_z_table .
refresh: t_log01, t_obj01, p_my_dfies, gt_fixvalues, result[].
*{
*считаем лог
s_obj01-obj = 'ZMMZZZ'."<<<<<
INSERT s_obj01 INTO TABLE t_obj01.
***ключ для того чтобы отсеить логи
CONCATENATE sy-mandt zbanfn zbnfpo INTO key."<<<
CALL FUNCTION 'DBLOG_READ_WITH_STATISTIC'
EXPORTING
from_day = '20100201'
* FROM_TIME = '000000'
to_day = sy-datum
* TO_TIME = '235959'
* ACCESS_DATABASE = 'X'
* ACCESS_ARCHIVES = ' '
* AUTO_ARCH_SEL = ' '
* USER_LIST =
* LOG_KEYS =
* IMPORTING
* ARCH_INFO =
CHANGING
log_list = t_log01
obj_cnt_list = t_obj01
* EXCEPTIONS
* ARCHIVE_ACCESS_ERROR = 1
* NO_ARCHIVES_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.
DELETE t_log01 WHERE logkey+0(18) <> key. "<<<<<
*}
*((
*считаем поля таблицы
CALL FUNCTION 'GET_FIELDTAB'
EXPORTING
* LANGU = SY-LANGU
* ONLY = ' '
tabname = 'ZMM_ZAYA_BYU'
* WITHTEXT = 'X'
* IMPORTING
* HEADER =
* RC =
TABLES
fieldtab = p_my_dfies
* EXCEPTIONS
* INTERNAL_ERROR = 1
* NO_TEXTS_FOUND = 2
* TABLE_HAS_NO_FIELDS = 3
* TABLE_NOT_ACTIV = 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 'DDIF_FIELDINFO_GET'
EXPORTING
tabname = 'TLOG_TYPE'
* FIELDNAME = ' '
* LANGU = SY-LANGU
* LFIELDNAME = ' '
*
all_types = 'X'
* GROUP_NAMES = ' '
* UCLEN =
* IMPORTING
* X030L_WA =
* DDOBJTYPE =
* DFIES_WA =
* LINES_DESCR =
TABLES
* DFIES_TAB =
fixed_values = gt_fixvalues
EXCEPTIONS
not_found = 1
internal_error = 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.
*))
*расшифровка лога + сбор таблицы
ASSIGN tabdata_curr TO <table_struc>
CASTING TYPE (s_obj01-obj).
LOOP AT t_log01 INTO s_log01.
MOVE-CORRESPONDING s_log01 TO result.
LOOP AT p_my_dfies ASSIGNING <dfies>.
* convert endianess
ASSIGN: COMPONENT <dfies>-fieldname OF
STRUCTURE <table_struc> TO <curfld>,
<curfld> TO <curfld_x> CASTING.
ASSIGN s_log01-logdata+<dfies>-offset(<dfies>-intlen)
TO <oldfld_x> CASTING.
<curfld_x> = <oldfld_x>.
CONCATENATE 'RESULT-' <dfies>-fieldname INTO sss.
ASSIGN (sss) TO <fs>.
<fs> = <curfld>.
ENDLOOP.
READ TABLE gt_fixvalues INTO s_fix WITH KEY low = s_log01-optype.
result-act = s_fix-ddtext.
APPEND result.
CLEAR result.
ENDLOOP.
ENDFORM. " LOG_Z_TABLE