ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

用 SAP 助手审查 ABAP 报表-Demo

用 SAP 助手审查 ABAP 报表-Demo 文章目录SAP 上线前代码审查实战[TOC]一、背景与目标二、登录 SAP 并读取源码三、快速定位程序四、逐段静态代码审查4.1 数据获取段get_data4.2 排序段4.3 ALV 初始化段重要 Bug五、结论与发现汇总Bug 漏洞六、上线前必须处理的事项七、用到了哪些 AI 技术如何实现的7.1 大语言模型LLM—— 核心推理引擎7.2 Function Calling / AgentReAct—— 决定下一步做什么7.3 MCPModel Context Protocol—— 标准化连通 SAP7.4 结构化输出 —— 结果可决策7.5 技术栈全景图7.6 一句话总结八、总结SAP 上线前代码审查实战Demo程序测试 用 SAP 助手审查 ZDEMO_002 报表揪出 5 个问题本文以实际案例演示如何借助SAP MCP 助手对即将上线的 ABAP 程序进行上线前代码审查从源码获取、静态分析、到问题定位与修复建议的全流程帮助开发/ Basis 在上线前把 Bug 和安全漏洞拦在门外。文章目录SAP 上线前代码审查实战[TOC]一、背景与目标二、登录 SAP 并读取源码三、快速定位程序四、逐段静态代码审查4.1 数据获取段get_data4.2 排序段4.3 ALV 初始化段重要 Bug五、结论与发现汇总Bug 漏洞六、上线前必须处理的事项七、用到了哪些 AI 技术如何实现的7.1 大语言模型LLM—— 核心推理引擎7.2 Function Calling / AgentReAct—— 决定下一步做什么7.3 MCPModel Context Protocol—— 标准化连通 SAP7.4 结构化输出 —— 结果可决策7.5 技术栈全景图7.6 一句话总结八、总结一、背景与目标程序ZDEMO_002是一个展示物料主数据MARA前 100 行并用 SALV ALV 输出的演示报表准备上线release / transport。上线前的代码审查目标自然语言描述检测 Bug潜在运行时报错、无效逻辑、对象未绑定导致短转储Short Dump等。检测漏洞权限校验缺失、敏感数据暴露、数据传输性等安全问题。是 cx_salv_msg否SELECT MARA 前100行入内表 gt_maraSORT by ERSDA 降序cl_salv_tablefactory异常?MESSAGE E, 流程继续设置函数/列/布局后续 go_alv 未绑定 → 潜在 SHORT DUMPgo_alv-display二、登录 SAP 并读取源码通过 SAP 助手连接到 DEV 系统客户端 100语言 ZH先确认连接与系统信息活动配置文件DEV||S4H可读写系统地址https://ip:端口随后通过对象搜索定位程序searchObject: PROG/P ZDEMO_002 → name : ZDEMO_002 → type : PROG/P → packageName: $TMP ← ⚠️ 关键隐患见后文 → description: Demo: Fetch 10 rows from MARA and show ALV并用getObjectSource读取完整源码共 190 行。三、快速定位程序项目结果对象名ZDEMO_002对象类型PROG/P可执行报表所属包$TMP⚠️功能读取 MARA 前 100 行SALV ALV 展示四、逐段静态代码审查4.1 数据获取段get_dataFORM get_data. SELECT matnr ersda ernam laeda aenam vpsta pstat lvorm mtart mbrsh matkl bismt FROM mara INTO TABLE gt_mara UP TO 100 ROWS. IF sy-subrc 0. MESSAGE No data found TYPE S. STOP. ENDIF. ENDFORM.审查点⚠️ “前 100 行”是无序的 TOP-N后面又做SORT与“按 ERSDA 倒序取前 100”语义不一致。⚠️ 硬编码消息文本No data found建议改文本元素。没有 AUTHORITY-CHECK直接读取展示物料主数据含创建人/修改人属越权风险。4.2 排序段FORM sort_data. SORT gt_mara BY ersda DESCENDING. ENDFORM.本身无错但与 4.1 的“TOP-N 无序”叠加导致最后展示的“前 100”并非真正的 ERSDA 最新 100 条建议在 SQL 中ORDER BY ersda DESCENDING。4.3 ALV 初始化段重要 BugFORM init_alv. TRY. cl_salv_tablefactory( IMPORTING r_salv_table go_alv CHANGING t_table gt_mara ). CATCH cx_salv_msg INTO DATA(lx_msg). MESSAGE lx_msg TYPE E. ← 仅报错流程未中止 ENDTRY. ENDFORM. FORM set_functions. go_funcs go_alv-get_functions( ). ← go_alv 若未绑定 → SHORT DUMP ENDFORM.问题当factory抛出异常时CATCH只弹出一条报错没有RETURN/STOP事件继续执行。随后set_functions、set_columns、set_layout等都会对一个未绑定的对象引用操作 →运行期短转储Short DumpCX_SY_REF_IS_INITIAL。建议CATCH cx_salv_msg INTO DATA(lx_msg). MESSAGE lx_msg TYPE I. 或 E RETURN. ← 中止初始化 ENDTRY. ... IF go_alv IS NOT BOUND. RETURN. ENDIF.五、结论与发现汇总Bug 漏洞No.问题级别说明1对象位于$TMP包无法传输上线 阻断$TMP是本地私有包无法建传输请求无法随请求发布。上线前必须迁到正式开发包。2缺少 AUTHORITY-CHECK权限校验 安全读取并展示敏感主数据MATNR/ERNAM/AENAM…无权限校验存在越权/泄露。3SALV factory 失败后go_alv未绑定 → 可能 SHORT DUMP BugCATCH 仅报错未中止后续流程对未绑定引用操作。4硬编码消息文本STOP语义不清 次要应用文本元素避免硬编码。5TOP-N 无序 冗余SORT 次要建议 SQLORDER BY ersda DESCENDING。六、上线前必须处理的事项迁移包将 ZDEMO_002 从$TMP迁到正式开发包Z 开头配置传输层。补权限校验在START-OF-SELECTION前加AUTHORITY-CHECK如S_TABU_DIS_TYPE或物料授权对象。修复异常处理factory异常后RETURN并校验go_alv是否已绑定。规范消息与 SQL文本元素化、ORDER BY前置排序。七、用到了哪些 AI 技术如何实现的这套上线前代码审查的完整流程本质上是SAP 系统 AI 大模型LLM Agent工具调用 MCP四层协作。逐层拆解7.1 大语言模型LLM—— 核心推理引擎所有看得懂 ABAP、能找 Bug、能写报告的能力都来自 LLM代码理解对 190 行 ABAP 源码做语义理解读懂字段、FORM、SELECT、SALV 调用链。Bug / 漏洞检测不是规则匹配而是基于模型掌握的大量 ABAP 最佳实践与 SALV 使用经验做跨语句推理例如从CATCH cx_salv_msg只报错不中断推出后续go_alv-get_functions( )会因引用未绑定而SHORT DUMP从读取 MARA 却无任何鉴权推出越权暴露风险从packageName $TMP结合传输机制常识推出无法建传输请求、不能直接上线。报告 / 文章生成把发现整理成结构化表格、mermaid 流程图并输出成可直接发布的 CSDN 文档。7.2 Function Calling / AgentReAct—— 决定下一步做什么LLM 本身无法访问 SAP必须靠Agent式的思考 → 选工具 → 看返回 → 再思考循环ReAct: Reason Act自动编排步骤模型决策调用的工具目的1先确认连哪个系统listConnectedSystems选择可读写的 DEV2先定位对象searchObject找到PROG/P类型的 ZDEMO_002顺带暴露包名$TMP3拉取完整源码getObjectSource分页读取 190 行4二次语法校验syntaxCheckCode验证代码可编译7.3 MCPModel Context Protocol—— 标准化连通 SAP作用把 SAP内置能力封装成一个个标准工具Tool“每个工具都有标准 JSON Schema入参/出参LLM 才能知道能调什么、传什么、返回什么”。优势即插即用、屏蔽底层协议。更换模型同一套工具依然复用封装后无需直接拼 ADT HTTP 细节。本案例中用到的 MCP 工具即getObjectSource、searchObject、syntaxCheckCode等。7.4 结构化输出 —— 结果可决策让模型**按表格 严重级别 修复建议**输出审查结果而不是一大段描述修复动作不自动执行而是把问题列给你由你选择修哪些保持人对上线变更的把控权。7.5 技术栈全景图大语言模型 LLM代码理解 · 检测推理 · 报告生成Agent 工具调用层Function Calling ReAct决定调什么工具MCP 标准化协议把 ADT / RFC / OData 封装成 ToolSAP 接入工具getObjectSource / searchObject / syntaxCheckCodeSAP 系统 DEV S4H7.6 一句话总结上面的审查不是凭空写的而是LLM听懂 ABAP 找 Bug Agent决定调哪个 SAP 工具 MCP把 ADT/RFC 封装成标准工具连上真实 SAP三者分工协作MCP 负责接上系统、Agent 负责决定动作、LLM 负责看懂代码、判断风险并给出建议。八、总结借助SAP 助手可以在上线前快速读取并审查 ABAP 对象源码识别运行期 Bug未绑定引用、异常未终止识别安全/权限漏洞缺 AUTHORITY-CHECK识别上线流程阻断点$TMP包无法传输。上线前代码审查 ≠ 只在代码看一遍更要关注权限校验、异常分支、数据敏感度、对象归属包可传输性。把上述 5 个问题在 release 前解决能显著降低生产事故与安全风险。 本文案例来源于一次真实的 ZDEMO_002 上线前审查演练文中代码行号与字段已做脱敏简化。感谢阅读希望对你的 SAP 上线前审查工作有帮助。有用请点赞·收藏·关注
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进