{"id":"ebbfe8b4-755c-412d-a053-2acae608da72","shortId":"7Z7Ddw","kind":"skill","title":"badi-enhancement","tagline":"Help with BAdI (Business Add-In) development and the ABAP enhancement framework including new BAdIs, fallback classes, filter-based BAdIs, enhancement spots, enhancement implementations, key user extensibility, classic BAdIs, and the new enhancement framework. Use when users ask ","description":"# BAdI & Enhancement Framework\n\nGuide for using BAdIs (Business Add-Ins) and the ABAP enhancement framework to extend SAP standard functionality.\n\n## Workflow\n\n1. **Determine the user's goal**:\n   - Finding an existing BAdI to implement\n   - Creating a custom BAdI definition\n   - Implementing a BAdI\n   - Understanding classic vs. new enhancement framework\n   - Using key user extensibility\n   - Extending standard code via enhancement spots\n\n2. **Identify the framework**:\n   - New BAdI framework (preferred, ABAP Cloud compatible)\n   - Classic BAdI framework (legacy, `SE18`/`SE19`)\n   - Enhancement spots and implementations\n   - Key user extensibility (no-code)\n\n3. **Guide implementation** following best practices\n\n## BAdI Framework Overview\n\n### New vs. Classic BAdIs\n\n| Aspect               | New BAdI Framework              | Classic BAdI Framework |\n| -------------------- | ------------------------------- | ---------------------- |\n| **Transactions**     | ADT or `SE18`/`SE19`            | `SE18`/`SE19`          |\n| **Enhancement Spot** | Required container              | Not applicable         |\n| **Multiple Use**     | Always multiple-use             | Configurable           |\n| **Filter**           | Filter types supported          | Filter values          |\n| **Fallback Class**   | Supported                       | Not available          |\n| **ABAP Cloud**       | Supported (released BAdIs only) | Not available          |\n| **Recommendation**   | Use for all new development     | Maintain existing only |\n\n## Creating a Custom BAdI\n\n### Step 1: Create Enhancement Spot\n\n```\nADT: New → Other ABAP Repository Object → Enhancements → Enhancement Spot\nName: Z_ENH_SPOT_TRAVEL\n```\n\n### Step 2: Define the BAdI Interface\n\n```abap\nINTERFACE zif_badi_travel_validate\n  PUBLIC.\n  METHODS validate\n    IMPORTING\n      is_travel       TYPE zstravel\n    CHANGING\n      ct_messages     TYPE bapiret2_t\n    RAISING\n      cx_badi_not_implemented.\nENDINTERFACE.\n```\n\n### Step 3: Define the BAdI in Enhancement Spot\n\nIn the enhancement spot, add a BAdI definition:\n\n| Property           | Value                                 |\n| ------------------ | ------------------------------------- |\n| **BAdI Name**      | `ZBADI_TRAVEL_VALIDATE`               |\n| **Interface**      | `ZIF_BADI_TRAVEL_VALIDATE`            |\n| **Multiple Use**   | Yes (allows multiple implementations) |\n| **Fallback Class** | `ZCL_BADI_TRAVEL_FALLBACK` (optional) |\n\n### Step 4: Create Fallback Class (Optional)\n\n```abap\nCLASS zcl_badi_travel_fallback DEFINITION\n  PUBLIC FINAL CREATE PUBLIC.\n  PUBLIC SECTION.\n    INTERFACES zif_badi_travel_validate.\nENDCLASS.\n\nCLASS zcl_badi_travel_fallback IMPLEMENTATION.\n  METHOD zif_badi_travel_validate~validate.\n    \"Default behavior when no implementation is active\n  ENDMETHOD.\nENDCLASS.\n```\n\n### Step 5: Call the BAdI in Your Code\n\n```abap\n\"Get BAdI handle\nDATA lo_badi TYPE REF TO zif_badi_travel_validate.\n\nGET BADI lo_badi.\n\n\"Call BAdI — loops through all active implementations\nCALL BADI lo_badi->validate\n  EXPORTING is_travel   = ls_travel\n  CHANGING  ct_messages = lt_messages.\n```\n\n### With Filters\n\n```abap\n\"Define BAdI with filter\n\"In Enhancement Spot: add filter type COUNTRY (type LAND1)\n\n\"Get BAdI with filter\nGET BADI lo_badi\n  FILTERS country = ls_travel-country.\n\nCALL BADI lo_badi->validate\n  EXPORTING is_travel   = ls_travel\n  CHANGING  ct_messages = lt_messages.\n```\n\n## Implementing an Existing BAdI\n\n### Step 1: Find the BAdI\n\nMethods to find a BAdI:\n\n- **ADT search**: Search for BAdI name or enhancement spot\n- **Transaction `SE18`**: Browse BAdI definitions\n- **Breakpoint on `GET BADI`**: Set breakpoint at `CL_BADI_INTERNAL_FACTORY=>GET_BADI` to find BAdIs called during a process\n- **Documentation**: Check SAP documentation or community for BAdI names\n\n### Step 2: Create Enhancement Implementation\n\n```\nADT: New → Other ABAP Repository Object → Enhancements → Enhancement Implementation\nName: Z_ENH_IMPL_TRAVEL_CHECK\nEnhancement Spot: Z_ENH_SPOT_TRAVEL (or SAP's spot)\n```\n\n### Step 3: Create BAdI Implementation Class\n\n```abap\nCLASS zcl_badi_impl_travel_check DEFINITION\n  PUBLIC FINAL CREATE PUBLIC.\n  PUBLIC SECTION.\n    INTERFACES zif_badi_travel_validate.\nENDCLASS.\n\nCLASS zcl_badi_impl_travel_check IMPLEMENTATION.\n  METHOD zif_badi_travel_validate~validate.\n    \"Custom validation logic\n    IF is_travel-begin_date < cl_abap_context_info=>get_system_date( ).\n      APPEND VALUE #(\n        type       = 'E'\n        id         = 'Z_TRAVEL'\n        number     = '001'\n        message_v1 = 'Travel begin date must be in the future'\n      ) TO ct_messages.\n    ENDIF.\n  ENDMETHOD.\nENDCLASS.\n```\n\n## BAdIs in ABAP Cloud / RAP\n\nIn ABAP for Cloud Development, BAdIs follow a specific pattern:\n\n### Released BAdIs\n\n- Only SAP-released BAdIs can be implemented\n- Search for released BAdIs in ADT: `api:badi`\n- Common in RAP scenarios for extending standard RAP BOs\n\n### RAP BAdI Pattern\n\n```abap\n\"BAdI for extending SAP Fiori apps / RAP BOs\n\"Implement the released BAdI interface\nCLASS zcl_my_rap_badi DEFINITION\n  PUBLIC FINAL CREATE PUBLIC.\n  PUBLIC SECTION.\n    INTERFACES if_some_released_badi.\nENDCLASS.\n\nCLASS zcl_my_rap_badi IMPLEMENTATION.\n  METHOD if_some_released_badi~some_method.\n    \"Custom logic\n  ENDMETHOD.\nENDCLASS.\n```\n\n### Dynamic BAdI Calls\n\n```abap\n\"Dynamic GET BADI with BAdI name in variable\nDATA lo_badi TYPE REF TO cl_badi_base.\nDATA(lv_badi_name) = 'ZBADI_MY_BADI'.\n\nGET BADI lo_badi TYPE (lv_badi_name).\n\n\"Dynamic CALL BADI with method name in variable\nCALL BADI lo_badi->('VALIDATE')\n  EXPORTING is_data = ls_data.\n```\n\n## Enhancement Spots and Implementations\n\nBeyond BAdIs, the enhancement framework supports:\n\n### Explicit Enhancement Points\n\nSAP defines explicit points in standard code where custom logic can be inserted:\n\n```abap\n\"In SAP standard code:\nENHANCEMENT-POINT z_enh_point SPOTS z_enh_spot.\n\n\"In your enhancement implementation:\nENHANCEMENT z_my_enhancement.\n  \"Your custom code here\n  IF lv_condition = abap_true.\n    \"Custom logic\n  ENDIF.\nENDENHANCEMENT.\n```\n\n### Explicit Enhancement Sections\n\n```abap\n\"SAP code with replaceable section:\nENHANCEMENT-SECTION z_section SPOTS z_enh_spot.\n  \"Default code (can be replaced)\n  lv_result = lv_a + lv_b.\nEND-ENHANCEMENT-SECTION.\n\n\"Your replacement:\nENHANCEMENT z_my_section_impl.\n  \"Custom replacement code\n  lv_result = lv_a * lv_b.\nENDENHANCEMENT.\n```\n\n## Key User Extensibility\n\nNo-code/low-code extension capabilities available via SAP Fiori:\n\n| Capability                    | Description                                 |\n| ----------------------------- | ------------------------------------------- |\n| **Custom Fields**             | Add fields to standard business objects     |\n| **Custom Logic**              | Add validation/determination logic via BRF+ |\n| **Custom CDS Views**          | Create simple analytical views              |\n| **Custom Business Objects**   | Create simple transactional objects         |\n| **Custom Analytical Queries** | Build queries on existing CDS views         |\n\n## Best Practices\n\n1. **Prefer new BAdI framework** over classic BAdIs\n2. **Use filters** to scope implementations to specific contexts\n3. **Implement fallback classes** for default behavior\n4. **Keep implementations focused** — one concern per implementation\n5. **Document the BAdI** with clear interface documentation\n6. **Test implementations** independently using ABAP Unit\n7. **In ABAP Cloud**, only implement released BAdIs\n\n## Output Format\n\nWhen helping with BAdI/enhancement topics, structure responses as:\n\n```markdown\n## BAdI / Enhancement Guidance\n\n### Framework\n\n- Type: [New BAdI / Classic BAdI / Enhancement Spot / Key User]\n- Context: [ABAP Cloud / Standard ABAP]\n\n### Implementation\n\n[Step-by-step with code examples]\n\n### Testing\n\n[How to verify the enhancement works]\n```\n\n## References\n\n- BAdI Cheat Sheet: https://github.com/SAP-samples/abap-cheat-sheets/blob/main/35_BAdIs.md\n- Enhancement Framework: https://help.sap.com/docs/abap-cloud/abap-development-tools-user-guide/enhancement\n- Key User Extensibility: https://help.sap.com/docs/sap-s4hana-cloud/extensibility","tags":["badi","enhancement","abap","skills","likweitan","agent-skills","sap"],"capabilities":["skill","source-likweitan","skill-badi-enhancement","topic-abap","topic-agent-skills","topic-sap"],"categories":["abap-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/likweitan/abap-skills/badi-enhancement","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,149 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.405Z","embedding":null,"createdAt":"2026-04-23T13:03:44.972Z","updatedAt":"2026-04-24T01:03:16.405Z","lastSeenAt":"2026-04-24T01:03:16.405Z","tsv":"'/docs/abap-cloud/abap-development-tools-user-guide/enhancement':1023 '/docs/sap-s4hana-cloud/extensibility':1029 '/low-code':864 '/sap-samples/abap-cheat-sheets/blob/main/35_badis.md':1018 '001':582 '1':66,202,437,913 '2':102,221,490,921 '3':129,253,520,930 '4':294,937 '5':340,945 '6':953 '7':960 'abap':14,57,110,180,209,226,299,347,389,497,525,568,601,605,644,695,772,802,811,958,962,993,996 'activ':336,370 'add':9,53,264,397,875,883 'add-in':8,52 'adt':150,206,446,494,629 'allow':283 'alway':164 'analyt':893,903 'api':630 'app':650 'append':574 'applic':161 'ask':43 'aspect':142 'avail':179,187,867 'b':836,856 'badi':2,6,19,25,34,44,50,75,81,85,107,114,135,141,144,147,184,200,224,229,248,256,266,270,277,289,302,314,320,326,343,349,353,358,362,364,366,373,375,391,404,408,410,418,420,435,440,445,450,458,463,468,472,475,487,522,528,541,547,554,599,609,615,620,627,631,642,645,656,662,674,680,686,693,698,700,706,711,715,719,721,723,726,730,737,739,751,916,920,948,967,979,985,987,1013 'badi-enhanc':1 'badi/enhancement':973 'bapiret2':244 'base':24,712 'begin':565,586 'behavior':331,936 'best':133,911 'beyond':750 'bos':640,652 'breakpoint':460,465 'brf':887 'brows':457 'build':905 'busi':7,51,879,896 'call':341,365,372,417,476,694,729,736 'capabl':866,871 'cds':889,909 'chang':240,382,427 'cheat':1014 'check':481,508,531,550 'cl':467,567,710 'class':21,176,287,297,300,318,524,526,545,658,676,933 'classic':33,87,113,140,146,919,986 'clear':950 'cloud':111,181,602,607,963,994 'code':98,128,346,765,776,797,813,827,850,863,1003 'common':632 'communiti':485 'compat':112 'concern':942 'condit':801 'configur':168 'contain':159 'context':569,929,992 'countri':400,412,416 'creat':78,197,203,295,308,491,521,535,666,891,898 'ct':241,383,428,594 'custom':80,199,558,688,767,796,804,848,873,881,888,895,902 'cx':247 'data':351,704,713,743,745 'date':566,573,587 'default':330,826,935 'defin':222,254,390,760 'definit':82,267,305,459,532,663 'descript':872 'determin':67 'develop':11,193,608 'document':480,483,946,952 'dynam':692,696,728 'e':577 'end':838 'end-enhancement-sect':837 'endclass':317,338,544,598,675,691 'endenhanc':807,857 'endif':596,806 'endinterfac':251 'endmethod':337,597,690 'enh':217,505,512,781,785,824 'enhanc':3,15,26,28,38,45,58,90,100,119,156,204,212,213,258,262,395,453,492,500,501,509,746,753,757,778,789,791,794,809,818,839,843,980,988,1010,1019 'enhancement-point':777 'enhancement-sect':817 'exampl':1004 'exist':74,195,434,908 'explicit':756,761,808 'export':377,422,741 'extend':61,96,637,647 'extens':32,95,125,860,865,1026 'factori':470 'fallback':20,175,286,291,296,304,322,932 'field':874,876 'filter':23,169,170,173,388,393,398,406,411,923 'filter-bas':22 'final':307,534,665 'find':72,438,443,474 'fiori':649,870 'focus':940 'follow':132,610 'format':969 'framework':16,39,46,59,91,105,108,115,136,145,148,754,917,982,1020 'function':64 'futur':592 'get':348,361,403,407,462,471,571,697,720 'github.com':1017 'github.com/sap-samples/abap-cheat-sheets/blob/main/35_badis.md':1016 'goal':71 'guid':47,130 'guidanc':981 'handl':350 'help':4,971 'help.sap.com':1022,1028 'help.sap.com/docs/abap-cloud/abap-development-tools-user-guide/enhancement':1021 'help.sap.com/docs/sap-s4hana-cloud/extensibility':1027 'id':578 'identifi':103 'impl':506,529,548,847 'implement':29,77,83,122,131,250,285,323,334,371,432,493,502,523,551,623,653,681,749,790,926,931,939,944,955,965,997 'import':235 'in':54 'includ':17 'independ':956 'info':570 'insert':771 'interfac':225,227,275,312,539,657,670,951 'intern':469 'keep':938 'key':30,93,123,858,990,1024 'land1':402 'legaci':116 'lo':352,363,374,409,419,705,722,738 'logic':560,689,768,805,882,885 'loop':367 'ls':380,413,425,744 'lt':385,430 'lv':714,725,800,831,833,835,851,853,855 'maintain':194 'markdown':978 'messag':242,384,386,429,431,583,595 'method':233,324,441,552,682,732 'multipl':162,166,280,284 'multiple-us':165 'must':588 'name':215,271,451,488,503,701,716,727,733 'new':18,37,89,106,138,143,192,207,495,915,984 'no-cod':126,861 'number':581 'object':211,499,880,897,901 'one':941 'option':292,298 'output':968 'overview':137 'pattern':613,643 'per':943 'point':758,762,779,782 'practic':134,912 'prefer':109,914 'process':479 'properti':268 'public':232,306,309,310,533,536,537,664,667,668 'queri':904,906 'rais':246 'rap':603,634,639,641,651,661,679 'recommend':188 'ref':355,708 'refer':1012 'releas':183,614,619,626,655,673,685,966 'replac':815,830,842,849 'repositori':210,498 'requir':158 'respons':976 'result':832,852 'sap':62,482,516,618,648,759,774,812,869 'sap-releas':617 'scenario':635 'scope':925 'se18':117,152,154,456 'se19':118,153,155 'search':447,448,624 'section':311,538,669,810,816,819,821,840,846 'set':464 'sheet':1015 'simpl':892,899 'skill' 'skill-badi-enhancement' 'source-likweitan' 'specif':612,928 'spot':27,101,120,157,205,214,218,259,263,396,454,510,513,518,747,783,786,822,825,989 'standard':63,97,638,764,775,878,995 'step':201,220,252,293,339,436,489,519,999,1001 'step-by-step':998 'structur':975 'support':172,177,182,755 'system':572 'test':954,1005 'topic':974 'topic-abap' 'topic-agent-skills' 'topic-sap' 'transact':149,455,900 'travel':219,230,237,273,278,290,303,315,321,327,359,379,381,415,424,426,507,514,530,542,549,555,564,580,585 'travel-begin':563 'travel-countri':414 'true':803 'type':171,238,243,354,399,401,576,707,724,983 'understand':86 'unit':959 'use':40,49,92,163,167,189,281,922,957 'user':31,42,69,94,124,859,991,1025 'v1':584 'valid':231,234,274,279,316,328,360,376,421,543,556,559,740 'validation/determination':884 'valu':174,269,575 'variabl':703,735 'verifi':1008 'via':99,868,886 'view':890,894,910 'vs':88,139 'work':1011 'workflow':65 'yes':282 'z':216,504,511,579,780,784,792,820,823,844 'zbadi':272,717 'zcl':288,301,319,527,546,659,677 'zif':228,276,313,325,357,540,553 'zstravel':239 '~some_method':687 '~validate':329,557","prices":[{"id":"cea43945-cd5d-474c-8f0c-69c346cfe6bf","listingId":"ebbfe8b4-755c-412d-a053-2acae608da72","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:44.972Z"}],"sources":[{"listingId":"ebbfe8b4-755c-412d-a053-2acae608da72","source":"github","sourceId":"likweitan/abap-skills/badi-enhancement","sourceUrl":"https://github.com/likweitan/abap-skills/tree/main/skills/badi-enhancement","isPrimary":false,"firstSeenAt":"2026-04-23T13:03:44.972Z","lastSeenAt":"2026-04-24T01:03:16.405Z"}],"details":{"listingId":"ebbfe8b4-755c-412d-a053-2acae608da72","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"likweitan","slug":"badi-enhancement","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":"ed07c8320e1f5d02755e477441742694de03c92f","skill_md_path":"skills/badi-enhancement/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/likweitan/abap-skills/tree/main/skills/badi-enhancement"},"layout":"multi","source":"github","category":"abap-skills","frontmatter":{"name":"badi-enhancement","description":"Help with BAdI (Business Add-In) development and the ABAP enhancement framework including new BAdIs, fallback classes, filter-based BAdIs, enhancement spots, enhancement implementations, key user extensibility, classic BAdIs, and the new enhancement framework. Use when users ask about BAdI, BAdIs, Business Add-In, enhancement spot, enhancement implementation, enhancement framework, BAdI filter, BAdI fallback, BAdI definition, BAdI implementation, key user extensibility, custom logic injection, enhancement point, implicit enhancement, explicit enhancement, or extending SAP standard code. Triggers include \"create a BAdI\", \"implement a BAdI\", \"enhancement spot\", \"find a BAdI\", \"BAdI filter\", \"fallback class\", \"key user extensibility\", \"extend standard\", or \"enhancement framework\"."},"skills_sh_url":"https://skills.sh/likweitan/abap-skills/badi-enhancement"},"updatedAt":"2026-04-24T01:03:16.405Z"}}