Technical notes, no marketing
ABAP Cloud, S/4HANA and the modern SAP ecosystem, told from the trenches.
Most read
SAP Build Work Zone advanced: configuring CIS and IPS on BTP
How to enable SAP Build Work Zone, advanced edition on SAP BTP with SAML 2.0 authentication and automatic user and group provisioning with Identity Provisioning.
Oct 23, 2026
SAP CAP and MCP: authentication and roles with @requires and @restrict
How to restrict by role what an AI agent queries and writes in an SAP CAP service exposed through MCP, and the three gaps that appeared when testing it.
Oct 23, 2026
SAP Integration Suite: enabling the API Management runtime
API Management activated in SAP Integration Suite, but no Configure > APIs. Why the runtime is missing and how to enable it in a trial and in a productive tenant.
Oct 23, 2026
The one SAP Mobile Services setting you cannot change later
When you create an app in SAP Mobile Services you choose XSUAA or IAS, and that choice cannot be changed later. What each option means and when to choose IAS.
Oct 20, 2026
Enabling extensibility (key user) in SAP S/4HANA 2025
Steps to enable the key user extensibility apps in SAP S/4HANA 2025: SAP Note, ATO, SAP_BASIS_BC_EXT catalog, ICF nodes, OData services and role.
Oct 17, 2026
A better alternative to BAS for MDK development
How to set up a local VS Code environment to develop SAP MDK applications without Business Application Studio, and work on them with AI agents.
Oct 14, 2026
SAP GUI for Java on macOS: installation and first connection
SAP GUI for Java 8.10 on a Mac with an M processor: the Java it already ships with, the three ways to connect and why the System tab is no use with just a host.
Oct 9, 2026
SAP API Management: how TLS ciphers are changing
SAP API Management retires two TLS 1.2 cipher suites for inbound connections. How it affects your integrations and what to review before October 2026.
Oct 8, 2026
SAP Document AI: when the confidence score is not reliable
Material matching with SAP Document AI in multi-vendor purchase orders: why the confidence score was not enough to decide and which solution did work.
Oct 8, 2026
SAP CAP as an MCP server: one annotation and three surprises
How to expose a SAP CAP service as an MCP server with the @cap-js/mcp plugin, which tools the AI agent receives and what limits appear when you test it.
Oct 7, 2026
SAP RAP from zero to expert: free ABAP Cloud series
Free YouTube series on SAP RAP with ABAP Cloud: more than 6 hours of video in Spanish, from the SAP BTP trial account to the Behavior Definition.
Oct 6, 2026
Ledger or SourceLedger in S/4HANA: filtering extension ledgers
A journal entry takes up 4 rows in ACDOCA and 8 in I_JournalEntryItem. How to filter Ledger and SourceLedger so you neither lose nor multiply amounts, with measured results.
Oct 1, 2026
SAP Fiori development with AI: set up your professional environment
Class 1 of the Fiori SAPUI5 Master, with the full video: SAP BTP trial, Business Application Studio, VS Code, TypeScript and AI assistants with MCP.
Oct 1, 2026
What is SAP Document AI? The vocabulary of the series
Document lifecycle, schemas, templates, extraction methods, confidence score and what you need to set up in SAP BAIP to use SAP Document AI.
Oct 1, 2026
S/4HANA without ACDOCA: the released CDS views for Journal Entry
SAP marks ACDOCA as not released and proposes three released CDS views as successors. Which one to use for line items, balances, header and analytics, and with what limitations.
Sep 30, 2026
Pagination in ABAP SQL: offset vs keyset, measured
Why OFFSET degrades with page depth while keyset keeps a constant cost: a curve measured on 2.4 million rows and how to choose.
Sep 29, 2026
SAP consultant salaries in 2026: what nobody tells you
Why the SAP consultant salary figures you see on LinkedIn are useless for making any decision, and which factors really move the number: specialization, country, and whether you work freelance or for a consultancy.
Sep 23, 2026
Your first business object with RAP, step by step
A table, an interface view and a managed behavior definition, in a single end-to-end walkthrough: your first RAP business object, step by step.
Sep 21, 2026
When to hire external SAP BTP consulting (and when not to)
SAP BTP consulting: when it makes sense to bring in senior external help, what to ask before signing, and when the problem is better solved in-house.
Sep 17, 2026
Clean core for developers: extending S/4HANA without breaking the core
Modifying the standard is not free: you pay for it at every upgrade. A practical guide for developers on choosing the right clean core extension path.
Sep 15, 2026
What a functional consultant should understand about ABAP Cloud
You do not need to program to defend an SAP project well. The minimum about ABAP Cloud that a functional consultant needs in order not to depend on someone else's judgment.
Sep 11, 2026
From procedural ABAP to ABAP Cloud: migration checklist
Migrating to ABAP Cloud is not about translating syntax: it changes data access, business logic and how you model with RAP. A step-by-step checklist, with real examples.
Sep 9, 2026
Why is your CDS view poorly structured?
How to structure a CDS view into Basic, Composite and Consumption layers, and why mixing them breaks your Fiori apps and your reports.
Sep 7, 2026
ABAP Cloud is not Cobol: for developers coming from outside
Learning ABAP coming from Java is not starting from scratch. Look at the code written today in S/4HANA and why the market pays for it.
Sep 2, 2026
EML: manipulating RAP business entities without a single SELECT
In the Behavior Pool you use neither SELECT nor COMMIT: you use the Entity Manipulation Language. READ ENTITIES, MODIFY ENTITIES and the %tky technical keys, with the real code.
Aug 13, 2026
Authorizations in RAP: global vs instance without losing your mind
Blocking an operation for everyone is one thing; blocking it based on the record's content is a very different one. RAP's two authorization levels and when you need each.
Aug 12, 2026
Validations and determinations in RAP: where each business rule lives
A validation vetoes the save; a determination fills a field on its own. Confusing them means putting logic in the wrong place. When to use each, with the real behavior definition.
Aug 10, 2026
Draft in RAP: the work-in-progress that stops your users from losing their work
Draft mode lets users save halfway without dirtying the database. How you enable it in the behavior definition, which actions it requires, and why it needs the total ETag.
Aug 8, 2026
The data model of a RAP business object: active persistence, draft and audit
In ABAP Cloud you no longer define tables graphically: you write them with annotations. The audit columns, the UUID and the draft table the RAP framework expects, with the real DDL.
Aug 5, 2026
Managed vs Unmanaged in RAP: when to let the framework persist for you
The managed scenario gives you create, update and delete for free; unmanaged forces you to write them. When to use each in the RESTful ABAP Programming Model, with the real behavior definition.
Aug 4, 2026
VCAP_SERVICES: why your credentials never go in the code
In Cloud Foundry, HANA or XSUAA credentials are not written: they are injected. The service binding puts them into the VCAP_SERVICES environment variable at runtime. Grasping this changes how you design the app.
Aug 2, 2026
cf CLI for real: push, bind and logs, the three you use every day
The cf CLI has dozens of commands, but 90% of your daily work fits into three verbs: deploy, bind services and read logs. With the real syntax and the flags that matter.
Jul 31, 2026
mta.yaml: why the deployment unit is not the app, it's the MTA
A Multi-Target Application packages service, database and UI into one versioned artifact. Deploying app by app with cf push is fine until you have three modules that depend on each other.
Jul 30, 2026
The Cloud Foundry model: orgs, spaces and apps demystified
Before you write a single cf push you need the hierarchy: global account, subaccount, organization, space and app. Ignore it and you end up with quotas misallocated and deployments in the wrong place.
Jul 27, 2026
Deploying a full-stack CAP app to Cloud Foundry, end to end
Put it all together: a CAP project with HANA and XSUAA, the MTA build, CF login and deploy. The complete run from File New Project to the app answering with its token, with the real commands.
Jul 25, 2026
Buildpacks and staging: what happens between your cf push and a running app
Between cf push and a green app there's a phase almost nobody looks at: staging. The buildpack detects your language, installs the runtime and assembles the droplet. When startup fails, it almost always fails here.
Jul 23, 2026
Destinations and Cloud Connector: connect BTP without opening the firewall
The bridge between the BTP cloud and your on-premise systems isn't opening ports. It's Cloud Connector plus well-typed destinations. We break it down with the real properties.
Jul 20, 2026
Role collections, role templates and shadow users in SAP BTP
BTP's authorization model isn't a checkbox. Role templates, collections and shadow users: getting it right is the difference between auditable access and a permissions mess.
Jul 19, 2026
Entitlements and quotas in SAP BTP: the budget that doesn't overflow
Service entitlements and quota entitlements. This is where BTP spending is really controlled. Split it wrong and you're signing a surprise invoice at month end.
Jul 17, 2026
The account hierarchy in SAP BTP: governance from day 1
Global account, directories, subaccounts. Not a decorative org chart: it's the boundary for billing, security and regions. Improvise it and you pay in every audit.
Jul 15, 2026
Subscriptions vs service instances in SAP BTP: not the same thing
Applications you subscribe to and services you instantiate. Confusing them leads to the wrong service plan, wasted quota and an architecture that doesn't scale. We clear it up.
Jul 12, 2026
Administering SAP BTP from the terminal: btp CLI and cf CLI
The Cockpit is fine for exploring. To really govern, automate and audit, you need the command line. btp CLI for the account, cf CLI for the runtime.
Jul 11, 2026
Handlers in CAP: write less JavaScript, not more
CAP's generic runtime already handles CRUD. Node.js handlers are for logic the model can't express: actions, functions and validations. With a real cancelOrder.
Jul 9, 2026
Released APIs: consuming the standard without coupling to what you shouldn't
Consuming a released SAP API is fine; consuming it badly couples you to the core just like a modification. The difference lies in the access pattern. A practical guide in ABAP Cloud.
Jul 9, 2026
Well-structured CDS: the VDM layer that won't embarrass you in three years
Basic, Composite, Consumption. The Virtual Data Model isn't bureaucracy: it's what separates a model that scales from a plate of spaghetti. With a real ABAP CDS code example.
Jul 8, 2026
The CDS model in CAP: entities and services that don't collide
In CAP the data model lives in db and services live in srv, and that split is not a whim: it's what lets you change the schema without touching the API. With real schema.cds and catalog-service.cds.
Jul 7, 2026
Clean Core, no nonsense: what it actually means in ABAP Cloud
Clean Core is not a marketing label, nor a ban on modifications. It's an extensibility discipline built on released APIs and stable extension points. We break it down with examples.
Jul 7, 2026
Authorization in CAP with XSUAA: when an annotation becomes a permission
In CAP security is declared in the model with @requires and @restrict, not coded in each handler. How XSUAA turns roles into scopes and the xs-security.json that ties it together.
Jul 6, 2026
Remote services in CAP: consume S/4HANA without copying the ERP
Import an external OData service, project it as your own and delegate the query to the backend. How CAP integrates S/4HANA without replicating data, with cds import and a real projection.
Jul 3, 2026
Deploying CAP to BTP: from cds watch to mta.yaml without surprises
Locally it runs on in-memory SQLite. On BTP you need HANA, an HDI container and an mta.yaml wiring the modules together. What changes between your laptop and Cloud Foundry, no fluff.
Jul 1, 2026
CAP vs RAP: it's not religion, it's where your business logic lives
CAP runs in Node.js or Java on BTP; RAP runs in ABAP inside S/4HANA. The choice isn't taste: it depends on where your data and your team are. No tribalism.
Jun 29, 2026
What Fiori Elements are, and why you should use them
Fiori Elements isn't just another framework: it swaps hand-written UI5 for annotations over the OData service. Less JavaScript, more metadata, consistent UX. With a real CDS annotation example.
Jun 26, 2026
Fiori Elements floorplans: List Report, Object Page, Worklist and Analytical
Not every pattern fits every case. When to pick List Report Object Page, when a Worklist and when an analytical List Report. With the real wizard start in Business Application Studio.
Jun 25, 2026
Fiori tools in VS Code: the tooling that makes Fiori Elements productive
Annotations are the language, but without good tooling writing them by hand is torture. Fiori tools (wizard, guided development, cds watch) turn metadata into productivity. With the real startup flow.
Jun 23, 2026
Extension points in Fiori Elements: when stepping out of the lane is justified
Fiori Elements gives you a lot for free, but sometimes you need what the template doesn't cover. Extension points are the controlled exit. When to use them, when not, and why metadata extensions come first.
Jun 21, 2026
Draft and actions in Fiori Elements: when the screen does more than display
Draft and actions turn a read-only app into a real business application. How RAP draft and actions bound to ABAP methods are declared, not hand-coded.
Jun 18, 2026
UI annotations: lineItem, facets and headerInfo, the language of Fiori Elements
A Fiori Elements screen is drawn with annotations, not XML. LineItem for the table, HeaderInfo for the header, Facets to organize the detail. With real CDS annotations.
Jun 17, 2026
TypeScript in SAPUI5: from @ts-nocheck to types that warn you before you break
UI5 projects have faked types with JSDoc for years. TypeScript makes them real: typed events, ES6 imports and compile-time errors. How to make the jump without rewriting the whole app.
Jun 15, 2026
Routing in SAPUI5: navigate with the URL, not with setVisible
Routes, patterns and parameters in the manifest, and a router that syncs the hash with the view. How to go from a list to a detail without hiding controls by hand, with back navigation that respects history.
Jun 13, 2026
manifest.json: the single source of truth for your UI5 app
Models, routes, dependencies, i18n and minimum UI5 version declared in one file. Stop instantiating models by hand in the component and describe the app in the descriptor. With real JSON.
Jun 12, 2026
sap.ui.define and async loading: the end of global variables in UI5
AMD, explicit dependencies, async:true and ComponentSupport instead of inline scripts. Why sap.ui.require replaces globals and how this fits with CSP. With real bootstrap code.
Jun 9, 2026
Data binding in SAPUI5: stop moving data by hand
JSONModel for local, ODataModel for the backend, and a binding that refreshes the UI on its own. Property, aggregation, expression and custom formatters, with real code from an invoice list.
Jun 7, 2026
MVC architecture in SAPUI5: the controller is not a junk drawer
View, model and controller have clear boundaries. Respect them and the app maintains itself; ignore them and the controller ends up with 800 lines of everything. We show it with real XML and JavaScript.
Jun 5, 2026
Wrappers for legacy code: consuming the old without contaminating the new
You cannot rewrite twenty years of classic ABAP overnight, but you cannot let it soil your cloud layer either. The wrapper strategy and Tier 2 are the bridge. With a pattern and real code.
Jun 2, 2026
ABAP SQL in ABAP Cloud: what changes versus classic (and why it is better)
In ABAP Cloud, SQL is still SQL, but the language takes away the crutches: no direct access to core tables, no reckless CLIENT SPECIFIED, WHERE always. We walk the changes with real code.
Jun 1, 2026
The usage list: how to tell, cold, whether a class is released
Before calling a standard object in ABAP Cloud, the question is not whether it exists, but whether it is released for your use. Here is how to actually check: contract check, usage list and release state.
May 30, 2026
The three extensibility tiers in ABAP Cloud: decide before you code
Key user, developer, side-by-side. Before the first line of code, decide which tier your extension lives in. Choosing wrong is not a detail: it condemns the code to the next upgrade. With a decision tree and example.
May 28, 2026
ATC: what it is and why it retires the Code Inspector
The ABAP Test Cockpit isn't a Code Inspector with a new badge. It's a quality engine wired into ADT, with governed exemptions and mass runs over packages and transports. No fluff.
May 25, 2026
ATC in CI: don't let quality depend on anyone's memory
Background runs, the Result Browser and the quality gate on transport release turn the ATC into a continuous control. That's how you bring quality into the pipeline, not to the end of the sprint.
May 24, 2026
Reds, yellows and blues: prioritizing ATC findings without drowning
An ATC run with three thousand findings isn't information: it's noise. Priorities, grouping and a baseline turn that impossible list into a real work queue. With judgment, not brute force.
May 22, 2026
The ATC as your ABAP Cloud readiness radar
Before migrating to ABAP Cloud, the ABAP_CLOUD_READINESS variant tells you exactly what of your code survives and what doesn't. It's the map that turns a blind migration into a plan.
May 20, 2026
ATC in the flow: exemptions and pragmas without sweeping under the rug
Pragmas, pseudo-comments and exemptions are the three ways to tell the ATC a finding is intentional. Used well, they keep the flow clean. Used badly, they hide bombs. Here's the difference.
May 19, 2026
Check variants and baseline: the ATC doesn't measure everyone the same
ABAP_CLOUD_DEVELOPMENT_DEFAULT, ABAP_CLOUD_READINESS, ABAP_CLOUD_DEVELOPMENT_PARTNER. Picking the variant and setting a baseline is what separates a useful ATC from a sea of warnings nobody reads.
May 16, 2026
Moving code between systems with abapGit, no STMS involved
abapGit can carry your development from one system to another without a single transport request. It's powerful and dangerous in equal measure. Here's how it works, when it makes sense and where you should NOT use it.
May 14, 2026
abapGit: what it is and why you should finally version your ABAP
abapGit is a Git client written in ABAP that runs inside the system itself. It isn't a community novelty: it's how you free your code from the tyranny of transports and put it under real version control.
May 12, 2026
Online vs offline repos in abapGit: when it connects and when it doesn't
abapGit has two repository modes: online, tied to a remote GitHub, and offline, a ZIP you carry by hand. They aren't the same and don't serve the same purpose. Choosing wrong costs you a whole workflow.
May 9, 2026
abapGit in practice: best practices and the mistakes you will absolutely hit
Unsupported objects, phantom dependencies, expired tokens, a badly set master language. abapGit works beautifully until one of these bites you. Here's the list of what goes wrong and how to avoid it.
May 8, 2026
The abapGit workflow: staging, commit, push, pull and branches without drama
The daily abapGit cycle isn't magic: it's git add, git commit and git push translated into ADT. Here's the real flow, with the Staging view, commit messages that actually help, and why branches save you.
May 6, 2026
The .abapgit.xml and package mapping: the piece almost nobody looks at
That small file at the repo root decides how ABAP packages map to folders and back. Folder logic FULL or PREFIX, master language, starting folder. Here's what it does and why it matters.
May 4, 2026
SOAMANAGER and endpoint configuration: the transaction that separates defining a service from publishing it
Activating a service definition doesn't make it reachable. SOAMANAGER generates the WSDL and the binding; and the hosts file, that great forgotten piece, can take down a flawless service. A no-fluff guide to SOAP deployment.
May 1, 2026
Security in ABAP Web Services: communication users, authentication profiles and the mistake of using a dialog user
A service exposed without a communication user and without a security profile is an open door into the ERP. We review SAP's four profiles, why the type C user exists and what role to give it without overreaching.
Apr 30, 2026
Errors and faults in ABAP Web Services: the SOAP Fault, the HTTP code and why a 200 doesn't mean success
The SOAP envelope has a fourth element almost nobody uses: the fault. In REST the error travels in the HTTP code. Handling both well is what separates a robust integration from one that fails silently.
Apr 28, 2026
Consuming an external service from ABAP: consumer proxy, logical port and when to drop to HTTP
Two ways to call a service from SAP: the wizard-generated proxy with its logical port, or raw CL_HTTP_CLIENT. When to use each and why the logical port is the piece everyone forgets.
Apr 26, 2026
Building a Web Service Provider in ABAP: from BAPI to published service, no fluff
RFC, BAPI or proxy class: three doors to expose SAP logic as a SOAP service. We show which to pick, the real Enterprise Service and SOAMANAGER flow, and the format mistake that breaks integrations.
Apr 25, 2026
SOAP vs REST in ABAP: when to use each and why the debate is usually framed wrong
SOAP isn't old and REST isn't modern: one is a protocol, the other a pattern. In ABAP they coexist, and choosing well saves you needless WSDLs or hand-written parsers. With real payload examples.
Apr 22, 2026
SEGW versus CDS: SAP Gateway isn't dead, it moved
The classic SAP Gateway model with SEGW, MPC and DPC classes, is still alive in many systems. The modern CDS approach is cleaner, but not always the right call. When each one, without dogma.
Apr 20, 2026
OData from CDS: @OData.publish or Service Definition, not the same thing
Publishing an OData service from a CDS view with a single annotation is tempting. But @OData.publish and the Service Definition + Service Binding pair solve different problems. When to use each, with real code.
Apr 18, 2026
OData performance: $filter, $select and paging or the service crawls
An OData service that returns every column of every row is a time bomb. $select trims the width, $filter trims the height and paging avoids fetching the world. The three performance keys, with real examples.
Apr 15, 2026
$expand and navigation in OData: one call, not ten
Fetching a customer and then, in another request, its orders, is the pattern that kills a Fiori app's performance. $expand and association navigations solve in a single call what many do in N. With real detail.
Apr 14, 2026
CRUD and Function Imports in OData: when CRUD isn't enough
Create, Read, Update, Delete cover 90 percent of an OData service. The other 10 percent are actions that are neither create nor read: that's where Function Imports come in. How to tell them apart and not put logic where it doesn't belong.
Apr 12, 2026
OData V2 or V4 in ABAP: choosing without fooling yourself
V2 has a decade in production; V4 is the future and what modern Fiori asks for. When each one fits, what V4 actually buys you, and why migrating for fashion is a mistake. With a real SEGW project example.
Apr 10, 2026
The golden rules of SELECT on HANA: no SELECT * and no nested loops
HANA is fast, but it won't forgive a SELECT inside a LOOP or a SELECT *. The five rules that separate data access that flies from data access that drags the whole system down.
Apr 7, 2026
Analyzing performance on HANA: measure with ST05, SQLM, SAT, ATC and SWLT
Optimizing without measuring is superstition. An honest tour of the tools HANA and ABAP give you to find the SQL that's actually slow: each one answers a different question.
Apr 6, 2026
Code pushdown in practice: what to push and how far
Pushdown isn't optimizer magic: it's your decision. CASE, SQL functions, WITH, UNION and hints. We review what you can push to HANA with ABAP SQL and when you shouldn't.
Apr 4, 2026
Code-to-data: stop dragging the database into ABAP
The code-to-data paradigm isn't a HANA fad: it's admitting that moving millions of rows to the application server to sum them in a LOOP was always a mistake. Explained with real examples.
Apr 2, 2026
CDS Table Functions: when a CDS view isn't enough and you need SQLScript
Table Functions merge the best of CDS and AMDP: you model like a CDS entity but implement in SQLScript. When to use them, how the two pieces wire together and the SELECT-OPTIONS trick.
Apr 1, 2026
AMDP: SQLScript inside an ABAP class (no database user)
ABAP Managed Database Procedures let you write HANA SQLScript as a class method, transported as ABAP code. When it makes sense, how it's declared and why it isn't your first choice.
Mar 29, 2026
Parameters in CDS: stop cloning the same view twelve times
A view with the year and company code hardcoded in the WHERE isn't reusable, pollutes the plan cache and forces you to maintain copies. Typed parameters fix all three. With real DDL and the recompilation trap.
Mar 27, 2026
Associations vs joins in CDS: the detail that changes the HANA plan
A JOIN always runs; an association only when someone navigates it. In reused views that cuts data transfer by 30 to 80 percent. With real DDL and the cardinality trap.
Mar 25, 2026
The six CDS annotations you should always declare (and one that can lie to you)
compareFilter, authorizationCheck, clientHandling, preserveKey. Not decoration: omitting them costs 15 to 30 percent on views with joins, and one of them, misdeclared, returns wrong results with no warning.
Mar 22, 2026
CDS performance: logic goes where the data is, not the other way round
The LOOP with a SELECT SINGLE inside was normal in ECC. In S/4HANA it's the cardinal sin. Code pushdown, why the native join beats FOR ALL ENTRIES, and the string function that turns 1 second into 60.
Mar 21, 2026
Analytical and semantic annotations: the CDS that Fiori and SAC understand on their own
A decimal without @Semantics is just a number. With the right annotations, Fiori formats the currency, SAC converts amounts and temporal drill-down works with no UI code. With real cube and dimension DDL.
Mar 19, 2026
The MVC pattern in Web Dynpro ABAP: why separation isn't optional
Model, View, Controller. Web Dynpro doesn't suggest MVC to you: it enforces it. Understanding that architecture is the difference between an app that survives maintenance and a classic dynpro in disguise.
Mar 17, 2026
Floorplan Manager versus classic Web Dynpro: when to standardize and when to migrate
FPM doesn't replace Web Dynpro: it standardizes it. UIBB, floorplans and configuration versus hand-built views. And the uncomfortable question: when it makes sense to stay in WD and when to jump to Fiori.
Mar 14, 2026
Reusable components in Web Dynpro: component usage without coupling
Reusing a Web Dynpro component isn't copy and paste. It's declaring the usage, instantiating the component usage and mapping contexts. Done right, it scales; done wrong, it couples everything to everything.
Mar 13, 2026
Events, actions and navigation in Web Dynpro: the flow you have to see
From a click to a view change. Actions, inbound and outbound plugs, navigation links and the phase model. Once you understand this flow, you stop programming blind.
Mar 11, 2026
Controllers and components in Web Dynpro: who commands and who exposes
View controller, global controller, interface controller. Understanding the three types and the hook methods is what separates whoever copies snippets from whoever designs reusable components.
Mar 9, 2026
The Web Dynpro context: nodes, attributes and binding without drama
The context is the memory of your Web Dynpro application. Nodes, cardinality and automatic binding. Master this and half the bugs of a WD app disappear before they're even born.
Mar 8, 2026
Field catalog, layout and variants: what holds the ALV up
Columns, texts, visibility, layout and variants the user saves. With SALV this is done with typed objects, not flat structures. Closing the ALV series with real ABAP code.
Mar 5, 2026
Editable ALV: editing and validation without drama
When the user types into the cell, your responsibility begins. data_changed to validate, F4 for value helps, and persist with a user command. The editable grid with real ABAP code.
Mar 3, 2026
Toolbar and custom functions in ALV: buttons that do your job
The standard bar is only the start. With SALV you add custom functions via add_function; with ALV Grid, buttons in the toolbar event. We look at both paths with real ABAP code.
Mar 1, 2026
Events and hotspots in ALV: when the list starts to respond
Hotspot, double-click, user command. Interaction in ALV Grid runs on events and handlers, not loose callbacks. We look at the pattern with SET HANDLER and real ABAP code for a hotspot event.
Feb 26, 2026
An ALV in ten lines with CL_SALV_TABLE
The fastest list you can write in classic ABAP: factory, display and little else. We look at the real minimum with CL_SALV_TABLE, full screen and inside a container, with real ABAP code.
Feb 25, 2026
SALV vs REUSE_ALV: why CL_SALV_TABLE is the way
The REUSE_ALV_* function zoo works, but it ages badly. We compare the classic family with CL_SALV_TABLE and explain why the class is the modern standard. With real ABAP code.
Feb 23, 2026
Host expressions and the @: your first defense against injection in ABAP SQL
Host variables, host expressions with @( ... ) and dynamic SQL. The difference between passing a value and concatenating a string is the difference between a secure system and one with an open door. With real code.
Feb 21, 2026
CTEs with WITH and subqueries: step-by-step queries without throwaway views
The Common Table Expression (WITH +cte AS ...) breaks a complex query into readable steps that live inside the statement. With real code, the mandatory + prefix and the ENDWITH people forget.
Feb 18, 2026
Aggregations and GROUP BY: let the database hand you the totals, not the rows
SUM, COUNT, MAX and GROUP BY in the statement. Summing in a LOOP is fetching ten thousand rows to produce three. With real code over the flight tables and the HAVING filter many forget.
Feb 17, 2026
SQL expressions in ABAP: let the database compute for you
CASE, arithmetic and functions inside the SELECT. Everything you resolve in the statement is computation that never travels up to ABAP. With real code for CASE, CAST, DIVISION, ROUND and string functions.
Feb 15, 2026
JOIN in the database or nested loop: the pattern that decides your performance
The SELECT inside a LOOP still shows up in every code review. A JOIN resolves in one trip what a nested loop resolves in thousands. We see it with real code over the flight tables.
Feb 13, 2026
Modern ABAP SQL: why the comma and @ syntax isn't cosmetic
Commas between columns, INTO at the end, inline declarations with @DATA and host variables with @. The new Open SQL syntax isn't sugar: it's what switches on strict mode and saves you from silent errors.
Feb 12, 2026
Events in ABAP OO: the emitter doesn't know who's listening, and that's the point
EVENTS, RAISE EVENT and SET HANDLER let you decouple who triggers an action from who reacts. The ABAP emitter-handler model, with its ordering and registration traps. With real ABAP OO.
Feb 9, 2026
Class-based exceptions in ABAP: stop staring at sy-subrc
TRY CATCH, the CX_ROOT hierarchy and chaining with PREVIOUS. Why class-based exceptions beat sy-subrc and how not to lose the root cause of an error. With real ABAP OO.
Feb 7, 2026
Polymorphism and casting in ABAP: the parent reference, the child's method
Polymorphism lets you treat different objects through a single access point. Narrowing and widening casts, when they are safe and when they raise CX_SY_MOVE_CAST_ERROR. With real ABAP OO.
Feb 5, 2026
Interfaces versus inheritance in ABAP: pick a contract, not a family tree
ABAP only supports single inheritance and solves multiple inheritance with interfaces. When to inherit, when to implement an interface, and why the interface usually wins. With real ABAP OO.
Feb 2, 2026
Encapsulation in ABAP: every public attribute is a debt
PUBLIC, PROTECTED, PRIVATE and READ-ONLY aren't bureaucracy. They are your class's contract with the rest of the system, and over-declaring today gets paid back on every evolution. With real ABAP OO.
Feb 1, 2026
Classes and objects in ABAP: the mold is not the furniture
A class is a template; an object is an instance with its own state. Grasping that difference, and the role of NEW versus CREATE OBJECT, is what separates real ABAP OO from procedural code in disguise.
Jan 30, 2026