{"id":"c29eaed5-a754-4dae-99fd-40ea4071434e","shortId":"pgR92J","kind":"skill","title":"rap-business-events","tagline":"Help with RAP business events and enterprise eventing including event definitions in behavior definitions, raising events from RAP handler methods, event bindings, SAP Event Mesh integration, event consumption, and event-driven architecture patterns in ABAP Cloud. Use when users ","description":"# RAP Business Events & Enterprise Eventing\n\nGuide for implementing event-driven patterns using RAP business events and SAP Event Mesh in ABAP Cloud.\n\n## Workflow\n\n1. **Determine the user's goal**:\n   - Defining business events in a RAP BO\n   - Raising events from RAP handler methods\n   - Binding events for consumption\n   - Consuming events from external systems\n   - Integrating with SAP Event Mesh\n   - Understanding event-driven architecture in ABAP\n\n2. **Identify the scenario**:\n   - Local event (within the same ABAP system)\n   - Enterprise event (cross-system via Event Mesh)\n   - Event producer vs. event consumer\n\n3. **Guide implementation** following RAP eventing patterns\n\n## Business Events Overview\n\n| Concept               | Description                                                       |\n| --------------------- | ----------------------------------------------------------------- |\n| **Business Event**    | Declared in BDEF; raised when something significant happens       |\n| **Event Definition**  | Formal declaration with parameters in the behavior definition     |\n| **Event Raising**     | Triggered in handler/saver methods via `RAISE ENTITY EVENT`       |\n| **Event Binding**     | Maps RAP event to an enterprise event topic for external delivery |\n| **Event Consumption** | External systems subscribe and react to published events          |\n\n## Defining Business Events\n\n### In the Behavior Definition (BDL)\n\n```\nmanaged implementation in class zbp_r_travel unique;\nstrict ( 2 );\n\ndefine behavior for ZR_Travel alias Travel\npersistent table ztravel_tab\nlock master\nauthorization master ( instance )\netag master LocalLastChangedAt\n{\n  create;\n  update;\n  delete;\n\n  \"Define business events\n  event travel_created parameter ZD_TravelCreatedEvt;\n  event travel_accepted;\n  event travel_rejected;\n}\n```\n\n### Event Parameter Structure\n\nDefine a CDS abstract entity for the event payload:\n\n```cds\n@EndUserText.label: 'Travel Created Event'\ndefine abstract entity ZD_TravelCreatedEvt\n{\n  travel_id   : /dmo/travel_id;\n  agency_id   : /dmo/agency_id;\n  customer_id : /dmo/customer_id;\n  description : /dmo/description;\n  total_price : /dmo/total_price;\n  currency    : /dmo/currency_code;\n}\n```\n\nEvents without the `parameter` addition have no payload.\n\n## Raising Business Events\n\n### In Handler Methods\n\n```abap\nMETHOD on_travel_accept.\n  \"Read travel data\n  READ ENTITIES OF zr_travel IN LOCAL MODE\n    ENTITY Travel\n    ALL FIELDS\n    WITH CORRESPONDING #( keys )\n    RESULT DATA(lt_travels).\n\n  \"Update status\n  MODIFY ENTITIES OF zr_travel IN LOCAL MODE\n    ENTITY Travel\n    UPDATE FIELDS ( status )\n    WITH VALUE #( FOR travel IN lt_travels\n      ( %tky   = travel-%tky\n        status = 'A' ) )\n    REPORTED DATA(lt_reported).\n\n  \"Raise event for each accepted travel\n  RAISE ENTITY EVENT zr_travel~travel_accepted\n    FROM VALUE #( FOR travel IN lt_travels\n      ( %key = travel-%key ) ).\nENDMETHOD.\n```\n\n### With Event Parameters\n\n```abap\nMETHOD on_travel_create.\n  \"After successful creation\n  RAISE ENTITY EVENT zr_travel~travel_created\n    FROM VALUE #( FOR travel IN lt_created_travels\n      ( %key = travel-%key\n        %param = VALUE #(\n          travel_id   = travel-travel_id\n          agency_id   = travel-agency_id\n          customer_id = travel-customer_id\n          description = travel-description\n          total_price = travel-total_price\n          currency    = travel-currency_code ) ) ).\nENDMETHOD.\n```\n\n### In Saver Methods (Additional Save)\n\n```abap\nMETHOD save_modified.\n  \"Raise events in the save phase for committed data\n  IF create-travel IS NOT INITIAL.\n    RAISE ENTITY EVENT zr_travel~travel_created\n      FROM VALUE #( FOR travel IN create-travel\n        ( %key = travel-%key\n          %param = VALUE #(\n            travel_id = travel-travel_id ) ) ).\n  ENDIF.\nENDMETHOD.\n```\n\n## Event Processing Flow\n\n```\n1. User action triggers RAP operation\n2. Handler method executes business logic\n3. RAISE ENTITY EVENT queues the event\n4. RAP framework commits the transaction\n5. After successful COMMIT:\n   a. Local event handlers are called\n   b. Enterprise events are published to Event Mesh\n```\n\n## Enterprise Event Enablement\n\n### Event Binding\n\nTo publish RAP events externally, create an event binding:\n\n```\nADT: New → Other → Event Binding\nName: Z_EVT_BIND_TRAVEL\n```\n\nEvent binding maps RAP events to enterprise event topics:\n\n| Property            | Value                            |\n| ------------------- | -------------------------------- |\n| **Namespace**       | `sap.s4.beh` or custom namespace |\n| **Business Object** | `ZR_Travel`                      |\n| **Event**           | `travel_created`                 |\n| **Topic**           | `sap/s4/beh/travel/created/v1`   |\n\n### Event Topic Structure\n\n```\n<namespace>/<business-object>/<event-name>/<version>\nExample: z.custom/travel/created/v1\n```\n\n### Channel Binding for SAP Event Mesh\n\n1. Create a **Communication Arrangement** for scenario `SAP_COM_0092` (Enterprise Event Enablement)\n2. Configure the Event Mesh service instance in BTP\n3. Maintain the channel in the **Enterprise Event Enablement** Fiori app\n4. Activate the event topic\n\n## Consuming Events\n\n### Local Event Consumption (Same System)\n\nRegister an event handler class:\n\n```abap\nCLASS zcl_travel_event_handler DEFINITION\n  PUBLIC FINAL CREATE PUBLIC.\n  PUBLIC SECTION.\n    \"Event handler method\n    METHODS on_travel_created\n      FOR ENTITY EVENT\n      travel_created FOR Travel~travel_created.\nENDCLASS.\n\nCLASS zcl_travel_event_handler IMPLEMENTATION.\n  METHOD on_travel_created.\n    \"React to travel creation\n    LOOP AT travel_created INTO DATA(ls_event).\n      \"Process event data\n      DATA(lv_travel_id) = ls_event-travel_id.\n      \"e.g., send notification, update related records\n    ENDLOOP.\n  ENDMETHOD.\nENDCLASS.\n```\n\n### External Event Consumption (via Event Mesh)\n\nExternal systems subscribe to topics via:\n\n- SAP Event Mesh webhooks\n- SAP Integration Suite\n- Custom applications using AMQP or REST APIs\n\n### Consuming Events from External Systems in ABAP\n\n```abap\n\"Using the event consumption model\n\"1. Create event consumption model in ADT\n\"   (imports AsyncAPI spec or defines events manually)\n\n\"2. Implement the event handler\nCLASS zcl_ext_event_handler DEFINITION\n  PUBLIC FINAL CREATE PUBLIC.\n  PUBLIC SECTION.\n    INTERFACES if_event_handler.\nENDCLASS.\n\nCLASS zcl_ext_event_handler IMPLEMENTATION.\n  METHOD if_event_handler~handle.\n    \"Parse event payload\n    DATA(lv_payload) = io_event->get_text( ).\n    \"Process the event\n  ENDMETHOD.\nENDCLASS.\n```\n\n## Event Patterns\n\n### Fire and Forget\n\n```\nProducer raises event → Event Mesh delivers → Consumer processes independently\n```\n\n- No response expected\n- Loose coupling between systems\n- Best for notifications, audit logging, data replication triggers\n\n### Event-Carried State Transfer\n\nInclude full entity data in event payload so consumers don't need to call back:\n\n```abap\nRAISE ENTITY EVENT zr_travel~travel_created\n  FROM VALUE #( ( %key = ls_travel-%key\n                  %param = CORRESPONDING #( ls_travel ) ) ).\n```\n\n### Event Sourcing\n\nRecord every state change as an event for full audit trail.\n\n## Best Practices\n\n1. **Define events for business-meaningful state changes**, not technical operations\n2. **Include sufficient data in event parameters** to avoid consumer callbacks\n3. **Use CDS abstract entities** for event parameter types (clear contract)\n4. **Raise events after validation** — only raise when the operation will succeed\n5. **Handle event processing failures** — consumers should be idempotent\n6. **Use meaningful topic naming** following SAP conventions\n7. **Version event topics** for backward compatibility (`/v1`, `/v2`)\n\n## Output Format\n\nWhen helping with eventing topics, structure responses as:\n\n```markdown\n## RAP Business Event Guidance\n\n### Scenario\n\n- Type: [Local event / Enterprise event]\n- Role: [Producer / Consumer]\n\n### Implementation\n\n[Event definition, raising, and consumption code]\n\n### Configuration\n\n[Event binding and communication arrangement setup]\n```\n\n## References\n\n- RAP Business Events Cheat Sheet: https://github.com/SAP-samples/abap-cheat-sheets/blob/main/08_RAP_Business_Events.md\n- Enterprise Event Enablement: https://help.sap.com/docs/abap-cloud/abap-rap/enterprise-event-enablement\n- SAP Event Mesh: https://help.sap.com/docs/event-mesh","tags":["rap","business","events","abap","skills","likweitan","agent-skills","sap"],"capabilities":["skill","source-likweitan","skill-rap-business-events","topic-abap","topic-agent-skills","topic-sap"],"categories":["abap-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/likweitan/abap-skills/rap-business-events","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add likweitan/abap-skills","source_repo":"https://github.com/likweitan/abap-skills","install_from":"skills.sh"}},"qualityScore":"0.456","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 12 github stars · SKILL.md body (8,366 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-24T01:03:16.886Z","embedding":null,"createdAt":"2026-04-23T13:03:45.458Z","updatedAt":"2026-04-24T01:03:16.886Z","lastSeenAt":"2026-04-24T01:03:16.886Z","tsv":"'/dmo/agency_id':280 '/dmo/currency_code':290 '/dmo/customer_id':283 '/dmo/description':285 '/dmo/total_price':288 '/dmo/travel_id':277 '/docs/abap-cloud/abap-rap/enterprise-event-enablement':1038 '/docs/event-mesh':1044 '/sap-samples/abap-cheat-sheets/blob/main/08_rap_business_events.md':1032 '/travel/created/v1':603 '/v1':984 '/v2':985 '0092':619 '1':69,505,610,771,914 '2':109,215,511,623,785,926 '3':133,517,632,937 '4':524,643,948 '5':530,960 '6':969 '7':977 'abap':40,66,108,118,305,389,455,660,764,765,882 'abstract':259,271,940 'accept':249,309,367 'action':507 'activ':644 'addit':295,453 'adt':562,777 'agenc':278,422,426 'alia':221 'amqp':754 'api':757 'app':642 'applic':752 'architectur':37,106 'arrang':614,1022 'asyncapi':779 'audit':857,910 'author':229 'avoid':934 'b':540 'back':881 'backward':982 'bdef':149 'bdl':205 'behavior':17,163,203,217 'best':854,912 'bind':26,88,176,552,561,566,570,573,605,1019 'bo':81 'btp':631 'busi':3,8,46,59,76,140,145,199,239,300,515,588,919,998,1026 'business-meaning':918 'call':539,880 'callback':936 'carri':864 'cds':258,265,939 'chang':904,922 'channel':604,635 'cheat':1028 'class':209,659,661,689,790,807 'clear':946 'cloud':41,67 'code':448,1016 'com':618 'commit':466,527,533 'communic':613,1021 'compat':983 'concept':143 'configur':624,1017 'consum':92,132,648,758,844,875,935,965,1009 'consumpt':32,91,189,652,734,769,774,1015 'contract':947 'convent':976 'correspond':326,896 'coupl':851 'creat':235,243,268,393,409,470,487,558,594,611,669,679,684,698,706,772,798 'create-travel':469,486 'creation':396,702 'cross':123 'cross-system':122 'currenc':289,444,447 'custom':281,428,432,586,751 'data':312,329,360,467,708,713,714,821,859,870,929 'declar':147,158 'defin':75,198,216,238,256,270,782,915 'definit':15,18,156,164,204,666,795,1012 'delet':237 'deliv':843 'deliveri':187 'descript':144,284,434,437 'determin':70 'driven':36,55,105 'e.g':723 'enabl':550,622,640,1035 'endclass':688,731,806,832 'endif':500 'endloop':729 'endmethod':385,449,501,730,831 'endusertext.label':266 'enterpris':11,48,120,182,541,548,578,620,638,1005,1033 'entiti':173,260,272,314,321,335,342,370,398,476,519,681,869,884,941 'etag':232 'event':4,9,12,14,20,25,28,31,35,47,49,54,60,63,77,83,89,93,100,104,114,121,126,128,131,138,141,146,155,165,174,175,179,183,188,197,200,240,241,247,250,253,263,269,291,301,364,371,387,399,460,477,502,520,523,536,542,546,549,551,556,560,565,572,576,579,592,597,608,621,626,639,646,649,651,657,664,673,682,692,710,712,720,733,736,745,759,768,773,783,788,793,804,810,815,819,825,830,833,840,841,863,872,885,899,907,916,931,943,950,962,979,991,999,1004,1006,1011,1018,1027,1034,1040 'event-carri':862 'event-driven':34,53,103 'event-travel':719 'everi':902 'evt':569 'exampl':600 'execut':514 'expect':849 'ext':792,809 'extern':95,186,190,557,732,738,761 'failur':964 'field':324,345 'final':668,797 'fiori':641 'fire':835 'flow':504 'follow':136,974 'forget':837 'formal':157 'format':987 'framework':526 'full':868,909 'get':826 'github.com':1031 'github.com/sap-samples/abap-cheat-sheets/blob/main/08_rap_business_events.md':1030 'goal':74 'guid':50,134 'guidanc':1000 'handl':961 'handler':23,86,303,512,537,658,665,674,693,789,794,805,811,816 'handler/saver':169 'happen':154 'help':5,989 'help.sap.com':1037,1043 'help.sap.com/docs/abap-cloud/abap-rap/enterprise-event-enablement':1036 'help.sap.com/docs/event-mesh':1042 'id':276,279,282,417,421,423,427,429,433,495,499,717,722 'idempot':968 'identifi':110 'implement':52,135,207,694,786,812,1010 'import':778 'includ':13,867,927 'independ':846 'initi':474 'instanc':231,629 'integr':30,97,749 'interfac':802 'io':824 'key':327,382,384,411,413,489,491,891,894 'local':113,319,340,535,650,1003 'locallastchangedat':234 'lock':227 'log':858 'logic':516 'loop':703 'loos':850 'ls':709,718,892,897 'lt':330,352,361,380,408 'lv':715,822 'maintain':633 'manag':206 'manual':784 'map':177,574 'markdown':996 'master':228,230,233 'meaning':920,971 'mesh':29,64,101,127,547,609,627,737,746,842,1041 'method':24,87,170,304,306,390,452,456,513,675,676,695,813 'mode':320,341 'model':770,775 'modifi':334,458 'name':567,973 'namespac':583,587 'need':878 'new':563 'notif':725,856 'object':589 'oper':510,925,957 'output':986 'overview':142 'param':414,492,895 'paramet':160,244,254,294,388,932,944 'pars':818 'pattern':38,56,139,834 'payload':264,298,820,823,873 'persist':223 'phase':464 'practic':913 'price':287,439,443 'process':503,711,828,845,963 'produc':129,838,1008 'properti':581 'public':667,670,671,796,799,800 'publish':196,544,554 'queue':521 'r':211 'rais':19,82,150,166,172,299,363,369,397,459,475,518,839,883,949,954,1013 'rap':2,7,22,45,58,80,85,137,178,509,525,555,575,997,1025 'rap-business-ev':1 'react':194,699 'read':310,313 'record':728,901 'refer':1024 'regist':655 'reject':252 'relat':727 'replic':860 'report':359,362 'respons':848,994 'rest':756 'result':328 'role':1007 'sap':27,62,99,607,617,744,748,975,1039 'sap.s4.beh':584 'sap/s4/beh/travel/created/v1':596 'save':454,457,463 'saver':451 'scenario':112,616,1001 'section':672,801 'send':724 'servic':628 'setup':1023 'sheet':1029 'signific':153 'skill' 'skill-rap-business-events' 'someth':152 'sourc':900 'source-likweitan' 'spec':780 'state':865,903,921 'status':333,346,357 'strict':214 'structur':255,599,993 'subscrib':192,740 'succeed':959 'success':395,532 'suffici':928 'suit':750 'system':96,119,124,191,654,739,762,853 'tab':226 'tabl':224 'technic':924 'text':827 'tki':354,356 'topic':184,580,595,598,647,742,972,980,992 'topic-abap' 'topic-agent-skills' 'topic-sap' 'total':286,438,442 'trail':911 'transact':529 'transfer':866 'travel':212,220,222,242,248,251,267,275,308,311,317,322,331,338,343,350,353,355,368,373,378,381,383,392,401,406,410,412,416,419,420,425,431,436,441,446,471,479,484,488,490,494,497,498,571,591,593,663,678,683,686,691,697,701,705,716,721,887,893,898 'travel-ag':424 'travel-curr':445 'travel-custom':430 'travel-descript':435 'travel-tot':440 'travel-travel':418,496 'travelcreatedevt':246,274 'trigger':167,508,861 'type':945,1002 'understand':102 'uniqu':213 'updat':236,332,344,726 'use':42,57,753,766,938,970 'user':44,72,506 'valid':952 'valu':348,376,404,415,482,493,582,890 'version':978 'via':125,171,735,743 'vs':130 'webhook':747 'within':115 'without':292 'workflow':68 'z':568 'z.custom':602 'z.custom/travel/created/v1':601 'zbp':210 'zcl':662,690,791,808 'zd':245,273 'zr':219,316,337,372,400,478,590,886 'ztravel':225 '~handle':817 '~travel_accepted':374 '~travel_created':402,480,687,888","prices":[{"id":"c8369e57-5f13-4fe5-ab92-0157606726b6","listingId":"c29eaed5-a754-4dae-99fd-40ea4071434e","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"likweitan","category":"abap-skills","install_from":"skills.sh"},"createdAt":"2026-04-23T13:03:45.458Z"}],"sources":[{"listingId":"c29eaed5-a754-4dae-99fd-40ea4071434e","source":"github","sourceId":"likweitan/abap-skills/rap-business-events","sourceUrl":"https://github.com/likweitan/abap-skills/tree/main/skills/rap-business-events","isPrimary":false,"firstSeenAt":"2026-04-23T13:03:45.458Z","lastSeenAt":"2026-04-24T01:03:16.886Z"}],"details":{"listingId":"c29eaed5-a754-4dae-99fd-40ea4071434e","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"likweitan","slug":"rap-business-events","github":{"repo":"likweitan/abap-skills","stars":12,"topics":["abap","agent-skills","sap"],"license":"mit","html_url":"https://github.com/likweitan/abap-skills","pushed_at":"2026-04-17T13:44:41Z","description":"Advance Agent Skills for ABAP Developers","skill_md_sha":"1c1569cf746433d72f4e9b9a8a71b8f802b710c2","skill_md_path":"skills/rap-business-events/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/likweitan/abap-skills/tree/main/skills/rap-business-events"},"layout":"multi","source":"github","category":"abap-skills","frontmatter":{"name":"rap-business-events","description":"Help with RAP business events and enterprise eventing including event definitions in behavior definitions, raising events from RAP handler methods, event bindings, SAP Event Mesh integration, event consumption, and event-driven architecture patterns in ABAP Cloud. Use when users ask about RAP business events, enterprise events, event mesh, eventing, raising events, event binding, event definition, event consumption, event-driven, asynchronous processing, event topics, or publish-subscribe in ABAP. Triggers include \"RAP event\", \"business event\", \"raise event\", \"event mesh\", \"event binding\", \"enterprise eventing\", \"event-driven\", \"publish event\", \"consume event\", or \"asynchronous event\"."},"skills_sh_url":"https://skills.sh/likweitan/abap-skills/rap-business-events"},"updatedAt":"2026-04-24T01:03:16.886Z"}}