Hammer Blog

The ABAP, CDS, and UI5 details you usually only learn from a coworker.

COMMIT WORK Is Not Just a Database Save

COMMIT WORK Is Not Just a Database Save infographic

What COMMIT WORK actually does, why it is not a database save, and why hidden commits inside frameworks and BAdIs break transaction control.

Bindable SAPUI5 Filters Are Finally Here!

Bindable SAPUI5 Filters Are Finally Here! infographic

SAPUI5 1.146 lets value1 and value2 of a Filter be data binding expressions. The aggregation re-evaluates automatically when the bound value changes.

CL_BALI_LOG: Application Logs Without the BAL Function Modules

CL_BALI_LOG: Application Logs Without the BAL Function Modules infographic

An object-oriented walkthrough of SAP's BALI application log API: building logs in memory, persisting them with CL_BALI_LOG_DB, and the rollback difference between SAVE_LOG and SAVE_LOG_2ND_DB_CONNECTION.

READ TABLE Finally Knows WHERE

READ TABLE Finally Knows WHERE infographic

ABAP Release 8.16 lets READ TABLE take a WHERE condition, collapsing the old LOOP AT ... WHERE. EXIT. ENDLOOP. pattern into a single statement.

CDS Test Doubles in ABAP

CDS Test Doubles in ABAP infographic

Using CL_CDS_TEST_ENVIRONMENT to test logic inside CDS view entities (joins, CASE expressions, aggregations) without depending on real system data.

Open SQL Test Doubles in ABAP

Open SQL Test Doubles in ABAP infographic

How CL_OSQL_TEST_ENVIRONMENT lets ABAP Unit tests redirect Open SQL to controlled test data without wrapping every SELECT behind a data access object.

Booleans in ABAP: From 'X' and Space to xsdbool

Booleans in ABAP: From 'X' and Space to xsdbool infographic

ABAP has no native boolean type. Here is every workaround SAP introduced over the years, why boolc is broken, and what to use today.

RTTS: Reading and Building ABAP Types at Runtime

RTTS: Reading and Building ABAP Types at Runtime infographic

An overview of ABAP's Runtime Type Services, covering type inspection with RTTI, dynamic type creation with RTTC, and the class hierarchy behind both.

CL_ABAP_PARALLEL: Parallel Processing Without the aRFC Circus

CL_ABAP_PARALLEL: Parallel Processing Without the aRFC Circus infographic

CL_ABAP_PARALLEL replaces the aRFC pattern for parallel processing in ABAP, with a cleaner API and full ABAP Cloud support.

LOOP AT itab STEP: Skip Rows Without a Counter

LOOP AT itab STEP: Skip Rows Without a Counter infographic

ABAP 7.57 adds STEP to LOOP AT, letting you iterate every nth row or reverse a table without auxiliary variables.

RETURN With a Value: ABAP's Smallest Quality-of-Life Fix

RETURN With a Value: ABAP's Smallest Quality-of-Life Fix infographic

ABAP 7.58 finally lets you return a value directly from the RETURN statement. A tiny change that fixes a long-standing annoyance.

Debugger Scripting: Automating the ABAP Debugger

Debugger Scripting: Automating the ABAP Debugger infographic

The ABAP debugger has a scripting interface that lets you automate breakpoints, modify variables, and log values across iterations.

MERGE: ABAP Gets a New Keyword

MERGE: ABAP Gets a New Keyword infographic

ABAP CE 2602 introduces MERGE, a new top-level keyword that combines INSERT, UPDATE, and DELETE into a single statement.

Keyboard Shortcuts

Every keyboard shortcut in Hammer, from editor basics to sidebar navigation and code commenting.

Dirty Assign: The ABAP Trick SAP Doesn't Want You to Know

Dirty Assign: The ABAP Trick SAP Doesn't Want You to Know infographic

How ABAP developers use ASSIGN with dynamic program names to access SAP internal data, and why that trick has a shelf life.

Finding a Value Across Every Table in SAP

Using SE16S and SE16SL to search for a value across all tables in an SAP system.

Stop Nesting So Deep

Deeply nested code is hard to read, hard to test, and usually a sign that the method is doing too much.

Your SELECT Is Lying to You

Why an ABAP SELECT sometimes returns stale data and how to fix it with a buffer reset.