abap-code-patternslisted
Install: claude install-skill williamcorrea23/sap-router-skill
# ABAP Code Patterns
Reference for ABAP development in ZROUTER_DISPATCH and related SAP projects.
Validated against Clean ABAP guidelines and abaplint rules.
## Prerequisites
- SAP NetWeaver 7.40+ (inline declarations, VALUE, COND, FOR)
- abaplint configured (config in `package.json` `abaplint` key, or root `abaplint.json`)
- Access to SE80/ADT for object creation
## 1. BAPI/RFC Pattern
```abap
" BAPI call with proper commit/rollback
CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'
EXPORTING headdata = ls_header
IMPORTING return = ls_ret.
IF ls_ret-type = 'E' OR ls_ret-type = 'A'.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
RAISE EXCEPTION TYPE cx_zrouter EXPORTING mv_text = ls_ret-message.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'.
ENDIF.
```
## 2. GENERATE SUBROUTINE POOL (Dynamic Eval)
```abap
" Compile ABAP at runtime — lighter than INSERT REPORT + SUBMIT
DATA: lt_source TYPE TABLE OF string,
lv_pool TYPE string.
APPEND |PROGRAM.| TO lt_source.
APPEND |FORM eval CHANGING cv_result TYPE string.| TO lt_source.
APPEND LINES OF lt_lines TO lt_source.
APPEND |ENDFORM.| TO lt_source.
GENERATE SUBROUTINE POOL lt_source NAME lv_pool
MESSAGE DATA(lv_msg) LINE DATA(lv_line) WORD DATA(lv_word).
IF sy-subrc <> 0.
RAISE EXCEPTION TYPE cx_zrouter
EXPORTING mv_text = |Syntax error line { lv_line - 2 }: { lv_msg }|.
ENDIF.
PERFORM ('EVAL') IN PROGRAM (lv_pool) IF FOUND CHANGING cv_result.
```
## 3. Clean ABAP Quick Rules
1. **Field