news 2026/9/4 8:02:30

用 SAP 助手审查 ABAP 报表-Demo

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
用 SAP 助手审查 ABAP 报表-Demo

文章目录

  • SAP 上线前代码审查实战:
    • @[TOC]
    • 一、背景与目标
    • 二、登录 SAP 并读取源码
    • 三、快速定位程序
    • 四、逐段静态代码审查
      • 4.1 数据获取段(get_data)
      • 4.2 排序段
      • 4.3 ALV 初始化段(重要 Bug)
    • 五、结论与发现汇总(Bug + 漏洞)
    • 六、上线前必须处理的事项
    • 七、用到了哪些 AI 技术?如何实现的
      • 7.1 大语言模型(LLM)—— 核心推理引擎
      • 7.2 Function Calling / Agent(ReAct)—— 决定"下一步做什么"
      • 7.3 MCP(Model Context Protocol)—— 标准化连通 SAP
      • 7.4 结构化输出 —— 结果可决策
      • 7.5 技术栈全景图
      • 7.6 一句话总结
    • 八、总结

SAP 上线前代码审查实战:

Demo程序测试: 用 SAP 助手审查 ZDEMO_002 报表,揪出 5 个问题

本文以实际案例演示如何借助SAP MCP 助手对即将上线的 ABAP 程序进行上线前代码审查,从源码获取、静态分析、到问题定位与修复建议的全流程,帮助开发/ Basis 在上线前把 Bug 和安全漏洞拦在门外。


文章目录

  • SAP 上线前代码审查实战:
    • @[TOC]
    • 一、背景与目标
    • 二、登录 SAP 并读取源码
    • 三、快速定位程序
    • 四、逐段静态代码审查
      • 4.1 数据获取段(get_data)
      • 4.2 排序段
      • 4.3 ALV 初始化段(重要 Bug)
    • 五、结论与发现汇总(Bug + 漏洞)
    • 六、上线前必须处理的事项
    • 七、用到了哪些 AI 技术?如何实现的
      • 7.1 大语言模型(LLM)—— 核心推理引擎
      • 7.2 Function Calling / Agent(ReAct)—— 决定"下一步做什么"
      • 7.3 MCP(Model Context Protocol)—— 标准化连通 SAP
      • 7.4 结构化输出 —— 结果可决策
      • 7.5 技术栈全景图
      • 7.6 一句话总结
    • 八、总结

一、背景与目标

程序ZDEMO_002是一个展示物料主数据(MARA)前 100 行并用 SALV ALV 输出的演示报表,准备上线(release / transport)。上线前的代码审查目标:
自然语言描述

  1. 检测 Bug:潜在运行时报错、无效逻辑、对象未绑定导致短转储(Short Dump)等。
  2. 检测漏洞:权限校验缺失、敏感数据暴露、数据传输性等安全问题。

是 cx_salv_msg

SELECT MARA 前100行

入内表 gt_mara

SORT by ERSDA 降序

cl_salv_table=>factory

异常?

MESSAGE E, 流程继续

设置函数/列/布局

后续 go_alv 未绑定 → 潜在 SHORT DUMP

go_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_data)

FORM 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 初始化段(重要 Bug)

FORM init_alv. TRY. cl_salv_table=>factory( 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_functionsset_columnsset_layout等都会对一个未绑定的对象引用操作 →运行期短转储(Short Dump,CX_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

六、上线前必须处理的事项

  1. 迁移包:将 ZDEMO_002 从$TMP迁到正式开发包(Z 开头,配置传输层)。
  2. 补权限校验:在START-OF-SELECTION前加AUTHORITY-CHECK(如S_TABU_DIS_TYPE或物料授权对象)。
  3. 修复异常处理factory异常后RETURN,并校验go_alv是否已绑定。
  4. 规范消息与 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 / Agent(ReAct)—— 决定"下一步做什么"

LLM 本身无法访问 SAP,必须靠"Agent"式的思考 → 选工具 → 看返回 → 再思考循环(ReAct: Reason + Act)自动编排:

步骤模型决策调用的工具目的
1先确认连哪个系统listConnectedSystems选择可读写的 `DEV
2先定位对象searchObject找到PROG/P类型的 ZDEMO_002,顺带暴露包名$TMP
3拉取完整源码getObjectSource分页读取 190 行
4二次语法校验syntaxCheckCode验证代码可编译

7.3 MCP(Model Context Protocol)—— 标准化连通 SAP

  • 作用:把 SAP内置能力封装成一个个标准"工具(Tool)“,每个工具都有标准 JSON Schema(入参/出参),LLM 才能知道"能调什么、传什么、返回什么”。
  • 优势即插即用、屏蔽底层协议。更换模型,同一套工具依然复用;封装后无需直接拼 ADT HTTP 细节。
  • 本案例中用到的 MCP 工具即getObjectSourcesearchObjectsyntaxCheckCode等。

7.4 结构化输出 —— 结果可决策

  • 让模型**按"表格 + 严重级别 + 修复建议"**输出审查结果,而不是一大段描述;
  • 修复动作不自动执行,而是把问题列给你,由你选择"修哪些",保持人对上线变更的把控权

7.5 技术栈全景图

大语言模型 LLM(代码理解 · 检测推理 · 报告生成)

Agent 工具调用层(Function Calling + ReAct,决定调什么工具)

MCP 标准化协议(把 ADT / RFC / OData 封装成 Tool)

SAP 接入工具(getObjectSource / searchObject / syntaxCheckCode)

SAP 系统 DEV S4H

7.6 一句话总结

上面的审查不是"凭空写的",而是LLM(听懂 ABAP + 找 Bug)+ Agent(决定调哪个 SAP 工具)+ MCP(把 ADT/RFC 封装成标准工具连上真实 SAP)三者分工协作:
MCP 负责"接上系统"、Agent 负责"决定动作"、LLM 负责"看懂代码、判断风险并给出建议"。


八、总结

借助SAP 助手可以在上线前快速:

  • 读取并审查 ABAP 对象源码;
  • 识别运行期 Bug(未绑定引用、异常未终止);
  • 识别安全/权限漏洞(缺 AUTHORITY-CHECK);
  • 识别上线流程阻断点($TMP包无法传输)。

上线前代码审查 ≠ 只在代码看一遍,更要关注:权限校验、异常分支、数据敏感度、对象归属包(可传输性)。把上述 5 个问题在 release 前解决,能显著降低生产事故与安全风险。

🧪 本文案例来源于一次真实的 ZDEMO_002 上线前审查演练,文中代码行号与字段已做脱敏简化。


感谢阅读,希望对你的 SAP 上线前审查工作有帮助。有用请点赞·收藏·关注

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/4 8:02:23

RK3588 智能边缘盒子-掉线事故复盘

边缘设备连续掉线 8 小时的完整复盘&#xff1a;从"重启就好"到"根因修复"越微智能&#xff08;Yuewell&#xff09;工业边缘 AI 工程实践系列 第 6 篇 关键词&#xff1a;事故复盘、掉线、systemd 重启风暴、维护锁、网络恢复、RTSP 重连、看门狗一、事故…

作者头像 李华
网站建设 2026/9/4 8:02:06

基于Halcon与C++的工业级芯片缺陷检测系统开发实战

简介&#xff1a;本资源是一套基于HALCON机器视觉库与C开发的芯片缺陷检测系统完整实现&#xff0c;面向本科毕业设计、高校课程设计及工业视觉项目开发者&#xff0c;解决微电子封装环节中划痕、缺损、异物等典型缺陷的自动化识别问题。压缩包共73个文件&#xff0c;含8个核心…

作者头像 李华
网站建设 2026/9/4 8:02:03

MATLAB中RRTconnect路径规划实战指南

简介&#xff1a;本资源是一份基于MATLAB实现的RRTconnect路径规划算法完整代码包&#xff0c;面向机器人学、自动驾驶及智能系统方向的初学者与进阶学习者&#xff0c;用于解决高维配置空间中的单次静态环境避障路径规划问题。压缩包共7个文件&#xff0c;含6个核心MATLAB函数…

作者头像 李华
网站建设 2026/9/4 8:00:53

2026版最新网络安全工程师考证指南

前言 目前网络安全行业&#xff0c;国内都有哪些证书可以考&#xff1f; 一、CISP-PTE &#xff08;国家注册渗透测试工程师&#xff09; CISP-PTE即注册信息安全渗透测试工程师&#xff0c;该证书由中国信息安全测评中心颁发&#xff0c;证书是国内唯一认可的渗透测试认证&…

作者头像 李华
网站建设 2026/9/4 7:59:41

毕业设计之厦门旅游信息网站管理系统的设计与实现

题目&#xff1a;厦门旅游信息网站管理系统的设计与实现一、项目介绍随着信息技术的飞速发展&#xff0c;旅游行业对信息化、智能化的需求日益增强。厦门&#xff0c;作为中国的旅游胜地&#xff0c;其旅游信息的管理和传播方式急需进行升级和优化。因此&#xff0c;本研究针对…

作者头像 李华
网站建设 2026/9/4 7:59:29

结构化输出 / JSON Mode 入门

结构化输出&#xff08;structured output&#xff09;指让模型按约定形态返回数据&#xff0c;常见是 JSON&#xff0c;便于程序直接解析。JSON Mode / schema 约束是各厂商实现这一目标的手段。 聊天可以是散文&#xff1b;自动化要把结果喂给代码。这时「大概是个 JSON」不够…

作者头像 李华