Список таблиц, которые оставляют следы в таблицах CDHDR и CDPOS
Я хочу зафиксировать изменения для всех возможных таблиц SAP.
Я понял что CDHDR
а также CDPOS
таблицы фиксируют документы изменений, но не ясно, для каких таблиц это делается.
У меня есть несколько вопросов, чтобы задать:
- Получить список всех таблиц, для которых
CDHDR
а такжеCDPOS
таблицы захвата изменений документов. - Как
CDPOS
Таблица содержит только измененное поле, и мне нужно сопоставить его с первичным ключом таблицы. Как я могу сопоставить измененную запись с первичным ключом таблицы?
2 ответа
Чтобы чисто ответить на ваш вопрос, я, безусловно, могу сказать вам, чтобы посмотреть в Т-код SCDO
чтобы понять, что вам нужно, но я бы предпочел оспорить ваш подход. Итак, у вас есть требование фиксировать изменения для всех возможных таблиц SAP. Для чего? Тысячи таблиц SAP отслеживаются CDHDR
а также CDPOS
и большинство таблиц не приносят вам немедленных деловых выгод. Всякий раз, когда столбец таблицы имеет элемент данных, такой как BELNR_D
а также GJAHR
может появиться в CDHDR
потому что такой элемент помечен как флаг "Изменить документ" (т-код SE11
):
И SAP объясняет флагу:
Флаг для документов изменений указывает, регистрируются ли изменения полей в таблицах базы данных, определенных со ссылкой на этот элемент данных, когда задействованы объекты документа изменений.
Поэтому, когда отслеживаются тысячи таблиц, было бы неплохо решить проблему исключительно с технической точки зрения, и мы даже не начали изучать проблему производительности с CDHDR
а также CDPOS
все же.
Если ваше требование является частью проекта хранилища данных, то вам не придется иметь дело с CDPOS
а также CDHDR
Вы можете анализировать добавочную вставку, удаление и обновление через прозрачные таблицы или стандартные экстракторы. Если вы можете использовать триггер БД, то SLT также может быть возможностью получать измененные записи в интересующих вас таблицах практически в режиме реального времени (5-секундная задержка по умолчанию).
Подводя итог, вы можете перейти к меню SAP - Инструменты - ABAP Workbench - Другие инструменты - Изменить документ или просто к т-коду. SCDO
, Тем не менее, мой комментарий выше к бизнес-требованиям - это то, что я действительно намерен выразить.
Почему не работает SELECT DISTINCT tabname FROM cdpos
получить актуальный список всех таблиц? Я думаю, этого должно быть достаточно, потому что ваша система SAP уже некоторое время работает. Если вы не можете сделать это сами, спросите кого-то, раз и навсегда.
В таблице CDPOS
, вы получаете идентификатор объекта, измененного из столбца TABKEY
, Если первичный ключ состоит из нескольких столбцов, TABKEY
является объединением значений символов с выравниванием на основе размера каждого столбца. Я не уверен, но я предполагаю, что столбцы первичного ключа (таблиц, на которые ссылается TABNAME CDPOS) всегда имеют символьные типы.
Столбцы первичного ключа одной таблицы можно извлечь из словаря ABAP с помощью этого запроса SQL: SELECT fieldname, leng FROM dd03l WHERE tabname = 'one_table' AND fieldname LIKE '.%' AND keyflag = 'X' ORDER BY position
(имена столбцов, начинающиеся с точки, предназначены для внутреннего содержимого).