SAP ECC User Exit Implementation Checklist (CMOD and SMOD)
This checklist covers finding, choosing and implementing a user exit in SAP ECC 6.0 with SMOD and CMOD, from locating the right exit to activation and transport. It also helps decide when a BAdI, a Business Transaction Event or an enhancement point is the better hook.
0 of 29 items complete
4 critical items still open - these are the highest-risk gaps.
Find
Decide
Implement
Activate and transport
Test and document
Critical items are where most user exit tickets come from: an exit that is never reached, an enhancement already used in another project, an inactive project and commits inside exits.
Need an enhancement inventory?
We can list active CMOD projects, BAdI implementations and form exits in your ECC system and map them for your next upgrade.
Optional. The tool and every export work without this. No spam.
How customer exits work in ECC
SAP delivers enhancements in SMOD. Each enhancement groups components: function exits (called with CALL CUSTOMER-FUNCTION 'nnn', which resolves to function module EXIT_<program>_nnn), screen exits, menu exits and table enhancements through CI_ includes. You use them by creating a project in CMOD, assigning one or more enhancements and writing code in the ZX includes inside the exit function modules. An enhancement can be assigned to only one project, so two teams cannot each own a separate project for the same exit. SAP stores enhancement components in MODSAP and project assignments in MODACT.
- SMOD: SAP enhancement definitions (display only for customers)
- CMOD: customer projects that implement them
- Code goes in ZX includes, so it survives upgrades without SPAU modification adjustment
User exit vs BAdI vs BTE
Form user exits are FORM routines in SAP includes such as MV45AFZZ in sales orders; changing them is a modification and needs an SSCR object key. Customer exits through CMOD need no key and survive upgrades cleanly, but allow only one project per enhancement. Classic and kernel BAdIs are object-oriented, can have several implementations and filters, and are SAP's preferred approach since the 2000s. Business Transaction Events, maintained in FIBF, are the FI equivalent with process and publish-and-subscribe interfaces. When a BAdI or BTE exists at the same point, use it.
Worked example: finding an exit for VA01
System > Status in VA01 shows program SAPMV45A, package VA. Searching SMOD by package VA or searching SAPMV45A for CALL CUSTOMER-FUNCTION lists candidate function exits, while the form routines in MV45AFZZ (such as USEREXIT_SAVE_DOCUMENT_PREPARE) are the classic sales order user exits. For a check on save, the form exit is common but needs an SSCR key; a BAdI found with the CL_EXITHANDLER breakpoint may avoid that. Whatever you pick, prove with a breakpoint that the hook is reached with the data you need.
Common mistakes
Writing code in the include but forgetting to activate the CMOD project. Assigning an enhancement that another project already uses, then wondering why the project will not save. Issuing COMMIT WORK or popups inside an exit called during save, which breaks the logical unit of work. Leaving code unguarded so it runs for every company code. Not transporting the project and the include together.
Frequently Asked Questions
How do I find a user exit in SAP?
Get the program from System > Status, find its package, then search SMOD by package or SE84 under Customer Exits. Search the program for CALL CUSTOMER-FUNCTION to see exits actually called. For BAdIs, set a breakpoint in CL_EXITHANDLER=>GET_INSTANCE. Confirm with a breakpoint that the exit fires when you need it.
How do I activate a user exit in SAP?
In CMOD, open your project, check that the enhancement is assigned and the components (ZX include, screens) are active, then press Activate project. The exit runs only when the project is active. Transport the project and include together and check the project status in the target system.
What is the difference between a user exit and a BAdI?
A customer exit is a function module hook implemented once per enhancement through a CMOD project. A BAdI is an object-oriented hook that can have several implementations, filters and clean interfaces. Form user exits are routines in SAP includes and count as modifications. Prefer a BAdI or BTE when one exists.
Can two CMOD projects use the same enhancement?
No. An SMOD enhancement can be assigned to only one CMOD project at a time. If another project already holds it, add your code to that project's include and coordinate with its owner, or move the logic into a shared Z function or class called from the single include.
If you want developers to ask your ECC system which exits and enhancements are active, and where, in plain English on your own servers, we can set that up.
Related Tools
SAP ECC IDoc Extension and Custom Segment Checklist (WE31, WE30, WE82)
Design, build, fill, configure and test a custom IDoc segment in SAP ECC: WE31, WE30, WE82, user exits, WE20 partner profiles and WE19.
SAPSAP ECC Background Job Failure Troubleshooting Checklist (SM37, ST22, SM21)
Work through a failed, stuck or never-started SAP ECC background job in order: logs, scheduling errors, runtime failures, debugging and safe cancellation.
SAPSAP ECC Obsolete Transactions and S/4HANA Replacements
A lookup table of common ECC transaction codes and the transaction or app that replaces them in S/4HANA, for training and role design.
More Developer Tools tools
See all- SAP ECC Enhancement Transactions and Exit Tables Reference (SMOD, CMOD, SE18, MODSAP, SXC_EXIT)
- SAP ECC Data Dictionary and Repository Tables Reference (DD02L, DD03L, T100, E070, TSTC)
- SAP ECC ABAP Runtime Errors (ST22 Dumps) and Error Log Transactions Reference
- SAP ECC Background Job History ABAP Query Generator (TBTCO + TBTCP)
- SAP ECC Background Job Creation ABAP Generator (JOB_OPEN, SUBMIT, JOB_CLOSE)
- SAP ECC IDoc Segment Data Reader ABAP Generator (EDIDC, EDID4, EDIDS)
- SAP ECC Custom Inbound IDoc Function Module Skeleton Generator
- SAP ECC BAPI_SALESORDER_CHANGE ABAP Generator
- SAP ECC BAPI_PO_CHANGE ABAP Generator
Keep exploring
Free tools
- SAP ECC Enhancement Transactions and Exit Tables Reference (SMOD, CMOD, SE18, MODSAP, SXC_EXIT)Lookup table of the transactions, tables and classes used to find, implement and audit customer exits, BAdIs and enhancement implementations on SAP ECC 6.0.
- SAP ECC 2027 Maintenance Exit Path AssessmentTwelve scored questions on EHP level, database, custom code, CVI, add-ons, budget and contract appetite that map your SAP ECC 6.0 system to one of four maintenance exit paths, with the dates that apply.
- SAP ECC SD User Exit Forms Reference (MV45AFZZ, RV60AFZZ, MV50AFZ1)Lookup table of the classic SD user exit FORM routines for sales orders, deliveries and billing on SAP ECC 6.0: include, transaction, when it fires, structures available and the usual gotcha.
ERP fixes and how-tos
- SAP PP and MM Enhancement Examples: User Exits, BAdIs and Enhancement SpotsPractical SAP PP and MM enhancement examples: user exits, BAdIs such as ME_PROCESS_PO_CUST and WORKORDER_UPDATE, how to find them and a PO validation sketch.
- How to add AI to SAP ECC 6.0 on-prem without moving data to a cloudReference architecture for a private on-prem AI assistant on SAP ECC 6.0: RFC and BAPI reads, SLT replica, retrieval index, local LLM, permission mirroring.
- SAP QM QA32: user exits, enhancements and standard lot reportsOptions to customise the QA32 inspection lot list, how to find user exits and BAdIs, and the standard SAP QM lot and results reports you can use instead.
AI on your ERP
- Get AI Value From SAP ECC Now, and Use It to De-Risk the Move to S/4HANASAP ECC 6.0 mainstream maintenance ends in 2027. Add AI value on ECC now, using its existing BAPIs and IDocs, and use it to de-risk the S/4HANA migration.
- SAP AI Consulting for On-Prem and Private DeploymentsWhat to demand from an SAP AI consulting partner when data must stay on-prem or private: OData/BAPI mechanics, Joule vs. private LLM, and buyer questions.
Integrations
- How to add an AI chatbot to SAP ECC 6.0Add an AI chatbot to SAP ECC 6.0 for planners, buyers and customers: grounded in live data, role-aware, embeddable in portals, and able to run fully on-prem.
- How to use ChatGPT with SAP ECC 6.0Using ChatGPT with SAP ECC 6.0: custom GPT actions, exports versus live access, an OData or MCP bridge, enterprise data controls, and when a private model is safer.