{"ref":"capability:change-tracking","page":"/capabilities/change-tracking","json":"/capabilities/change-tracking.json","generated":"2026-10-26","drafted_with_ai":true,"entity":{"id":"change-tracking","name":"Change tracking","domain":"security-and-compliance","ecosystems":["cap","abap"],"universal":true,"description":"Keeping a readable history of what changed on a record, who changed it and when — as business history rather than database journalling.","short":"Keeping a readable business history of changes to a record","core_coverage":{"state":"core-and-community","assessed_at":"2026-09-20","relationship":"unassessed","what_core_does":"SAP's packages record the changes to elements annotated with `@changelog` in `sap.changelog.Changes`. [@cap-js/change-tracking](artifact:cap-js-change-tracking) does it for [Node.js](external:nodejs) with database triggers on [SAP HANA Cloud](artifact:btp-hana-cloud), [SQLite](external:sqlite) and [PostgreSQL](external:postgresql) and adds a Change History facet to the Fiori object page; [com.sap.cds:cds-feature-change-tracking](artifact:cap-java-cds-feature-change-tracking) does it for Java on every modifying CQN statement.","where_it_stops":"It stops at personal data: both packages skip elements annotated with `@PersonalData`, which are subject to [audit logging](capability:audit-logging), and the Node.js README gives the reason, that a readable log would let users get around the audit log. On Java, changes made through native SQL, JDBC or a remote service are not tracked, and the retention of the log and the access rules on it are the application's to settle.","community_adds":"Independent CDS plugins that enable change tracking for OData services, such as [cdsmbt01](artifact:cdsmbt01), for projects that load a plugin of their own.","sources":[{"url":"https://cap.cloud.sap/docs/plugins/","title":"CAP Plugins & Enhancements","checked":"2026-09-20","quote":"The Change Tracking plugin provides out-of-the box support for automated capturing, storing, and viewing of the change records of modeled entities."},{"url":"https://github.com/cap-js/change-tracking","title":"cap-js/change-tracking — README","checked":"2026-09-20","quote":"Change tracking is implemented with Database triggers and supports HANA Cloud, SQLite and Postgres."},{"url":"https://github.com/cap-js/change-tracking","title":"cap-js/change-tracking — README","checked":"2026-09-20","quote":"(annotated with `@PersonalData`) is not change tracked, since viewing the log allows users to circumvent"},{"url":"https://cap.cloud.sap/docs/java/change-tracking","title":"Change Tracking","checked":"2026-09-20","quote":"Elements with personal data, that is, elements that are annotated with @PersonalData and hence subject to audit logging, are ignored by the change tracking."},{"url":"https://cap.cloud.sap/docs/java/change-tracking","title":"Change Tracking","checked":"2026-09-20","quote":"Changes made through the native SQL, JDBC, or other means that bypass the CAP Java runtime or that are forwarded to the remote services aren't tracked."},{"url":"https://cap.cloud.sap/docs/java/change-tracking","title":"Change Tracking","checked":"2026-09-20","quote":"If your entities have complex access rules, you need to consider how to extend these rules to the change log."}]},"history":[{"date":"2026-08-31","field":"core_coverage.state","from":"core","to":"core-only","reason":"States renamed to describe who is present rather than to interpret intent. left-open-on-purpose asserted a motive; core-and-community states a fact, with relationship carrying the intent separately."},{"date":"2026-09-14","field":"ecosystems","from":"cap","to":"cap, abap","reason":"abap-platform-reuse-services, a SAP-samples repository in this batch, records change documents on a RAP business object and displays them in a Fiori elements app, which is this concern on the ABAP door."},{"date":"2026-10-26","field":"core_coverage.state, core_coverage.relationship, core_coverage.community_adds","from":"core-only","to":"core-and-community, relationship unassessed, community_adds added","reason":"Reassessed against the graph (check:capabilities): cdsmbt01, an independent cds-plugin on the CAP door, provides this capability."},{"date":"2026-10-26","field":"core_coverage.what_core_does","from":"Two official packages record the changes...","to":"SAP's packages record the changes...","reason":"Reassessed against the graph (check:capabilities): removed a count of providers."},{"date":"2026-10-26","field":"coverage_by_ecosystem.abap.note","from":"The one member, [abap-platform-reuse-services](https://github.com/...), is an SAP-samples repository ...","to":"[abap-platform-reuse-services](artifact:sap-samples-abap-platform-reuse-services) is an SAP-samples repository ...","reason":"Reassessed against the graph (check:capabilities): removed a count, and linked the entry the graph holds instead of its repository."}],"coverage_by_ecosystem":{"abap":{"state":"core-only","assessed_at":"2026-09-14","what_core_does":"Change documents: a change document object covers the tables of a business object, fields are logged where their data element has change document logging switched on, and function modules such as CHANGEDOCUMENT_READ_HEADERS and CHANGEDOCUMENT_READ_POSITIONS read the history back with old and new values.","where_it_stops":"At changes: in the sample checked only changes are recorded and not initial values, so a record's history starts at its first edit. An OData V4 Fiori elements app does not use the reuse display library, and the sample reads the change documents through a custom entity instead.","note":"[abap-platform-reuse-services](artifact:sap-samples-abap-platform-reuse-services) is an SAP-samples repository that demonstrates change documents on a RAP business object; a sample is no presence, and core-only rests on SAP's documentation.","sources":[{"url":"https://github.com/SAP-samples/abap-platform-reuse-services","title":"SAP-samples/abap-platform-reuse-services — README","checked":"2026-09-14","quote":"Only changes are recorded, not the inital values."},{"url":"https://github.com/SAP-samples/abap-platform-reuse-services","title":"SAP-samples/abap-platform-reuse-services — README","checked":"2026-09-14","quote":"not the reuse-library, since the demo app is an OData V4 app"},{"url":"https://help.sap.com/doc/saphelp_aii710/7.1/en-US/2a/fa01dd493111d182b70000e829fbfe/content.htm","title":"SAP Library — Reading and Editing Change Documents","checked":"2026-09-14","quote":"This function module reads the change document items for a particular change document number belonging to a change document object"}]}},"framing_by_ecosystem":{"abap":{"description":"On ABAP a record's business history is the change document, recorded through a change document object; [abap-platform-reuse-services](https://github.com/SAP-samples/abap-platform-reuse-services) logs the total amount and overall status of a sales order on a RAP business object and shows the changes in a Fiori elements app."}},"drafted_with_ai":true},"sap_delivery":{"door":"cap","all":{"built_in":[],"documented_pattern":[],"announced":[],"packages":[{"ref":"artifact:cap-js-change-tracking","name":"@cap-js/change-tracking","json":"/artifacts/cap-js-change-tracking.json"},{"ref":"artifact:cap-java-cds-feature-change-tracking","name":"com.sap.cds:cds-feature-change-tracking","json":"/artifacts/cap-java-cds-feature-change-tracking.json"}]},"by_flavor":{"node":{"built_in":[],"documented_pattern":[],"announced":[],"packages":[{"ref":"artifact:cap-js-change-tracking","name":"@cap-js/change-tracking","json":"/artifacts/cap-js-change-tracking.json"}]},"java":{"built_in":[],"documented_pattern":[],"announced":[],"packages":[{"ref":"artifact:cap-java-cds-feature-change-tracking","name":"com.sap.cds:cds-feature-change-tracking","json":"/artifacts/cap-java-cds-feature-change-tracking.json"}]}}},"edges":{"use_cases":[],"shared_tasks":[],"related_tasks":[],"options":[{"ref":"artifact:cap-js-change-tracking","name":"@cap-js/change-tracking","json":"/artifacts/cap-js-change-tracking.json","ecosystem":"cap","origin_ring":"sap-official"},{"ref":"artifact:cdsmbt01","name":"cdsmbt01","json":"/artifacts/cdsmbt01.json","ecosystem":"cap","origin_ring":"independent"},{"ref":"artifact:cap-java-cds-feature-change-tracking","name":"com.sap.cds:cds-feature-change-tracking","json":"/artifacts/cap-java-cds-feature-change-tracking.json","ecosystem":"cap","origin_ring":"sap-official"}],"samples":[{"ref":"artifact:sap-samples-abap-platform-reuse-services","name":"abap-platform-reuse-services","json":"/artifacts/sap-samples-abap-platform-reuse-services.json"}],"explained_by":[{"ref":"content:devtoberfest-2026-cap-the-road-ahead","name":"CAP: The Road Ahead - Simplicity in an AI Era","json":"/content/devtoberfest-2026-cap-the-road-ahead.json"},{"ref":"content:how-to-implement-sap-change-document","name":"How to Implement SAP Change Document","json":"/content/how-to-implement-sap-change-document.json"},{"ref":"content:new-and-improved-change-tracking-plugin","name":"New and improved: Change Tracking plugin","json":"/content/new-and-improved-change-tracking-plugin.json"},{"ref":"content:open-sourcing-cap-how-to-learn-more-or-get-involved","name":"Open Sourcing CAP – how to learn more or get involved","json":"/content/open-sourcing-cap-how-to-learn-more-or-get-involved.json"},{"ref":"content:btp-cap-custom-plugin-to-separate-generic-change-log-capture-logic","name":"BTP CAP : Custom plugin to separate generic change log capture logic","json":"/content/btp-cap-custom-plugin-to-separate-generic-change-log-capture-logic.json"}],"normative_context":[]}}