PackagePackagetypeA library you install and call yourself.See every one →What this type is →independently maintainedindependently maintainedoriginPublished by one person or a small company outside SAP. Says nothing about quality; the readings say that.See every one →

ABAP-PRC

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.

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.

Facts

Last pushLicenceMIT

Where it sits

Lives in
Provides
Async processingABAPAsync processingcapabilityDoing work outside the request that triggered it, with a guarantee that it eventually happens — deferred jobs, retries, and periodic work. Distinct from messaging, which is about telling other systems.LoggingABAPLoggingcapabilitySeeing what a running service did, in a form something can read afterwards — levels, a formatter that suits a laptop and one that suits a log service.Error handlingABAPError handlingcapabilityTurning a failure into a response a client can act on — protocol-correct error payloads, correlation, and a boundary between internal detail and what a caller sees.NotificationsABAPNotificationscapabilityTelling a person something happened when they are not looking at the screen — a notification in the launchpad, an email, a message somewhere they already are.
Requires
abapGitabapGitartifactto pull the project's packages into the target ABAP systemSAP S/4HANASAP S/4HANAoutside the atlasthe on-premise or private-cloud S/4HANA system the framework installs into

Who is behind it

Brandeis ConsultingBrandeis ConsultingOrganisationMaintains this
In the atlas: maintains 1
@brandeis-consulting
maintainermarcelhermanns-createPersonContributes to this
In the atlas: contributes to 1
@marcelhermanns-create
1 contributor

Before choosing this

Conditions

PracticalFunctional boundary

Only on SAP S/4HANA 2023 and 2025, on premise or private cloud: SAP S/4HANA Cloud, Public Edition and the SAP 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.

What it declares

Every artifact

Type
Package
Origin
Independently maintained

As a package

Where it runs
does not say
Distributed through
abapGit

Connections6

ABAP-PRC connectionsABAP-PRCPROVIDES→ provides4provides stated 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. brandeis-consulting/abap-prc — README, Why: https://github.com/brandeis-consulting/abap-prc brandeis-consulting/abap-prc — README, Getting started: https://github.com/brandeis-consulting/abap-prc brandeis-consulting/abap-prc — README, The two application jobs: https://github.com/brandeis-consulting/abap-prcAsync processingprovides stated 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. brandeis-consulting/abap-prc — README, business errors as messages: https://raw.githubusercontent.com/brandeis-consulting/abap-prc/main/README.md brandeis-consulting/abap-prc — README, restart: https://raw.githubusercontent.com/brandeis-consulting/abap-prc/main/README.md brandeis-consulting/abap-prc — repository description: https://github.com/brandeis-consulting/abap-prcError handlingprovides stated 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. brandeis-consulting/abap-prc — README, the Monitor row: https://raw.githubusercontent.com/brandeis-consulting/abap-prc/main/README.md brandeis-consulting/abap-prc — README, Why: https://raw.githubusercontent.com/brandeis-consulting/abap-prc/main/README.md brandeis-consulting/abap-prc — README, the Fiori apps: https://raw.githubusercontent.com/brandeis-consulting/abap-prc/main/README.mdLoggingprovides stated 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. brandeis-consulting/abap-prc — README, The two application jobs: https://github.com/brandeis-consulting/abap-prc brandeis-consulting/abap-prc — repository description: https://github.com/brandeis-consulting/abap-prcNotificationsNEEDS→ needs2needs stated to pull the project's packages into the target ABAP system abap-prc README: https://github.com/brandeis-consulting/abap-prcabapGitneeds stated the on-premise or private-cloud S/4HANA system the framework installs into abap-prc README: https://github.com/brandeis-consulting/abap-prcSAP S/4HANA

Learn more1

Readings
  1. S/4HANA Custom Development - What happens in case of errors in BAPIs or RAP BOs?SAP Developers, YouTube — SAP Developers playlists

README

quoted from brandeis-consulting/abap-prc under MIT, read
brandeis-consulting/abap-prc/README.mdOn GitHub

ABAP-PRC — ABAP Processing Center

Build. Execute. Monitor. Retry.

A standardised ABAP framework for custom business processes: one way to build them, a runtime that executes each business object and each step independently, a live view of what is happening, and a precise way back after a failure — without missing or duplicate records.


⚠️ Status: Beta (0.x)

ABAP-PRC is under active development and the public API is not stable yet. Minor version bumps (0.1 → 0.2) will contain breaking changes without a deprecation period. Object names, interfaces, method signatures and database structures may change.

  • Use it for evaluation, prototypes and internal pilots.
  • If you use it productively, pin a specific tag and read the CHANGELOG before every upgrade.
  • There is no migration tooling and no support commitment. Use at your own risk.

The API will be frozen with version 1.0.0.


Why

Custom ABAP processes run horizontally across existing SAP building blocks. 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.

ABAP-PRC answers those questions once, in a reusable way.

PhaseWhat it does
BuildA clear application pattern for implementing custom processes. Focus on the business logic instead of the technical plumbing.
ExecuteEach business object and each step is processed independently and transactionally decoupled. Parallelisation and "as much as possible" semantics are built in.
MonitorLive progress while the run is still going. Every step of every document, with the error shown in its context. Notifications on failure.
RetrySelf-healing for lock and race-condition errors via the built-in retry job. Resume on the failed step after the root cause is fixed. No duplicates, no gaps.

Entry points: mass processing, selection from a Fiori app, business event handlers, Web-API backends, user exits, Excel upload, application jobs. Different triggers — the same processing center.


Supported stacks

StackStatusNotes
SAP S/4HANA 2023 (on premise / private cloud)SupportedWithout ZABAP_PRC_EVENTS_SE_2025
SAP S/4HANA 2025 (on premise / private cloud)SupportedFull scope
SAP S/4HANA Cloud, Public EditionComing soon
SAP BTP, ABAP EnvironmentComing soon

The framework core is written in ABAP for Cloud Development and uses released APIs only. 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.

ZABAP_PRC_EVENTS_SE_2025 holds event-based side effects that rely on APIs released with S/4HANA 2025. It is called dynamically and is optional — on a 2023 system you exclude it from the pull and the core runs without it.


1. Install

1.1 Install abapGit (standalone version)

Skip this if abapGit is already installed.

  1. Download the latest build of the standalone report: zabapgit_standalone.prog.abap from the abapGit build repository.
  2. Create a report ZABAPGIT_STANDALONE in a local package ($ABAPGIT or similar), paste the source and activate it.
  3. Set up the SSL certificates in STRUST so that abapGit can reach github.com.

The full instructions are in the abapGit installation guide. Use a current build — older versions do not know all object types used here.

1.2 Create the target package

Create the package ZABAP_PROCESSING_CENTER in ADT as a development package with the ABAP language version ABAP for Cloud Development. The subpackages come with the pull and carry their own language version where they differ.

1.3 Clone the repository

In abapGit: New Online Repository.

SettingValue
URLhttps://github.com/brandeis-consulting/abap-prc
PackageZABAP_PROCESSING_CENTER
Branch / Tagmain
Folder logicFULL

Pull all packages. On S/4HANA 2023 the developer excludes ZABAP_PRC_EVENTS_SE_2025 during installation — it builds on APIs released with S/4HANA 2025.

The demo packages (ZABAP_PRC_DEMO*) are optional — see Demo.

Two versions of ABAP-PRC cannot live side by side in one system — object names are global. Install into one package only.

Pull, then activate.

1.4 Activate the services

All services are OData V4.

  1. Activate the ICF nodes of the BSP applications (SICF, below /sap/bc/ui5_ui5/sap/).
  2. Publish the service groups in /IWFND/V4_ADMIN (Publish Service Groups). This is not transported and has to be repeated in every system.

1.5 The three apps

Delivered with the repository: the technical catalog ZABAP_PROCESSING_CENTER (UIAC), the app descriptors with their target mappings and default tiles (UIAD), and the authorisation defaults (SUSH).

TileApp IDBSP applicationService groupSemantic objectAction
Runabap.processing_center.runZUIPRCRUNZUI_PRC_RUN_O4ABAP_PRC_Runshow
Processed Objectabap.processing_center.processed_objectZUIPRCPROCOBJZUI_PRC_PROCESSED_OBJECT_O4ABAP_PRC_ProcessedObjectshow
Processed Messagesabap.processing_center.processed_messageZUIPRCPROCMSGZUI_PRC_PROCESSED_MESSAGES_O4ABAP_PRC_ProcessedMessageshow

The service group carries the name of the service binding; the number in brackets is the service version.

Authorisation object

Beyond the standard Fiori authorisations the business role needs ZPRC_PROC:

FieldMeaning
ZPRCNAMEProcess name — the co_process_name of the process implementation class
ACTVT03 grants display of runs, processed objects and messages

1.6 The two application jobs

Catalog entries and templates come with the repository. Neither job takes parameters.

JobJob catalog entryJob templateClass
Retry jobZAJC_PRC_RETRY_JOBZAJT_PRC_RETRY_JOBZCL_PRC_RETRY_JOB
Error mail jobZAJC_PRC_ERROR_MAILZAJT_PRC_ERROR_MAILZCL_PRC_ERROR_MAIL_JOB

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. The error mail job notifies about failures; the recipient is taken from the MailAddress of the processed object.


2. Demo (for developers)

The demo packages are not intended for productive systems. They create their own tables, apps and test data, and the init classes delete and rebuild that data on every run. Install them in a development system if you want to see the framework work before you build anything with it.

2.1 Demo content

TileApp IDBSP applicationService groupSemantic objectAction
Demo: Equipmentabap.demo.processingcenter.demoequiZPRCDEMOEQUIZUI_PRC_DEMO_EQUIPMENT_O4ABAP_PRC_Demo_Equipmentshow
Demo: Service Contractsabap.demo.processingcenter.demosrvctrZPRCDEMOSRVCTRZUI_PRC_DEMO_SRVCTR_O4ABAP_PRC_Demo_ServiceContractshow

Plus one application job: ZAJC_PRC_DEMO_ADJUST_RUN / ZAJT_PRC_DEMO_ADJUST_RUN (ZCL_PRC_DEMO_ADJUST_RUN_JOB).

2.2 Run the demo

Both init classes implement if_oo_adt_classrun: open them in ADT and press F9.

Step 1 — initialise the test data

Run ZCL_PRC_DEMO_ADJ_RUN_INIT (F9). It rebuilds the demo tables: business partners, equipment categories, materials, equipments, and service contracts with items. Some contracts carry an error status from the start, so a later run has something to fail on.

This deletes every row in the ZPRC_DEMO_* tables.

Step 2 — watch a process run

Run ZCL_PRC_DEMO_CREATE_EQUI_INIT (F9). It creates 20 processed objects for the process DEMO_EQUI_TRANSITION and hands them straight to the engine.

Open the Processed Object app and filter on the process name. Each step waits a second on purpose, so you can watch the objects move through the state chain while the run is still going:

START → CREATE_EQUI → LINK_SERIAL → CHECK_INSTALL → INSTALL_EQUI → FINISHED
                                          └──────────────────────→ FINISHED

What to look for:

  • Not every object takes the same path. CHECK_INSTALL decides per object whether the installation step is needed. A state can have more than one outgoing transition.
  • Some objects fail on purpose. The message hangs on the step where it happened, not on the run as a whole, and the object stays on that step.
  • Failed objects come back. The retry job picks them up, or you resume them from the app. Processing continues on the failed step — what already succeeded is not repeated.

The Processed Messages app shows the same data message-first instead of object-first.

The other two demos
  • Demo: Service Contracts — the run pattern: selection criteria, progress and result across many objects. Started from the app or via the job template ZAJT_PRC_DEMO_ADJUST_RUN, and monitored in the Run app.
  • Equipment assignment (ZCL_PRC_DEMO_EQUI_ASSIGN_PROC) — the event-driven entry point. The handler ZCL_PRC_DEMO_EQUI_EVT_HDL reacts to the equipmentCreated event of the Equipment BO. This is the scenario where an object typically fails on a lock and is then healed by the retry job.

3. Getting started

To build your own process, copy the equipment demo and strip it down:

CopyRole
ZCL_PRC_DEMO_CREATE_EQUI_PROCThe process: states, transitions, step implementations
ZCL_PRC_DEMO_CREATE_EQUI_INITCreates processed objects and hands them to the engine

In the process class (implements ZIF_PRC_PROCESS), adjust:

  • co_class_name — must match the class's own name; the engine instantiates through it.
  • co_process_name — the key under which runs, processed objects and messages are stored, and the value checked against ZPRC_PROC-ZPRCNAME. Pick it deliberately; changing it later orphans everything already processed.
  • The state constants, get_transitions (the state chain) and get_transition_handler.
  • get_url_for_processed_object — the intent the monitor links to, so a user can jump from a processed object to the business document behind it.

A single-step process is legitimate — not every process needs a chain.

In the local classes (CCIMP): one class per transition, inheriting from ZCL_PRC_TRANSITION_HANDLR_BASE. Put your business logic in perform_transition and the log texts in get_success_message / get_failure_message. 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.

In the init class: zcl_prc_processing_api=>get_instance( )->create_processed_objects( ) is the entry point. Its i_trigger_processing parameter decides where the work happens — synchronously, via the background processing framework, or as an application job. In your own scenario this call moves out of the init class into wherever the process is triggered: a RAP action, an event handler, an application job, a Web-API implementation.

Documentation of the individual interfaces will follow once the API has settled.


Versioning and compatibility

This project follows Semantic Versioning.

While the major version is 0:

  • Minor releases (0.1.0 → 0.2.0) may contain breaking changes.
  • Patch releases (0.1.0 → 0.1.1) contain fixes only and stay compatible.

Every breaking change is listed under a Breaking changes heading in the CHANGELOG, with a short migration note. Read the entries for every version between your current one and the target before upgrading.

Contributing

ABAP-PRC is currently developed by a single maintainer and does not accept external code contributions. Bug reports, questions and ideas as GitHub issues are very welcome. See CONTRIBUTING.md for details.

Licence

MIT — free to use, also commercially. No warranty of any kind.

ABAP-PRC is free and you can use it entirely without us.

MIT, read

History

Latest

v0.1.0

Features 4, Other 2

Notes

First public beta release.

Added
  • Process definition and execution runtime
  • Monitoring of running and completed processes, down to step and message level per object.
  • Retry: automatic retry job for lock and race-condition errors, manual resume on the failed step after the root cause has been fixed.
  • Installation via abapGit.
Known limitations
  • The public API is not stable. Expect breaking changes in 0.2.0.
  • No migration path between 0.x versions.

Others providing18

Logging
  1. ABAP-LoggerLogging library for ABAP over the Application Log
  2. abap-log-exporterExports Business Application Log entries to Graylog or Loki
  3. abap-logABAP logging library with one interface across output targets
  4. ABAP_LOGGINGObject-oriented wrapper around the Business Application Log
  5. abap-cloud-loggerChainable logger for ABAP Cloud around CL_BALI_LOG
  6. abap-fm-loggerLogger storing RFC function module call parameters as JSON
  7. open-abap-balApplication logging for ABAP transpiled to JavaScript on Node.js
  8. abap-fluentdFluentd client in ABAP for sending log lines to a collector
  9. sap-usi-logging-apiObject-oriented wrapper around SAP's Application Log (SLG1)
  10. abap-message-loggerMessage logger for ABAP Cloud that saves to the Application Log
Error handling
  1. throwRaises an ABAP exception from a text or the last system message
  2. RESULT-for-ABAPResult pattern for ABAP instead of exceptions for expected failures
  3. EITHER-FOR-ABAPABAP class implementing the Either pattern
  4. sap-usi-exceptionShared root exception class and text getter for USI developments
Notifications
  1. aditheos/ApplicationLogsNotificationToFioriFiori launchpad notification for application log errors
  2. agiguere/SCPmsPushNotificationREST_APIABAP classes sending push notifications to Mobile Services
  3. DryDumbHead/easyHtmlEmailABAP helper class building HTML emails from templates
  4. peterlangner/zrssRSS feed publisher for content from an SAP NetWeaver ABAP system

Details

Sources3
Added by handdiscovered herechecked
github.com/brandeis-consulting/abap-prctree, pushes, contributors, CIchecked
README.mdquoted, and what the entry declareschecked

Sources are graph entities: the same page may back several entries, and an unreachable source flags every row that rests on it.

Compatibility and provenance
discovered viaAdded by hand
first seen in the atlas
ecosystem and domainabap, process-and-workflow
Flavors2
ABAP Cloud
“The framework core is written in ABAP for Cloud Development and uses released APIs only.” — brandeis-consulting/abap-prc — README, Supported stackschecked
Standard ABAP
“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.” — brandeis-consulting/abap-prc — README, Supported stackschecked
Contributors1

From the repository’s contributor list, .

History in the atlas2
  1. Entered by intake from the repository README, the repository description and the maintainer's landing page.
  2. First seen.
For your agent
Ref
artifact:brandeis-consulting-abap-prc
JSON
/artifacts/brandeis-consulting-abap-prc.json
MCP
Connecting an agent