第0课(准备篇):环境搭建与仓库导入¶

上课之前,把"教室"准备好:一套带 SFLIGHT 演示数据的 ABAP 系统,并用 abapGit 把本仓库的课程代码拉进去。
预计耗时: 2~4 小时(大部分时间在下载 23GB 镜像和等待系统初始化)
完成标志: SE38 里能运行 ZAC_ENV_CHECK,输出环境自检结果。
一、选择你的练习系统(三选一)¶
| 方案 | 适合谁 | 课程兼容性 | 成本 |
|---|---|---|---|
| A. ABAP Cloud Developer Trial(官方试用镜像,推荐) | 自学者 | ✅ 24 课全部兼容 | 免费;本机 Docker,需 16GB+ 内存 / 170GB 磁盘 |
| B. 公司/学校的开发系统 | 有导师带、有开发账号 | ✅ 基本兼容,个别课受权限/网络限制 | 需要申请开发权限 |
| C. BTP 试用版(ABAP 环境) | 只想体验现代开发 | ⚠️ 仅部分课程适用(见下方说明) | 免费,注册即用 |
为什么推荐官方试用镜像: 本课程以传统 ABAP 开发为主线(SE38/SE11/SE16、经典 ALV、函数模块、BAPI),这些都是 SAP GUI + NetWeaver 技术栈的内容,试用镜像完整支持;而 BTP 上的 ABAP 环境是 ABAP Cloud,没有 SAP GUI,也不放开经典 ALV / 函数模块 / 多数 BAPI。
方案 A:ABAP Cloud Developer Trial(官方试用镜像,推荐)¶
SAP 官方发布的免费试用环境 ABAP Cloud Developer Trial(Docker 镜像 sapse/abap-cloud-developer-trial,按 ABAP Platform 年份发布版本),底层是完整的 ABAP Platform + HANA,同时支持 SAP GUI 经典技术栈与现代 ABAP Cloud 开发,本课程 24 课全部兼容。
硬件要求(以官方 Docker Hub 页面为准,以下为 2025 版数值):
| 项目 | 要求 |
|---|---|
| CPU | 4 核及以上 |
| 内存 | 最低 16GB,官方强烈建议 32GB(Windows 在 .wslconfig 设置 memory=24GB;macOS 在 Docker Desktop 中分配 16GB+) |
| 磁盘 | Linux 150GB;Windows/macOS 给 Docker Desktop 分配 170GB(镜像压缩约 23GB,解压后超过 53GB) |
部署步骤:
- 在 Docker Hub 注册并本机执行
docker login——该镜像不开放匿名拉取; - 拉取镜像(TAG 以页面最新为准,当前为
2025):
- 启动容器。Linux 原生环境:
Windows / macOS(Docker Desktop)必须映射端口并加 -skip-limits-check:
docker run --stop-timeout 3600 -i --name a4h -h vhcala4hci \
-p 3200:3200 -p 3300:3300 -p 8443:8443 -p 30213:30213 \
-p 50000:50000 -p 50001:50001 \
sapse/abap-cloud-developer-trial:2025 -skip-limits-check
关键参数说明:
| 参数 | 作用 |
|---|---|
-h vhcala4hci |
主机名是固定值,改了系统无法启动(确需自定义时用 -skip-hostname-check) |
--stop-timeout 3600 |
停容器时给 HANA 留足内存数据落盘时间;停止请用 docker stop -t 7200 a4h,不要直接关机或杀进程 |
-skip-limits-check |
Mac/Windows 无法修改宿主机内核参数(shmmax 等),必须加 |
-agree-to-sap-license |
预先同意开发者许可,免去每次启动的交互确认 |
--mac-address 02:42:ac:11:00:11 |
固定容器 MAC,防止重启后硬件 key 变化导致许可失效(官方 Docker Hub 页提示的坑;此为页面示例值,可自定,之后保持不变即可) |
常用端口:
- 3200 SAP GUI:SAP 客户端与服务器通信
- 3300 RFC:ABAP 系统间通信协议
- 30213 HANA:HANA 数据库端口,可通过数据库软件如 HANA Studio 、DBeaver 等连接
- 8443 Cloud Connector:与 BTP 平台通信的接口,默认不开启
- 50000/50001 HTTP/HTTPS:ABAP 系统对外提供 http/https 服务的端口
注意不要用大写 -P(随机分配端口会导致 SAP GUI 等客户端连不上)。
- 首次启动:该镜像未预加载数据(initial load),启动后第一次打开事务码和程序会明显偏慢,这是由于程序尚未编译导致的,运行一次后会正常。
服务器就绪后,还差最后一步:装客户端、建连接并首次登录——见下方专门小节。
Apple Silicon(M 系列芯片)注意: 镜像为 x86_64 架构,在 M 系列 Mac 上需通过 Rosetta 模拟运行,参考 Docker Hub 页面链接的社区指南。
许可证: 仅限学习/演示用途;ABAP 许可证有效期约 3 个月,到期后用 SAP*(客户端 000)进 SLICENSE 取硬件 key,到 minisap 页面选择 A4H 系统下载新许可,通过事务码 SLICENSE 导入,或挂载至
/opt/sap/ASABAP_license更新。未到期却报许可无效,多半是容器 MAC 变了、硬件 key 跟着变——启动命令加固定--mac-address可防(见上方参数表)。提示:
DDIC/SAP*仅用于系统管理(比如 DEVELOPER 密码过期时用 SU01 重置),日常开发请始终用 DEVELOPER 登录。
安装 SAP GUI 客户端并首次登录(方案 A 必读)¶
容器只是服务器——登录还需要在自己电脑上准备一个客户端。按你的系统三选一:
| 客户端 | 适合系统 | 获取方式 | 说明 |
|---|---|---|---|
| SAP GUI for Windows | Windows | SAP Support Portal 软件下载区(需 S-user 下载权限) | 公司电脑通常已由 IT 预装 |
| SAP GUI for Java | macOS / Linux | 同上(同一下载区) | 7.80 起原生支持 Apple Silicon(M 系列) |
| SAP GUI for HTML(浏览器版) | 任何系统,零安装 | 无需下载,浏览器直接访问 | 界面细节与桌面版略有差异;拿不到桌面版时的兜底路线 |
个人自学者注意: 两款桌面版 GUI 都挂在 SAP Support Portal 的下载区,需要 SAP 客户/合作伙伴的 S-user 授权才能下载——没有公司渠道的自学者常卡在这一步。你也可以尝试通过 SAP 试用版下载页 用普通 SAP 账号注册下载桌面版 GUI;若仍拿不到,用浏览器版即可完成全部课程(做法见本节末尾)。版本与系统要求以 SAP GUI 官方页面为准。
桌面版创建连接(Windows / Java 参数通用):
- Windows(SAP Logon):新建条目 → 用户指定系统 → 应用服务器
localhost、系统编号00、系统 IDA4H; - macOS / Linux(SAP GUI for Java):新建连接,连接串填
conn=/H/localhost/S/3200,描述随意(如A4H Trial)。
首次登录: 客户端 001,用户 DEVELOPER,初始密码以镜像页面为准(2025 版为 ABAPtr2025#SP00,SAP* 和 DDIC 同密码),首次登录会强制修改密码。第1课的"打开 SAP GUI、选中连接"指的就是这里建好的连接。
浏览器版做法(零安装兜底): 先给本机 hosts 文件(Windows:C:\Windows\System32\drivers\etc\hosts;macOS / Linux:/etc/hosts)加一行 127.0.0.1 vhcala4hci,再在浏览器打开:
vhcala4hci 修改为 localhost。
课程演示与截图均以桌面版 SAP GUI(英文界面)为准;浏览器版事务码与功能一致,个别布局、快捷键有差异。
方案 B:公司/学校的开发系统¶
有导师或账号支持时的首选,省去自建服务器。需要向管理员申请:
- SAP GUI 客户端(公司电脑一般由 IT 统一安装,先确认有没有,没有就一并申请);
- SE38 / SE80 / SE11 / SE16 / SE16N / SE37 / SE24 / SE91 / SE19 等事务码的开发权限;
- 一个可以自建对象的**开发包(Package)**和 Workbench 传输请求;
- 注意:第 16 课调用外部 REST API,公司内网通常需要代理或防火墙放行,请提前确认。
方案 C:BTP 试用版(仅部分课程适用)¶
注册 SAP BTP Trial 后可免费开通 ABAP 环境,用 Eclipse + ADT(ABAP Development Tools)开发。但它是 ABAP Cloud:
| 课程 | BTP 上是否可用 |
|---|---|
| 第2/4/5/8/13/18/19 课(基础语法、内表、SQL、OO、新语法) | ✅ 可用(ADT 中运行控制台程序) |
| 第20/21/23 课(CDS、BTP) | ✅ 完全适用 |
| 第1/3/6/7/9~12/14~17/22/24 课 | ❌ 不适用(依赖 SAP GUI、经典事务码、函数模块、经典 ALV、BAPI) |
结论:BTP Trial 可以作为第二套体验环境,但不能作为本课程的主环境。
二、确认 SFLIGHT 演示数据¶
官方试用镜像默认已预置 SFLIGHT 数据。先用 SE16 查看表数据 SCARR 验证(试用镜像没有 SE16N,本课程统一以 SE16 演示,公司环境两者的差异在第1课说明):能看到 LH/AA/QF 等航空公司记录(且 SFLIGHT/SBOOK 有数据)就直接进入第三节。
更省事的办法:SE38 运行课程自带的 zac_env_check——一键检查 9 个课程对象是否入库、6 张演示表是否存在及数据条数,全部"就绪"即可开始上课。

以下情况需要跑 SAP 自带的生成器(重新生成或重置数据):
- 系统里没有预置数据(部分公司系统如此);
- 练习时把数据改乱了(如第5课的 INSERT/UPDATE/DELETE Demo),想恢复原始数据集。
做法:SE38 运行程序 SAPBC_DATA_GENERATOR,选择 Standard(标准规模:SCARR 约 15 家航空公司、SPFLI 航线、SFLIGHT 航班、SBOOK 数万条预订)执行即可。

课程 Demo 中大量示例以
carrid = 'AA'、connid = '0017'为例,预置/生成的数据里这两条一定有数据。若你的系统 SE38 里找不到该生成器,参考 SAP Community 上 "SFLIGHT data" 相关的替代生成方案。
三、用 abapGit 导入本仓库¶
1. 启动 abapGit¶
官方试用镜像已自带独立版 abapGit:SE38 中直接运行程序 ZABAPGIT_STANDALONE,能看到 abapGit 仓库列表界面即可开始(镜像自带的版本可能略旧,学习用途足够)。

若你的系统里没有(公司老系统、旧版镜像等),手动安装一次性完成:
- 从 abapgit.org 下载独立版程序
zabapgit_standalone.prog.abap(GitHub 上游:abapGit/abapGit 的 Releases); - SE38 新建程序
ZABAPGIT_STANDALONE,把下载的源码整个粘贴/上传进去,保存并激活; - 运行(F8)即可。

2. 创建开发包(仓库包 + 个人练习包)¶
SE80(右键 → Create → Package)创建两个包,职责从现在起就分开:
| 包 | 名字 | 类型 | 放什么 |
|---|---|---|---|
| 课程仓库包 | ZABAP_COURSE(描述随意,如 "ABAP Course") |
普通开发包ZABAP_COURSE或本地包$ABAP_COURSE, |
abapGit 仓库——随本仓库分发的课程对象 |
| 个人练习包 | 自定,如 ZMY_PRACTICE |
普通包或本地包 $TMP 均可 |
你跟课敲的练习代码、课后作业 |
- 选本地包:不能放在
$TMP下,需新建$开头本地包,无需传输请求。 - 普通开发包:系统会弹出Workbench创建提示,确认即可,单机练习无需真实传输。
- 练习场景优先用
$TMP:对象不进入传输请求,操作简单。 - 若练习对象需要走传输(第17课内容),创建普通包。
- 两类包分开,避免练习代码混入abapGit仓库,防止Pull受干扰(参考第4节约定)。
3. 在线克隆本仓库¶
- 运行
ZABAPGIT_STANDALONE,点击 New Online; - 填写:
- Git repository URL:`https://github.com/Jack-Liang/abap-course.git.
- Package:
ZABAP_COURSE或$ABAP_COURSE - Branch:
master - 点击 Clone,之后进入仓库页面点击 Pull 拉取全部对象;
- Pull 完成后对象列表应为绿色(全部激活)。

如果 Pull 报 SSL 证书错误(试用镜像常见,系统里没有 GitHub 的受信证书):
- 方法一(治本):浏览器导出
github.com的证书链,事务码 STRUST 导入到 SSL client (Anonymous) / (Standard) 后重试;

- 方法二(绕开):GitHub 上 Code → Download ZIP 下载本仓库,abapGit 菜单选择 Import from ZIP 离线导入,效果相同(只是之后无法直接 Pull 更新)。


4. 验证¶
SE38 运行 ZAC_HELLO_WORLD,看到 Hello ABAP! 与航空公司信息,环境就绪。
四、命名规范与对象对照¶
先分清:仓库代码和个人练习¶
课程里的开发分两条线,命名规范只约束第一条:
| 课程仓库代码 | 个人练习代码 | |
|---|---|---|
| 放哪个包 | ZABAP_COURSE(第三节建的仓库包) |
自己的个人练习包(或 $TMP) |
| 怎么命名 | 遵守下方 zac_ 项目规范 |
随意——z 开头带上自己的标识(如 zhello_developer),不与其他对象重名即可 |
| 什么时候写它 | 运行课程 Demo、给本仓库贡献代码 | 跟课"从零敲一遍"、课后作业、自己折腾 |
一句话:
zac_规范管的是进本仓库的代码,不管你的练习。 自己做练习,一律放个人练习包,怎么方便怎么来;只有当你要把代码提交到本仓库(Pull Request)时,才在ZABAP_COURSE包里开发并遵守项目规范。个别课需要手工复建的仓库对象(如第9课的函数组)名字必须照抄——课文里会单独说明,但包照样放自己的练习包。
命名规范(项目规范)¶
本仓库所有开发对象统一带课程前缀 zac_(Z + ABAP Course),避免与系统里其他项目的 Z 对象重名。课号不写进对象名——课序调整时对象名不受影响;课与对象的对应关系维护在下方矩阵表中,各程序的头注释同时标注了所属课次,方便在系统里就近查找。
| 对象类型 | 命名规则 | 示例 |
|---|---|---|
| 报表程序 / INCLUDE | zac_<语义名> |
zac_sql_crud、zac_flight_top |
| 类 | zcl_ac_<语义名> |
zcl_ac_flight_query |
| 接口 | zif_ac_<语义名> |
—— |
| 函数组 / 函数模块 | zac_<语义名> |
zac_flight_utils / zac_calc_flight_duration |
| CDS 视图 | zac_<语义名> |
zac_flight_detail |
| 表 / 消息类 | zac_<语义名> |
zac_flight_ext / zac_flight_msg |
补充约定:仓库开发包为
ZABAP_COURSE;一个对象可服务多课(见矩阵"涉及课程"列),新增对象时先查矩阵避免重复造轮子。
对象对照矩阵¶
| 对象 | 类型 | 涉及课程 | 说明 |
|---|---|---|---|
zac_env_check |
程序 | 第0课 | 课程环境自检:一键检查对象入库与演示数据 |
zac_hello_world |
程序 | 第2课 | Hello World 与基本数据类型 |
zac_doms_priority + zac_de_priority |
域 + 数据元素 | 第3课 | 优先级字段的域(固定值 1/2/3)与数据元素 |
zac_flight_ext |
透明表 | 第3课、第15课 | 建表演示;增强示例引用 |
zac_internal_table |
程序 | 第4课 | 内表与结构体操作 |
zac_sql_crud |
程序 | 第5课 | Open SQL 增删改查 |
zac_selection_screen |
程序 | 第7课 | 选择屏幕 |
zac_formatting |
程序 | 第8课 | 字符串/日期/货币格式化 |
zac_call_function + zac_flight_utils(函数组)+ zac_calc_flight_duration(FM,均已入库) |
程序 + FM | 第9课 | 函数模块调用 |
zac_alv_basic |
程序 | 第10课 | 经典 ALV 基础 |
zac_alv_events |
程序 | 第11课 | ALV 交互事件 |
zac_excel |
程序 | 第12课 | Excel 导入导出 |
zac_oo_basic + zcl_ac_flight_query |
程序 + 类 | 第13课 | OO 基础及其工具类 |
zac_bapi |
程序 | 第14课 | BAPI 调用 |
zcl_ac_flight_service |
类 | 第14课、第24课 | 第14课引入,综合实战的主役业务服务类 |
zac_rest_api |
程序 | 第16课 | 调用外部 REST 接口(需外网) |
zac_message + zac_flight_msg |
程序 + 消息类 | 第18课 | 消息处理 |
zac_new_syntax |
程序 | 第19课 | 新语法专题 |
zac_flight_detail / zac_flight_stats |
CDS 视图 | 第20/21课、第24课 | 航班详情/统计视图,综合实战复用 |
zac_cds_basic / zac_cds_advanced |
程序 | 第20/21课 | CDS 视图消费端 demo |
zac_oo_alv |
程序 | 第22课 | OO ALV |
zac_flight_manager + 5 个 INCLUDE |
程序 | 第24课 | 综合实战主程序(zac_flight_top/sel/pbo/pai/forms),含 Screen 100,均已入库 |
全部 24 课的开发对象均可通过 abapGit Pull 获取,且已在作者实机完成导入、激活、运行全链路验证。
五、常见问题(FAQ)¶
Q1:DEVELOPER 用户密码过期/锁死了怎么办?
用 DDIC 登录,SU01 里输入 DEVELOPER,解锁并重置密码,重新登录。
Q2:SE16 查 SFLIGHT 没有数据?
官方试用镜像默认预置了数据;若确实为空(如公司系统),运行 SAPBC_DATA_GENERATOR 生成(见第二节),跑完后等几分钟数据落库再查。
Q3:第16课 REST Demo 报连接失败?
该课调用公网汇率 API(api.exchangerate-api.com)。公司内网需要配置代理;试用容器需要宿主机能访问外网,且 STRUST 中已导入对应 SSL 证书。跑不通可先跳过,不影响后续课程。
Q4:abapGit Pull 时提示对象已存在?
说明系统里已有同名 Z 对象——多半是手工练习时建进了 ZABAP_COURSE(练习请放个人练习包,见第四节)。先删除同名对象再 Pull,或换一个干净的开发包。
Q5:课程里中文注释在系统里显示乱码? SAP GUI 登录语言选英文(EN)即可——仓库母语为 E,中文以 UTF-8 存储在代码和文本池中,不影响编译运行;若 GUI 显示异常,检查 SAP GUI 选项里的字符编码设置。
环境就绪清单¶
- SAP GUI 客户端已就绪并登录成功(客户端
001/DEVELOPER),SE38/SE11/SE16/SE80 都能打开 - SCARR/SFLIGHT/SBOOK 有数据(官方镜像默认预置;为空则跑
SAPBC_DATA_GENERATOR) - abapGit 可运行(官方镜像自带),本仓库已 Clone/Pull 到仓库包
ZABAP_COURSE - 个人练习包已建好(跟课练习、课后作业放这里,与仓库包分开)
-
ZAC_ENV_CHECK运行成功,输出全部"就绪"(课程对象入库 + 演示数据一键检查)
全部打勾,就可以正式开始下一课了。
下一课:第1课:SAP 系统入门与开发环境——正式走进 SAP 的世界。