Phani Puttabakula - Mar 12, 2026

Part 4: Writing ABAP Code with ABAPer โ€“ Draft Structure

Part of ABAPer Series

Summary

ABAPer doesn’t just analyze code โ€” it writes it. This article demonstrates AI-assisted code generation for ABAP programs, classes, database tables, CDS views, and unit tests. You’ll learn prompt engineering patterns that produce production-quality ABAP on the first try.

The Problem

Boilerplate ABAP code is tedious. Creating a new class with methods, exception handling, and proper patterns takes time. Writing CDS views requires memorizing annotation syntax. Unit tests are often skipped because they’re time-consuming to set up. AI code generation solves these problems โ€” but only if the prompts are structured correctly.

Why This Matters

ABAPer can create and activate ABAP objects directly in your SAP system through MCP tools (create-object, create-and-activate, update-object, activate-object). This isn’t copy-paste from ChatGPT โ€” the AI creates the object in SAP, writes the source code, and can activate it in one step.


Step-by-Step Tutorial

Section 1: Creating an ABAP Program

PROMPT:

Create an ABAP report program Z_CUSTOMER_AGING in package ZTEST.
It should:
- Accept company code and customer number range on selection screen
- Read open items from BSID
- Calculate aging buckets: 0-30, 31-60, 61-90, 90+ days
- Display results in ALV using CL_SALV_TABLE
- Use modern ABAP syntax (inline declarations, string templates)
- Include proper error handling and authority checks

EXPECTED OUTPUT: [Full ABAP program source with:

  • REPORT statement
  • TYPE declarations for output structure
  • SELECTION-SCREEN with PARAMETERS and SELECT-OPTIONS
  • AUTHORITY-CHECK
  • SELECT with explicit field list
  • Aging calculation logic
  • ALV display with CL_SALV_TABLE
  • Exception handling with TRY/CATCH]

What happens behind the scenes:

  1. AI generates the source code
  2. create-object MCP tool creates the program in SAP
  3. Optionally, activate-object activates it

[Screenshot placeholder: AI panel showing program creation with MCP tool execution log]


Section 2: Creating a Class

PROMPT:

Create an ABAP class ZCL_MATERIAL_SERVICE in package ZTEST.
Public methods:
- GET_MATERIAL importing IV_MATNR type MATNR returning RS_MARA type MARA
  raises ZCX_NOT_FOUND
- SEARCH_MATERIALS importing IV_PATTERN type STRING returning RT_MATERIALS type MARA_TAB
- CREATE_MATERIAL importing IS_MARA type MARA returning RV_MATNR type MATNR
  raises ZCX_MATERIAL_ERROR

Use constructor injection for database access (testability).
Follow clean ABAP principles.

EXPECTED OUTPUT: [Full class definition and implementation with:

  • CLASS … DEFINITION PUBLIC CREATE PUBLIC
  • PUBLIC SECTION with method signatures
  • PRIVATE SECTION with attributes
  • METHOD implementations
  • Exception handling
  • Constructor with dependency injection pattern]

Section 3: Creating a Database Table

PROMPT:

Create a transparent table ZCUSTOMER_SCORE in package ZTEST.
Fields:
- MANDT (key, client)
- CUSTOMER_ID (key, CHAR 10)
- SCORE_DATE (key, DATS)
- CREDIT_SCORE (DEC 5,2)
- RISK_CATEGORY (CHAR 1: A=low, B=medium, C=high)
- LAST_UPDATED (TIMESTAMP)
- UPDATED_BY (SYUNAME)

Include delivery class A, no table maintenance dialog.

EXPECTED OUTPUT: [ABAP Dictionary table definition source]


Section 4: Creating CDS Views

PROMPT:

Create a CDS view Z_I_SalesOrderItem that:
- Reads from VBAP (sales order items) and VBAK (sales order header)
- Joins on VBELN
- Exposes: order number, item, material, quantity, net value, currency, order date, sold-to party
- Add appropriate @AbapCatalog and @ObjectModel annotations
- Include association to I_Material

EXPECTED OUTPUT: [CDS view source with:

  • @AbapCatalog.sqlViewName annotation
  • @AbapCatalog.compiler.compareFilter: true
  • @AccessControl.authorizationCheck: #CHECK
  • @ObjectModel annotations
  • SELECT with JOIN
  • Association definition
  • Proper field aliases]

Section 5: Writing Unit Tests

PROMPT:

Generate ABAP unit tests for class ZCL_MATERIAL_SERVICE.
Cover:
- GET_MATERIAL with valid material โ†’ returns correct data
- GET_MATERIAL with invalid material โ†’ raises ZCX_NOT_FOUND
- SEARCH_MATERIALS with pattern โ†’ returns matching entries
- SEARCH_MATERIALS with no match โ†’ returns empty table
- CREATE_MATERIAL with valid data โ†’ returns material number
- CREATE_MATERIAL with duplicate โ†’ raises ZCX_MATERIAL_ERROR

Use test doubles for database access.
Follow the Given-When-Then pattern.

EXPECTED OUTPUT: [Test class source with:

  • CLASS ltcl_material_service DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT
  • SETUP method with test double injection
  • Individual test methods following Given-When-Then
  • cl_abap_testdouble or manual mock usage
  • Assertions with cl_abap_unit_assert]

Section 6: Prompt Engineering for ABAP

Pattern 1: Specify the Object Type and Name

Create an ABAP [program|class|interface|table|CDS view] named [NAME] in package [PACKAGE].

Starting with the object type tells the AI which MCP tool to use and what source format to generate.

Pattern 2: Define the Contract First

Public methods:
- METHOD_NAME importing [params] returning [result] raising [exceptions]

Defining the method signatures before asking for implementation produces more consistent results.

Pattern 3: Specify Standards

Use modern ABAP syntax. Follow clean ABAP guidelines.
No obsolete statements. Use inline declarations.

Without this, the AI may generate older-style ABAP.

Pattern 4: Include Non-Functional Requirements

The program processes 1M records daily. Optimize for performance.
Use parallel processing where appropriate.

Context about volume and performance requirements changes the generated code significantly.

Pattern 5: Reference Existing Objects

Follow the same pattern as ZCL_EXISTING_SERVICE.
Use the same error handling approach as Z_REFERENCE_PROGRAM.

The AI can fetch reference objects from SAP and use them as templates.


Section 7: Validation Strategies

After AI generates code, always validate:

  1. Syntax Check โ€” Use the Problems panel or ask: “Run syntax check on this code”
  2. Activation โ€” Activate the object to catch dependency errors
  3. Unit Tests โ€” Run tests if generated: click the Test quick action
  4. Code Review โ€” Run a review on the generated code: click Review
  5. Manual Inspection โ€” Read through the generated code. AI may misunderstand requirements.

PROMPT for self-review:

I asked you to create Z_CUSTOMER_AGING.
Review the generated code against my original requirements.
List any missing requirements or deviations.

Best Practices

  1. Generate in steps, not all at once. Create the class definition first, review it, then ask for the implementation. This gives you control at each stage.

  2. Always specify the package. ABAPer needs to know where to create the object in the SAP repository.

  3. Provide example data. For reports and data processing programs, describe sample input/output to guide the AI.

  4. Ask for tests alongside code. Generate the test class immediately after the production class โ€” the AI has full context.

  5. Use create-and-activate for speed. When you’re confident in the prompt, the AI can create and activate in one operation, saving round trips.

  6. Don’t generate and forget. Always review AI-generated code. It’s a starting point, not a finished product.


Troubleshooting

Object creation fails with “authorization error”

  • Your SAP user needs developer authorization and a developer key
  • Check that you have write access to the target package

Generated code doesn’t activate

  • Run syntax check first to identify errors
  • Common issues: missing type definitions, referenced objects don’t exist in your system
  • Ask the AI: “The activation failed with error [paste error]. Fix the code.”

Generated code uses obsolete syntax

  • Add to your prompt: “Use modern ABAP syntax only. No obsolete statements.”
  • Be specific: “Use inline declarations, string templates, and NEW instead of CREATE OBJECT”

CDS view annotations are wrong

  • CDS annotation syntax varies by SAP release. Specify your system version: “Target SAP S/4HANA 2023”
  • If activation fails, paste the error back to the AI for correction

Unit tests fail immediately

  • Ensure test doubles are set up correctly
  • Check that the class under test supports constructor injection
  • If tests reference non-existent objects, ask the AI to fix the dependencies

Conclusion

[Summarize: creating programs, classes, tables, CDS views, and unit tests with AI. Emphasize the create โ†’ activate โ†’ test workflow. Note that AI generation is a starting point โ€” always validate.]

Coming Next in the Advanced Series

Future articles will cover:

  • Automated Refactoring โ€” Converting legacy code to modern ABAP patterns
  • SAP S/4HANA Migration Assistance โ€” Batch remediation of incompatible code
  • Multi-Step AI Workflows โ€” Chaining prompts for end-to-end development
  • GitHub-Based Development โ€” Using Git workflows with ABAP
  • Enterprise Code Governance โ€” Team-wide quality standards with AI
  • AI-Driven Test Generation โ€” Comprehensive test coverage strategies
Share this article
LinkedIn