name: abap
This skill provides guidance for working with ABAP code in SAP systems via the mcp-abap-adt MCP server.
ALL ABAP operations go through mcp-abap-adt tools. NEVER write ABAP code to local files.
| Object Type | Format | Example |
|---|---|---|
| Classes | ZCL_<prefix>_<desc> |
ZCL_MY_CLASS |
| Interfaces | ZIF_<prefix>_<desc> |
ZIF_MY_INTERFACE |
| Tables | ZTB_<prefix>_<desc> |
ZTB_MY_TABLE |
| Structures | ZST_<prefix>_<desc> |
ZST_MY_STRUCTURE |
| Data Elements | ZDE_<prefix>_<desc> |
ZDE_MY_DATA |
| Domains | ZDM_<prefix>_<desc> |
ZDM_MY_DOMAIN |
| CDS Views | Z<V><underscore>_<desc> |
ZVW_MY_VIEW (V4) / ZRI_MY_VIEW (V2) |
| Behavior Def | Root entity name | ZI_MY_ENTITY |
| Behavior Impl | ZBP_<entity> |
ZBP_MY_ENTITY |
| Function Group | Z<FG>_<desc> |
ZFG_TEST |
| Function Module | Z<FM>_<desc> |
ZFM_TEST |
| Programs | Z<desc> |
ZMY_REPORT |
| Message Class | Z_MSG_<desc> |
Z_MSG_ERRORS |
All custom objects must start with Z or Y.
GetPackage to verify package existsSearchObject to check if object already existsGetWhereUsed to check dependenciesactivate: false)Create* toolactivate: false unless you're doneUpdate* or Update* with source codeUpdateClass with complete sourceUpdateDdl with DDL sourceUpdateBehaviorDefinition + UpdateBehaviorImplementationCheck* tool for the object typeActivate* or ActivateObjects (batch)Get* to confirm activationGetInactiveObjects if neededDDLS) - Data model with annotationsBDEF) - Business logic definitionCLAS - ZBP_*) - ABAP code for behaviorSRVD) - Expose the serviceSRVB) - Define OData/UI bindingCreateDdl → UpdateDdl (DDL source) → CheckDdl → ActivateDdl
CreateBehaviorDefinition → CheckBehaviorDefinition → ActivateBehaviorDefinition
CreateBehaviorImplementation (ZBP_*) → UpdateBehaviorImplementation → ActivateClass (for ZBP_*)
CreateServiceDefinition → CheckServiceDefinition → ActivateServiceDefinition
CreateServiceBinding → CheckServiceBinding → ActivateServiceBinding
@AbapCatalog.sqlViewName: SQL view name@AccessControl.authorizationCheck: Authorization check mode@EndUserText.label: Description@OData.publish: Mark for OData exposure_comment, _association, _parameterread, create, update, delete, action definitions as needed@AbapCatalog.sqlViewName: 'ZMYVIEW'
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'My CDS View'
define view Zmy_view as select from my_table {
key client,
key id,
field_name,
status
}
select from for standard CDS_as select for projectionsassociation [0..1|0..*]as _association for navigation properties_parameter annotationCLASS zcl_my_class DEFINITION
PUBLIC
FINAL
CREATE PUBLIC.
PUBLIC SECTION.
METHODS get_data RETURNING VALUE(rv_result) TYPE string.
METHODS set_data IMPORTING iv_value TYPE string.
PROTECTED SECTION.
PRIVATE SECTION.
DATA my_attr TYPE string.
ENDCLASS.
CLASS zcl_my_class IMPLEMENTATION.
METHOD get_data.
rv_result = me->my_attr.
ENDMETHOD.
ENDCLASS.
UpdateLocalTypesUpdateLocalDefinitionsUpdateClassFUNCTION z_fm_test.
*"Local Interface:
*" IMPORTING
*" VALUE(IV_INPUT) TYPE STRING OPTIONAL
*" EXPORTING
*" VALUE(EV_OUTPUT) TYPE STRING
*" EXCEPTIONS
*" ERROR_OCCURRED
*"
*" ev_output = iv_input.
*"
* IF ev_output IS INITIAL.
*" RAISE error_occurred.
*" ENDIF.
ENDFUNCTION.
CreateFunctionInclude + UpdateFunctionInclude for include codeUpdateFunctionModule which sets complete sourceCheckFunctionModule which requires function group nameCreateMessageClass with class nameCreateMessageClassMessage for each message (number + text)&1, &2, &3, &4 for dynamic contentCreateMessageClassMessage with:
message_class_name = "Z_MSG_ERRORS"
msgno = "001"
msgtext = "Error: Invalid value for field &1 (&2)"
Z or Y$TMP = local, no transport request neededtransport_request numberCreateTransport if none existsCheck* ALWAYS run before Activate*UpdateDdl/UpdateTable/UpdateStructure: provide COMPLETE DDL sourceGet* (active version) as reference if updating existing objectWhen creating many related objects:
1. Create all objects with activate: false
2. Update all source code
3. Check all objects (Check*)
4. Fix any errors (Update*)
5. Activate in dependency order using ActivateObjects batch
GetPackageTree(parent_name, include_descriptions: true) - visual treeGetPackageContents(package_name, include_subpackages: true) - recursive flat listSearchObject(object_name: "Z*") - wildcard search across repositoryGetObjectStructure(objecttype: "CLAS/OC", objectname: "ZCL_X") - object tree for specific objectGet*Versions to list versionsGetObjectVersionDiff(content_uri_from, content_uri_to) to compareGet*VersionSource to fetch specific versionActivateObjects with multiple objects to save API callsCreateClass + CreateClassVersion (final keyword: TEST_DOUBLE for doubles)UpdateLocalTestClassRunUnitTest or CreateUnitTestGetUnitTestStatus and GetUnitTestResultCreateCdsUnitTest for CDS view validationCreateTransport to create transport requestsGetTransportListTransports to find open transport requestsFor advanced scenarios:
GetNodeStructureLow: Navigate object tree with session managementGetAdtTypes: Validate object type codesRuntimeAnalyzeProfilerTrace: Profiling & performance analysisSqlQuery: Execute direct SQL queriesGetTableContents: Data preview for database tables