executing-plans
executing-plans
Use when executing an implementation plan in the current session as the implementer yourself — your human partner chose inline execution, or no subagent tool is available
sap-rap-genGenerate complete SAP RAP business objects — BDEF, behavior implementation, CDS views, service definition, service binding. Managed/unmanaged, draft-enabled, custom entities.
Independent GitHub snapshot · Automated classification · Original documentation governs
RAP = CDS data model + behavior definition + behavior implementation + service exposure. One root entity per BO. Compositions link child nodes. Managed = runtime handles CRUD automatically.
ZPRODUCT) with key fieldsZPRODUCT (DB table)
└─ Z_I_PRODUCT → CDS View Entity (data model, root)
└─ Z_R_PRODUCT → Behavior Definition (transactional contract)
└─ ZBP_I_PRODUCT → Behavior Implementation (ABAP class)
└─ Z_C_PRODUCT → CDS Projection (consumption layer)
└─ Z_SRV_PRODUCT → Service Definition + Binding (OData V4)
└─ Z_D_PRODUCT → Draft table (only if draft-enabled)
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'Product Master Data'
@ObjectModel.semanticKey: ['Material']
define view entity Z_I_PRODUCT
as select from zproduct
composition [0..*] of Z_I_STOCK as _Stock
{
key product_guid as ProductGuid,
material as Material,
@ObjectModel.mandatory: true
material_type as MaterialType,
@Search.defaultSearchElement: true
description as Description,
plant as Plant,
@Semantics.systemDate.createdAt: true
created_at as CreatedAt,
@Semantics.systemDate.lastChangedAt: true
last_changed_at as LastChangedAt,
_Stock
}
managed implementation in class zbp_i_product unique;
strict(2);
define behavior for z_i_product alias Product
persistent table zproduct
draft table z_d_product
lock master total etag last_changed_at
authorization master ( instance )
etag master last_changed_at
{
create;
update;
delete;
field (mandatory) material_type, description;
field (readonly) product_guid, created_at;
field (readonly:update) material;
determination set_audit_fields on modify { create; update; }
mapping for zproduct {
product_guid = product_guid; material = material;
material_type = material_type; description = description;
plant = plant; created_at = created_at;
last_changed_at = last_changed_at;
}
}
CLASS lhc_product DEFINITION INHERITING FROM cl_abap_behavior_handler.
PRIVATE SECTION.
METHODS set_audit_fields FOR DETERMINE ON MODIFY
IMPORTING keys FOR product~set_audit_fields.
ENDCLASS.
CLASS lhc_product IMPLEMENTATION.
METHOD set_audit_fields.
READ ENTITIES OF z_i_product IN LOCAL MODE
ENTITY product FIELDS ( created_at last_changed_at )
WITH CORRESPONDING #( keys )
RESULT DATA(lt_products).
MODIFY ENTITIES OF z_i_product IN LOCAL MODE
ENTITY product UPDATE FIELDS ( created_at last_changed_at )
WITH VALUE #( FOR ls IN lt_products (
%tky = ls-%tky
created_at = COND #( WHEN ls-created_at IS INITIAL
THEN utclong_current( ) ELSE ls-created_at )
last_changed_at = utclong_current( ) ) ).
ENDMETHOD.
ENDCLASS.
@AccessControl.authorizationCheck: #CHECK
@Metadata.allowExtensions: true
define root view entity Z_C_PRODUCT as projection on Z_I_PRODUCT
{
key ProductGuid, Material, MaterialType, Description,
Plant, CreatedAt, LastChangedAt,
_Stock : redirected to Z_C_STOCK
}
@EndUserText.label: 'Product Service'
define service Z_SRV_PRODUCT { expose Z_C_PRODUCT as Product; }
Bind: right-click service definition → New Service Binding → OData V4 - UI → Activate.
READ, CREATE, UPDATE, DELETE, SAVE. Use for legacy tables, external APIs, multi-table LUWs.# Trigger generation (skill auto-activates)
"generate RAP BO for Product with fields: product_guid(UUID,key), material(CHAR18), description(CHAR40), draft enabled"
# Check existing BDEF
aibap: get_object_info(name="Z_I_PRODUCT")
# Activate all generated objects (dependency order)
aibap: activate_objects(["Z_I_PRODUCT","Z_C_PRODUCT","Z_R_PRODUCT","ZBP_I_PRODUCT","Z_SRV_PRODUCT"])
# Run unit tests on behavior implementation
aibap: run_unit_tests(["ZBP_I_PRODUCT"])
strict(1) for 2020 compat.mandt, draftentityoperationcode). Generate via ADT "Generate Draft Table".: redirected to — missing redirect breaks activation.OData V4 - UI for Fiori Elements, OData V4 - API for programmatic.READ ENTITIES outside IN LOCAL MODE inside determinations — breaks transactional buffer.COMMIT ENTITIES from within a determination or validation method." 1. Activate in order: Table → CDS → BDEF → Impl → Projection → Svc Def → Svc Binding
" 2. Preview service binding → OData $metadata must list entity + draft actions
" 3. Test draft flow: Create → Edit → Save → Verify active record in ZPRODUCT
" 4. Run behavior unit tests: aibap: run_unit_tests(["ZBP_I_PRODUCT"])
" 5. Verify ETag: LastChangedAt must update on each modify
@ObjectModel.query.implementedBy: 'ABAP:ZCL_CUSTOM_QUERY'
define custom entity Z_C_CUSTOM_SEARCH {
key search_id : sysuuid_x16; search_term : string; result_count : int4;
}