{"ref":"capability:job-scheduling","page":"/capabilities/job-scheduling","json":"/capabilities/job-scheduling.json","generated":"2026-10-26","drafted_with_ai":true,"entity":{"id":"job-scheduling","name":"Job scheduling","domain":"operations-and-runtime","ecosystems":["btp","cap","abap"],"universal":true,"description":"Running something later, or on a cadence, without keeping a process alive to do it — a nightly job, a retry in an hour, a report on the first of the month — and knowing afterwards whether it ran.","short":"Running something later or on a cadence, and knowing it ran","core_coverage":{"state":"core-only","assessed_at":"2026-09-09","what_core_does":"The Job Scheduling service calls an application's endpoint on a schedule or once at a time, keeps a log of every run, and offers a free and a standard plan. The application supplies the endpoint and nothing else.","sources":[{"url":"https://github.com/SAP-samples/btp-service-metadata/blob/main/v1/developer/jobscheduler.json","title":"SAP Job Scheduling service — SAP btp-service-metadata v1","checked":"2026-09-09"}]},"coverage_by_ecosystem":{"cap":{"state":"core-and-community","what_core_does":"[@sap/cds](artifact:sap-cds) and CAP Java schedule a service's own events as tasks on the event queue: once, after a delay with `.after()`, or repeatedly with `.every()`, which takes a time string or a cron expression. A task is named, stored with the business data in `cds.outbox.Messages`, retried through the queue's dead letter queue, and cancelled with `unschedule()`.","where_it_stops":"Tasks run in the application's own processes from its own database, so a stopped application runs none; the [SAP Job Scheduling service](artifact:btp-job-scheduling) is the one that calls in from outside. `.every()` counts from the end of the last successful run, not from a fixed clock.","sources":[{"url":"https://cap.cloud.sap/docs/guides/events/event-queues#scheduled-tasks","title":"Transactional Event Queues — Scheduled Tasks","checked":"2026-09-11","quote":"The interval defined by .every() is applied after a successful execution completes—it is not a fixed-rate interval."},{"url":"https://cap.cloud.sap/docs/releases/2026/jun26","title":"CAP release notes, June 2026 — Scheduling API","checked":"2026-09-11","quote":"Named tasks are guaranteed to run only once even when the application is scaled horizontally"}],"assessed_at":"2026-09-11","relationship":"unassessed","community_adds":"[@cap-js-community/event-queue](artifact:cap-js-community-event-queue) declares periodic events in its own YAML configuration and spreads them across application instances over [Redis](external:redis)."},"abap":{"state":"core-only","assessed_at":"2026-09-14","what_core_does":"Application Jobs: an ABAP report or class registered as a job catalog entry gets a selection screen, a job template refers to the entry, and the job runs in the background from the Application Jobs app or from code through the released API `CL_APJ_RT_API`.","where_it_stops":"A RAP business object can call the scheduling API only in the additional save phase, so the job name and count are not known during the interaction phase. Code running as an application job cannot be stepped through in the debugger; SAP's sample runs the same class interactively for that.","sources":[{"url":"https://help.sap.com/doc/saphelp_nw75/7.5.5/en-US/a6/e8f3a47889425da74cb718a4bbdeb4/content.htm","title":"SAP Help — Defining Job Catalog Entries in ABAP","checked":"2026-09-14","quote":"A job catalog entry defines the selection screen that is presented to a user."},{"url":"https://github.com/SAP-samples/abap-platform-application-jobs","title":"SAP-samples/abap-platform-application-jobs — README","checked":"2026-09-14","quote":"So far it is only possible to call the job scheduling API"}],"note":"The one repository here is an SAP sample. It demonstrates the framework and does not count as a provider, so core-only reads what the ABAP platform ships."}},"changed_in":[{"version":"@sap/cds 9.9.0","date":"2026-04-23","what_changed":"Before this, the Node.js scheduling API that arrived as alpha in the May 2025 release offered `.after()` and `.every()` with a delay or an interval. 9.9.0 added cron expressions to `.every()`, and `srv.schedule.task()` and `srv.unschedule.task()` to create and remove singleton tasks.","invalidates":"Advice that CAP's own scheduling takes intervals only, and that a cron cadence needs a plugin or an external scheduler.","applies_to":{"ecosystems":["cap"],"flavors":["node"]},"source":{"url":"https://cap.cloud.sap/docs/releases/2026/changelog","title":"CAP changelog 2026 — April 2026, cds@9.9.0","checked":"2026-09-11","quote":"Support for cron expressions as argument for `.every()`"}},{"version":"CAP Java 5.0.0","date":"2026-06-25","what_changed":"CAP Java gained the scheduling API in the June 2026 release, which also brought @sap/cds 10: `Schedule.create()` with `.after()`, `.every()` and `.cron()`, and named tasks that can be cancelled. In both runtimes a named task runs once when the application is scaled horizontally.","invalidates":"Advice that CAP Java has no scheduling of its own.","applies_to":{"ecosystems":["cap"],"flavors":["java"]},"source":{"url":"https://cap.cloud.sap/docs/releases/2026/jun26","title":"CAP release notes, June 2026 — Scheduling API","checked":"2026-09-11","quote":"Named tasks are guaranteed to run only once even when the application is scaled horizontally"}}],"history":[{"date":"2026-09-11","field":"coverage_by_ecosystem.cap.state","from":"community-only","to":"core-and-community","reason":"The core schedules tasks on its event queues: alpha in Node.js from the May 2025 release, cron and singleton tasks in @sap/cds 9.9.0, and CAP Java in 5.0.0. The 2026-09-09 assessment missed it."},{"date":"2026-09-14","field":"ecosystems","from":"btp, cap","to":"btp, cap, abap","reason":"SAP-samples/abap-platform-application-jobs schedules a class as an application job from an action on a RAP business object and shows the job's status and log in the app. It answers the concern on the ABAP door."}],"framing_by_ecosystem":{"abap":{"description":"On the ABAP door the system schedules the job itself: [abap-platform-application-jobs](https://github.com/SAP-samples/abap-platform-application-jobs) starts one from a RAP action and shows its status and application log in a Fiori elements app."}},"drafted_with_ai":true},"sap_delivery":{"door":"btp","all":{"built_in":[],"documented_pattern":[],"announced":[],"packages":[{"ref":"artifact:btp-job-scheduling","name":"SAP Job Scheduling service","json":"/artifacts/btp-job-scheduling.json"}]},"by_flavor":{}},"edges":{"use_cases":[],"shared_tasks":[],"related_tasks":[],"options":[{"ref":"artifact:cap-js-community-event-queue","name":"@cap-js-community/event-queue","json":"/artifacts/cap-js-community-event-queue.json","ecosystem":"cap","origin_ring":"community-org"},{"ref":"artifact:sap-cds","name":"@sap/cds","json":"/artifacts/sap-cds.json","ecosystem":"cap","origin_ring":"sap-official"},{"ref":"artifact:btp-job-scheduling","name":"SAP Job Scheduling service","json":"/artifacts/btp-job-scheduling.json","ecosystem":"btp","origin_ring":"sap-official"}],"samples":[{"ref":"artifact:sap-samples-abap-platform-application-jobs","name":"SAP-samples/abap-platform-application-jobs","json":"/artifacts/sap-samples-abap-platform-application-jobs.json"}],"explained_by":[{"ref":"content:scheduling-a-background-job-for-the-bdc-session-method-using-rsbdcsub","name":"Scheduling a Background Job for the BDC Session Method Using RSBDCSUB","json":"/content/scheduling-a-background-job-for-the-bdc-session-method-using-rsbdcsub.json"},{"ref":"content:automate-recurring-data-updates-in-sap-hana-cloud","name":"Automate Recurring Data Updates in SAP HANA Cloud","json":"/content/automate-recurring-data-updates-in-sap-hana-cloud.json"},{"ref":"content:how-to-create-an-application-job-apj-in-sap-s-4hana-abap-with-single-values-sele","name":"How to Create an Application Job (APJ) in SAP S/4HANA ABAP — With Single Values & Select Options","json":"/content/how-to-create-an-application-job-apj-in-sap-s-4hana-abap-with-single-values-sele.json"},{"ref":"content:sap-job-scheduling-service-generate-your-own-client-library-from-openapi-spec","name":"SAP Job Scheduling Service: 🔧 Generate Your Own Client Library from OpenAPI Spec","json":"/content/sap-job-scheduling-service-generate-your-own-client-library-from-openapi-spec.json"},{"ref":"content:sap-job-scheduling-service-set-job-run-status-with-the-rest-api-and-node-js","name":"SAP Job Scheduling Service: Set Job Run Status with the REST API and Node.js","json":"/content/sap-job-scheduling-service-set-job-run-status-with-the-rest-api-and-node-js.json"},{"ref":"content:sap-s-4hana-cloud-scheduling-background-jobs-using-application-job-templates","name":"SAP S/4HANA Cloud: Scheduling Background Jobs Using Application Job Templates","json":"/content/sap-s-4hana-cloud-scheduling-background-jobs-using-application-job-templates.json"},{"ref":"content:sap-btp-cloud-foundry-job-scheduling-for-cap-based-project","name":"SAP BTP Cloud foundry Job Scheduling for CAP based project","json":"/content/sap-btp-cloud-foundry-job-scheduling-for-cap-based-project.json"}],"normative_context":[]}}