{"ref":"artifact:brandeis-consulting-abap-prc","page":"/artifacts/brandeis-consulting-abap-prc","json":"/artifacts/brandeis-consulting-abap-prc.json","generated":"2026-10-26","drafted_with_ai":true,"entity":{"id":"brandeis-consulting-abap-prc","name":"ABAP-PRC","artifact_type":"package","ecosystem":"abap","flavors":[{"key":"abap-cloud","source":{"url":"https://github.com/brandeis-consulting/abap-prc","title":"brandeis-consulting/abap-prc — README, Supported stacks","checked":"2026-10-05","quote":"The framework core is written in ABAP for Cloud Development and uses released APIs only."}},{"key":"standard-abap","source":{"url":"https://github.com/brandeis-consulting/abap-prc","title":"brandeis-consulting/abap-prc — README, Supported stacks","checked":"2026-10-05","quote":"The UI layer is not: the Fiori apps are deployed as BSP applications, which are classic ABAP objects. The repository therefore contains both language versions, split across packages."}}],"domain":"process-and-workflow","secondary_domains":["operations-and-runtime"],"origin_ring":"independent","description":{"one_line":"A framework for custom multi-step ABAP processes: a process class declares the states, and the framework runs each document through them and monitors the run.","short":"Framework for multi-step ABAP processes with monitoring","what_it_solves":"A custom ABAP process that walks a document through several steps answers the same questions every time: what happens when a BAPI fails in step 3 of 5, where `COMMIT WORK` goes, what to do about read caches and lock errors, and how to explain any of it to a business user days later. ABAP-PRC answers them once as a framework: a process class declares its states and transitions, one local class per transition carries the business logic, and the engine runs each processed object and each step as its own transactionally decoupled unit. Three Fiori apps show the run, every object's position in the state chain and every message in the step it came from, while the run is still going; a retry job re-runs the objects that failed on a lock or a race condition, and a resumed object continues on the failed step rather than from the start. The entry point into all of it is `zcl_prc_processing_api=>get_instance( )->create_processed_objects( )`, called from wherever the process is triggered — a RAP action, an event handler, an application job, a Web-API implementation. It stops at the framework: the business logic in each transition handler is the application's, the state chain is authored per process, and documentation of the individual interfaces is deferred until the API has settled.","when_not_to_use":"Only on SAP S/4HANA 2023 and 2025, on premise or private cloud: [SAP S/4HANA Cloud, Public Edition](external:sap-s4hana-cloud-public-edition) and the [SAP BTP ABAP environment](artifact:btp-abap-environment) are listed as coming soon, and a 2023 system has to leave out `ZABAP_PRC_EVENTS_SE_2025`, whose event-based side effects rely on APIs released with S/4HANA 2025. Not for a system that already carries a copy, because object names are global and two versions cannot live side by side, and not for a productive system by way of the `ZABAP_PRC_DEMO*` packages, which the README states are not intended for one and whose init classes delete and rebuild their own tables on every run. While the major version is 0 the public API is not stable: minor bumps carry breaking changes with no deprecation period, so productive use means pinning a tag and reading the CHANGELOG before every upgrade.","to_build_on_it":"Extending it inside a system is the shape the framework offers: a process class implementing `ZIF_PRC_PROCESS` declares the state constants, the transitions and the handler for each one, with one local class per transition inheriting from `ZCL_PRC_TRANSITION_HANDLR_BASE`, and a single-step process is explicitly allowed. Changing the framework itself means carrying a copy, since the maintainer states that external code contributions are not accepted and asks for bug reports, questions and ideas as GitHub issues instead; the MIT licence permits the fork. The API is to be frozen with version 1.0.0, and every breaking change until then is listed under a `Breaking changes` heading in the CHANGELOG with a migration note."},"links":{"repo":"https://github.com/brandeis-consulting/abap-prc","homepage":"https://www.brandeis.de/en/abap-processing-center/","changelog":"https://github.com/brandeis-consulting/abap-prc/blob/main/CHANGELOG.md","issues":"https://github.com/brandeis-consulting/abap-prc/issues"},"type_properties":{"distribution":{"value":["abapgit"],"sources":[{"url":"https://github.com/brandeis-consulting/abap-prc","title":"ABAP-PRC — README","checked":"2026-10-18","quote":"## 1.1 Install abapGit (standalone version)"}]}},"identity":{"author":"Brandeis Consulting","license":"MIT"},"source_available":true,"provides":[{"capability":"capability:async-processing","what_it_does":"Runs each processed object and each step as its own transactionally decoupled unit, with the caller choosing per call through `i_trigger_processing` whether the work happens synchronously, through the background processing framework or as an application job, and a retry job picks up the objects that failed on a lock or a race condition and resumes them on the step that failed.","sources":[{"url":"https://github.com/brandeis-consulting/abap-prc","title":"brandeis-consulting/abap-prc — README, Why","checked":"2026-10-05","quote":"Each business object and each step is processed independently and transactionally decoupled. Parallelisation and \"as much as possible\" semantics are built in."},{"url":"https://github.com/brandeis-consulting/abap-prc","title":"brandeis-consulting/abap-prc — README, Getting started","checked":"2026-10-05","quote":"Its `i_trigger_processing` parameter decides where the work happens — synchronously, via the background processing framework, or as an application job."},{"url":"https://github.com/brandeis-consulting/abap-prc","title":"brandeis-consulting/abap-prc — README, The two application jobs","checked":"2026-10-05","quote":"The retry job picks up objects that failed on locks or race conditions and runs them again — this is what makes the framework self-healing for transient errors."}]},{"capability":"capability:logging","what_it_does":"Keeps the framework's own record of what each step did: a transition collects its messages on the processed object it ran for, and the Fiori apps read that record while the run is still going — the Processed Object app object-first, the Processed Messages app message-first — with every error shown in the step it came from. The README states the problem it answers as explaining a failure to a business user days later from an application log.","sources":[{"url":"https://raw.githubusercontent.com/brandeis-consulting/abap-prc/main/README.md","title":"brandeis-consulting/abap-prc — README, the Monitor row","checked":"2026-10-05","quote":"Live progress while the run is still going. Every step of every document, with the error shown in its context. Notifications on failure."},{"url":"https://raw.githubusercontent.com/brandeis-consulting/abap-prc/main/README.md","title":"brandeis-consulting/abap-prc — README, Why","checked":"2026-10-05","quote":"Every project solves the same problems again: how to handle a BAPI that fails in step 3 of 5, how to deal with `COMMIT WORK`, read caches, lock errors, RAP save failures — and how to explain all of that to a business user, days later, from an application log."},{"url":"https://raw.githubusercontent.com/brandeis-consulting/abap-prc/main/README.md","title":"brandeis-consulting/abap-prc — README, the Fiori apps","checked":"2026-10-05","quote":"The Processed Messages app shows the same data message-first instead of object-first."}]},{"capability":"capability:error-handling","what_it_does":"Business errors do not travel as exceptions: a transition raises a message and collects it through `get_message_handler( )->add_message_from_sy( )`, and the framework decides from the collected messages whether the step failed. A failed object stops on that step and is resumed there rather than from the start.","sources":[{"url":"https://raw.githubusercontent.com/brandeis-consulting/abap-prc/main/README.md","title":"brandeis-consulting/abap-prc — README, business errors as messages","checked":"2026-10-05","quote":"Business errors are not exceptions here: you raise a message and collect it with `get_message_handler( )->add_message_from_sy( )`, and the framework decides from the collected messages whether the step failed."},{"url":"https://raw.githubusercontent.com/brandeis-consulting/abap-prc/main/README.md","title":"brandeis-consulting/abap-prc — README, restart","checked":"2026-10-05","quote":"Processing continues on the failed step — what already succeeded is not repeated."},{"url":"https://github.com/brandeis-consulting/abap-prc","title":"brandeis-consulting/abap-prc — repository description","checked":"2026-10-05","quote":"The ABAP Processing Center - Implement processes with Monitoring, Error Handling, Notifications and Restart Capabilities"}]},{"capability":"capability:notifications","what_it_does":"Ships an application job that mails about failed objects, taking the recipient from the processed object's own `MailAddress`, so a failure reaches a person without anyone opening the monitor.","sources":[{"url":"https://github.com/brandeis-consulting/abap-prc","title":"brandeis-consulting/abap-prc — README, The two application jobs","checked":"2026-10-05","quote":"The error mail job notifies about failures; the recipient is taken from the `MailAddress` of the processed object."},{"url":"https://github.com/brandeis-consulting/abap-prc","title":"brandeis-consulting/abap-prc — repository description","checked":"2026-10-05","quote":"The ABAP Processing Center - Implement processes with Monitoring, Error Handling, Notifications and Restart Capabilities"}]}],"maintainers":["actor:brandeis-consulting"],"history":[{"date":"2026-10-05","field":"entry","from":null,"to":"created","reason":"Entered by intake from the repository README, the repository description and the maintainer's landing page."}],"drafted_with_ai":true,"provenance":{"discovered_via":[{"source":"source:curator"}],"first_seen":"2026-10-05"},"contributors":["actor:marcelhermanns-create"],"requires":[{"ref":"artifact:abapgit-abapgit","for":"to pull the project's packages into the target ABAP system","requirement":"required","basis":"binding","role":"installation","sources":[{"url":"https://github.com/brandeis-consulting/abap-prc","title":"abap-prc README","checked":"2026-10-18","quote":"In abapGit: *New Online Repository*."}]},{"ref":"external:sap-s4hana","for":"the on-premise or private-cloud S/4HANA system the framework installs into","requirement":"required","basis":"binding","role":"platform","sources":[{"url":"https://github.com/brandeis-consulting/abap-prc","title":"abap-prc README","checked":"2026-10-18","quote":"| SAP S/4HANA 2023 (on premise / private cloud) | Supported | Without `ZABAP_PRC_EVENTS_SE_2025` |"}]}]},"effective_normative_relations":[],"readings":{"liveness":[{"label":"Maintenance","tier":"unknown","evidence":"no release data"},{"label":"Continuity","tier":"fair","evidence":"1 contributor, org-owned"},{"label":"Repository","tier":"good","evidence":"pushed 2026-10, not archived"}],"compatibility":[{"label":"Declared for","tier":"fair","evidence":"nothing declared"},{"label":"Survived majors","tier":"unknown","evidence":"not read on ABAP: its lines run side by side"},{"label":"Maintainer's CI","tier":"fair","evidence":"no CI configured"}],"practice":[{"label":"Tests","tier":"poor","evidence":"none found in the tree"},{"label":"Docs","tier":"good","evidence":"README 13 KB"},{"label":"Changelog","tier":"good","evidence":"CHANGELOG in the repo"}],"reach":[{"value":null,"unit":"installs/week"},{"value":26,"unit":"watching"}]},"signals":{"crawled_at":"2026-10-24","npm":"not published under this name","stars":26,"forks":3,"open_issues":2,"archived":false,"pushed_at":"2026-10-12","license_spdx":"MIT","org_owned":true,"default_branch":"main","created_at":"2026-09-20T12:03:59Z","tree_truncated":false,"test_files":0,"workflows":0,"other_ci":false,"readme_bytes":13334,"docs_files":0,"changelog":true,"license_file":true,"dts_files":0,"first_commit":"2026-09-20","last_commit":"2026-10-12","commits":22,"contributors":1,"readme_path":"README.md","readme_sha":"4a03e568a63e8d0f7221f932637c23e97e363702","open_prs":0,"repo_read":"2026-10-24"},"release_notes":{"license":"MIT","quotable":true,"source":{"kind":"repo","path":"CHANGELOG.md","ref":"main","url":"https://github.com/brandeis-consulting/abap-prc/blob/main/CHANGELOG.md"},"format":"keep-a-changelog","releases":[{"version":"0.1.0","date":"2026-09-20","date_source":"heading","heading":"[0.1.0] - 2026-09-20","url":"https://github.com/brandeis-consulting/abap-prc/blob/main/CHANGELOG.md#010---2026-09-20","sections":[{"kind":"feature","heading":"Added","items":4},{"kind":"other","heading":"Known limitations","items":2}],"hash":"52313acf6543c598"}],"crawled_at":"2026-10-25"},"edges":{"maintainers":[{"ref":"actor:brandeis-consulting","name":"Brandeis Consulting","json":"/actors/brandeis-consulting.json"}],"contributors":[{"ref":"actor:marcelhermanns-create","name":"marcelhermanns-create","json":"/actors/marcelhermanns-create.json"}],"explained_by":[{"ref":"content:devtoberfest-2026-errors-in-bapis-or-rap-bos","name":"S/4HANA Custom Development - What happens in case of errors in BAPIs or RAP BOs?","json":"/content/devtoberfest-2026-errors-in-bapis-or-rap-bos.json"}],"alternative_to_this":[],"needed_by":[],"available_via":[],"parts":[],"add_ons":[],"answered_through_parts":[]}}