协作头脑风暴
brainstorming
在实现前澄清需求、探索设计选择,并形成清晰的开发方向。
sap-bapi-integration【开发与工程】SAP BAPI/RFC integration — BAPI discovery, transaction handling, BAPIRET2 patterns, 29 BAPI mappings across 9 modules (MM/SD/FI/QM/PP/WM/CO/HCM/BASIS). Use for BAPI calls, CSV→BAPI conversion, ZROUTER handler creation, or BAPI debugging.
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
Prerequisites: SAP RFC connection, ZROUTER_DISPATCH_FM (or direct BAPI), Python 3.11+ for repository scripts. Full BAPI tables: reference.md
1. BAPI_<OBJECT>_<ACTION> → call with parameters by VALUE
2. Check BAPIRET2-TYPE → NEVER trust sy-subrc
3. E or A in TYPE? → BAPI_TRANSACTION_ROLLBACK
4. Otherwise → BAPI_TRANSACTION_COMMIT EXPORTING wait = 'X'
python scripts/sap_router.py route --action CREATE_MATERIAL --module MM
# → "ZROUTER RFC"
# List BAPIs of a module
grep -A1 "CREATE_MATERIAL\|CREATE_PO\|CREATE_ORDER\|POST_DOCUMENT" scripts/xls_to_bapi.py
# Generate template
python scripts/xls_to_bapi.py template --output tmpl.csv --module MM --action CREATE_MATERIAL
# Convert data
python scripts/xls_to_bapi.py convert --input data.csv --module MM --action CREATE_MATERIAL
# Expected: JSON with BAPI_MATERIAL_SAVEDATA payload
DATA: ls_header TYPE bapimathead, ls_ret TYPE bapiret2, lv_matnr TYPE matnr,
lt_desc TYPE TABLE OF bapi_makt.
ls_header-material = 'M-001'.
ls_header-matl_type = 'FERT'.
ls_header-indust_sector = 'M'.
CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'
EXPORTING headdata = ls_header
IMPORTING return = ls_ret
material = lv_matnr
TABLES materialdescription = lt_desc.
" Check TYPE, NOT sy-subrc
IF ls_ret-type CA 'EA'.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'.
ENDIF.
python scripts/sap_router.py log-action \
--action CREATE_MATERIAL --module MM --status OK --details "MATNR: 000000000000001234"
python scripts/memory_manager.py verify --input MEMORY.md
| Campo | Meaning | Example |
|---|---|---|
| TYPE | S=OK, W=Warning, E=Error, A=Abort, I=Info | E |
| ID | Message class | M3 |
| NUMBER | Message number | 001 |
| MESSAGE | Translated text | "Material M-001 created" |
| MESSAGE_V1..V4 | Message variables | M-001, FERT, ... |
| PARAMETER | Field that caused the error | HEADDATA-MATERIAL |
| ROW | Table row (if applicable) | 3 |
See reference.md for production-grade BAPIRET2 loop code.
BAPI_MATERIAL_SAVEDATA (create/change material), BAPI_MATERIAL_GETALL (list), BAPI_PO_CREATE1 (create PO), BAPI_PO_CHANGE (change PO), BAPI_GOODSMVT_CREATE (goods movement). Template: xls_to_bapi.py template --module MM --action CREATE_PO
BAPI_SALESORDER_CREATEFROMDAT2 (create order), BAPI_SALESORDER_CHANGE (change), BAPI_BILLINGDOC_CREATEMULTIPLE (VF01 billing), BAPI_OUTB_DELIVERY_CREATE_SLS (VL01N delivery). Flow: TA (VA01) → LF (VL01N) → F2 (VF01).
BAPI_ACC_DOCUMENT_POST (post document), BAPI_ACC_DOCUMENT_REV_POST (reverse), BAPI_GL_GETACCOUNTSALDO (account balance).
CO_QM_INSPECTION_LOT_CREATE (inspection lot), BAPI_INSPOPER_RECORDRESULTS (record results).
BAPI_PRODORD_CREATE (production order), BAPI_PRODORDCONF_CREATE_TT (confirm), CS_BOM_EXPL_MAT_V2 (explode BOM), BAPI_ROUTING_GETDETAIL (routing details).
BAPI_GOODSMVT_CREATE (goods movement), L_TO_CREATE_SINGLE (transfer order).
BAPI_INTERNALORDER_CREATE (internal order), BAPI_CO_ALLOCACTUALS (allocate costs).
BAPI_EMPLOYEE_GETDATA (employee data), PA_INFOTYPE_INSERT (create infotype -- requires ENQUEUE).
TR_INSERT_REQUEST_WITH_TASKS (create transport), TR_RELEASE_REQUEST (release), TRINT_INSPECT_OBJECTS (analyze objects).
IF sy-subrc <> 0 to validate BAPI.
ls_ret-type CA 'EA'.BAPI_TRANSACTION_COMMIT, never COMMIT WORK directly. BAPI commit ensures synchronous update.
COMMIT WORK skips update task processing. Solution: BAPI_TRANSACTION_COMMIT EXPORTING wait = 'X'.CALL FUNCTION 'ENQUEUE_EPA' before insert.CO_QM_*, not BAPI_QM_*.
CO_QM_* for quality BAPIs.LTAP-VSOLA and LTAP-NLPLA fields.# Validate via sap_router
python scripts/sap_router.py log-action --action CREATE_MATERIAL --module MM --status OK
# Check memory
python scripts/memory_manager.py verify --input MEMORY.md
# ABAP: check BAPIRET2 after call
" LOOP AT lt_bapiret INTO ls_ret WHERE type CA 'EA'. → error found
" SE37 → BAPI_MATERIAL_SAVEDATA → Test → execute with test data
python scripts/template_repo.py resolve --template MM_CREATE_MATERIAL ...python scripts/xls_to_bapi.py template --module <MOD> --action <ACT>