| name | sap-code-search |
| description | Search ABAP source code using ADT REST API, abap-code-search-tools (DevEpos), or RS_ABAP_SOURCE_SCAN |
| trigger | {"keywords":["code search","where used","find abap","scan source","impact analysis","rs_abap_source_scan","code_search"],"intent":"Searching ABAP code, finding references, or scanning source code across SAP systems"} |
SAP Code Search
Mental Model
You have three search engines, each with a different tradeoff:
- ADT REST API — fast, indexed, built-in. Best for object lookup and quick searches.
- abap-code-search-tools (DevEpos) — full-text, regex, 12 object types. Best for deep scanning.
- RS_ABAP_SOURCE_SCAN — standard report, no add-ons. Best for quick one-off scans in GUI.
Pick based on what you need: speed → ADT, depth → DevEpos, zero-install → RS_ABAP_SOURCE_SCAN.
Prerequisites
curl -s -u "$SAP_USER:$SAP_PASS" \
"$SAP_HOST/sap/bc/adt/repository/informationsystem/search?operation=quickSearch&query=Z*" \
| head -20
Search via ADT (Quick Object Lookup)
curl -s -u "$SAP_USER:$SAP_PASS" \
"$SAP_HOST/sap/bc/adt/repository/informationsystem/search?operation=quickSearch&query=ZCL_FOO*"
curl -s -u "$SAP_USER:$SAP_PASS" \
"$SAP_HOST/sap/bc/adt/programs/programs/ZMYPROG/source/main"
curl -s -u "$SAP_USER:$SAP_PASS" \
"$SAP_HOST/sap/bc/adt/oo/classes/ZCL_FOO/source/main"
curl -s -u "$SAP_USER:$SAP_PASS" \
"$SAP_HOST/sap/bc/adt/repository/informationsystem/whereused?objectName=BAPI_MATERIAL_SAVEDATA&objectType=FUGR"
Search via DevEpos Engine (Full-Text + Regex)
python scripts/sap_router.py route --action BASIS_CODE_SEARCH
python scripts/xls_to_bapi.py template --output cs.csv --module BASIS --action CODE_SEARCH
python scripts/xls_to_bapi.py convert --input cs.csv --module BASIS --action CODE_SEARCH
python scripts/sap_router.py route --action BASIS_CODE_SEARCH_STATS
Search Modes
| Mode | Syntax | When to use |
|---|
STRING | Plain text | Exact phrase matching |
REGEX | POSIX regex | Pattern matching (BAPI_\w+_CREATE) |
PCRE | Perl regex | Advanced ((?i)select.*from\s+\w+) |
Searchable Object Types (12)
CLAS INTF PROG TYPE FUGR DDLS DDLX DCLS BDEV XSLT STRU(7.50+) DTAB(7.52+)
Search via RS_ABAP_SOURCE_SCAN (Zero Install)
" SE38 → RS_ABAP_SOURCE_SCAN
" Fill parameters:
" Pattern: CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'
" Program range: Z*
" Find pattern in: Reports + Includes
" This scans source line-by-line. No add-on required.
python scripts/sap_router.py route --action code_search
Pitfalls
- ADT search ≠ full-text — ADT
quickSearch finds object names, not source content. Use DevEpos engine for body search.
- RS_ABAP_SOURCE_SCAN is slow on large systems — always filter by package or program name range.
- PCRE mode depends on kernel — verify
cl_abap_regex supports PCRE on your NW release before using.
- Where-used via ADT requires
S_ADT_RES — the standard S_DEVELOP authorization is not enough.
- DevEpos branch matters — use
main for NW ≥ 7.51, nw-740 for 7.40–7.50. Wrong branch = syntax errors.
- Parallel search — set
parallel=true only on systems with ≥ 4 dialog WP; otherwise it degrades.
- Case sensitivity — DevEpos
ignore_case=true is off by default. Most BAPI searches need it on.
- DTAB/STRU types — only available on NW 7.52+/7.50+ respectively. Older systems silently skip them.
Verification
curl -s -o /dev/null -w "%{http_code}" -u "$SAP_USER:$SAP_PASS" \
"$SAP_HOST/sap/bc/adt/repository/informationsystem/search?operation=quickSearch&query=Z*"
python scripts/sap_router.py route --action BASIS_CODE_SEARCH
python scripts/xls_to_bapi.py template --output /tmp/cs_test.csv --module BASIS --action CODE_SEARCH
python scripts/xls_to_bapi.py convert --input /tmp/cs_test.csv --module BASIS --action CODE_SEARCH
Decision Tree
Need to search ABAP source code?
├─ Just find an object by name? → ADT quickSearch
├─ Search source body with regex? → DevEpos engine (BASIS_CODE_SEARCH)
├─ No add-on installed? → RS_ABAP_SOURCE_SCAN (SE38)
├─ Need where-used for a specific object? → ADT where-used endpoint
└─ Batch search across packages? → CSV + xls_to_bapi.py → BASIS_CODE_SEARCH