Web Dynpro由==运行时环境==和集成在ABAP工作台(事务:SE80)中的==图形开发环境==组成。
graph TD
A[Web Dynpro] --> B[运行时环境]
A --> C[图形开发环境<br>集成在SE80]
A --> D[MVC编程模型]
D --> E[模型 Model]
D --> F[视图 View]
D --> G[控制器 Controller]
🏗️ MVC架构
所有Web Dynpro应用程序都按照==模型视图控制器(MVC)==编程模型进行构造:
graph LR
A[用户] -->|操作| B[控制器 Controller]
B -->|更新| C[模型 Model]
C -->|通知| B
B -->|格式化数据| D[视图 View]
D -->|显示| A
style C fill:#e1f5fe
style D fill:#f3e5f5
style B fill:#e8f5e9
模型(Model)
定义了到主系统的==接口==
Web Dynpro应用程序可以访问系统数据
负责业务逻辑和数据管理
视图(View)
负责在Web浏览器中==显示数据==
提供用户界面
展示模型数据
控制器(Controller)
位于视图和模型之间
==格式化==要在视图中显示的模型数据
==处理用户==创建的用户条目
将用户交互==返回到模型==
📋 Web Dynpro的优势
优势
说明
🛠️ 图形工具
使用图形工具显著减少了实施工作
🔁 组件重用
通过组件重用和更好的可维护性
🎨 灵活布局
可以轻松更改布局和导航
♿ 辅助功能
支持用户界面辅助功能
🔗 完全集成
完全集成在ABAP开发环境中
💡 Web Dynpro组件和窗口
组件(Component)
组件是Web Dynpro应用程序项目的==全局单位==
创建Web Dynpro组件是开发新应用程序的==初始步骤==
可以在组件中创建任意数量的组件视图
窗口(Window)
每个Web Dynpro组件中至少包含一个Web Dynpro==窗口==
Web Dynpro窗口嵌入在前端Web应用程序中显示的==所有视图==
该窗口在ABAP工作台的窗口编辑器中处理
graph TD
A[Web Dynpro组件] --> B[组件视图1]
A --> C[组件视图2]
A --> D[组件视图N]
A --> E[窗口1]
A --> F[窗口2]
E --> B
E --> C
F --> D
🔍 开发环境
Web Dynpro应用程序的开发完全集成在ABAP工作台中:
工具
用途
ABAP工作台(SE80)
集成的开发工具
图形开发环境
提供可视化的开发体验
窗口编辑器
处理Web Dynpro窗口
组件视图编辑器
创建和管理视图
组件视图和应用程序
组件视图:显示应用程序的所有管理详细信息(描述、创建者、创建日期、开发包)
Web Dynpro应用程序:是ABAP工作台对象列表中的独立对象
窗口和应用程序的交互:由给定窗口的接口视图创建
🏗️ 开发流程
graph LR
A[1. 创建组件] --> B[2. 创建视图]
B --> C[3. 组装窗口]
C --> D[4. 定义模型]
D --> E[5. 实现控制器]
E --> F[6. 测试部署]
WHILE <logical expression>. <statement block>. ENDWHILE.
参数说明
<logical expression> - 逻辑表达式,决定循环是否继续
<statement block> - 要重复执行的语句块,可以是单个语句或语句块
📌循环执行顺序
WHILE循环执行由WHILE和ENDWHILE命令包围的语句,直到逻辑表达式变为false。
🔁 流程图
graph TD
A[开始WHILE循环] --> B{评估条件}
B -->|条件为真| C[执行语句块]
B -->|条件为假| D[结束循环]
C --> E{继续循环?}
E -->|是| B
E -->|否| D
D --> F[继续执行]
📝 基本示例
简单计数循环
1 2 3 4 5 6 7
REPORT ys_sep_15. DATA: a TYPE i. a = 0. WHILE a <> 8. WRITE: / 'This is the line:', a. a = a + 1. ENDWHILE.
输出:
1 2 3 4 5 6 7 8
This is the line: 0 This is the line: 1 This is the line: 2 This is the line: 3 This is the line: 4 This is the line: 5 This is the line: 6 This is the line: 7
条件控制循环
1 2 3 4 5 6 7 8 9
REPORT ys_sep_15. DATA: lv_counter TYPE I VALUE 1, lv_max TYPE I VALUE 10.
WHILE sy-subrc = 0. " 处理数据直到失败 SELECT SINGLE * FROM mara INTO @DATA(lwa_mara) WHERE matnr = 'TEST'. IF sy-subrc <> 0. EXIT. ENDIF. WRITE: / 'Material:', lwa_mara-matnr. ENDWHILE.
⚠️ 注意事项
1. 避免无限循环
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
" ❌ 危险:无限循环示例 DATA: lv_count TYPE I VALUE 1.
WHILE lv_count > 0. WRITE: / 'This will loop forever!'. " 忘记修改循环条件 ENDWHILE.
WHILE lv_found = abap_false. WRITE: / 'Searching...'. " 忘记检查或设置lv_found ENDWHILE.
" ✅ 正确:在循环中更新条件 WHILE lv_found = abap_false. PERFORM search_data CHANGING lv_found. IF lv_found = abap_false. WRITE: / 'Not found, retrying...'. " 添加延迟避免过快循环 WAIT UP TO 1 SECONDS. ENDIF. ENDWHILE.
3. 资源管理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
" ✅ 正确:注意资源释放 WHILE lv_active = abap_true. " 打开资源 OPEN DATASET lv_file FOR INPUT IN TEXT MODE. WHILE sy-subrc = 0. READ DATASET lv_file INTO lv_data. IF sy-subrc = 0. " 处理数据 ENDIF. ENDWHILE. " 关闭资源 CLOSE DATASET lv_file. lv_active = abap_false. ENDWHILE.
💡 使用场景
1. 数据处理
1 2 3 4 5 6 7 8 9 10 11
" 读取数据直到结束 WHILE sy-subrc = 0. SELECT * FROM vbak INTO TABLE @DATA(lt_vbak) WHERE vkorg = '1000' UP TO 100 ROWS. IF sy-subrc = 0. " 处理数据 PERFORM process_orders USING lt_vbak. ENDIF. ENDWHILE.
2. 用户界面
1 2 3 4
" 保持界面直到用户退出 WHILE sy-ucomm <> 'BACK' AND sy-ucomm <> 'EXIT'. CALL SCREEN 0100. ENDWHILE.
3. 等待条件
1 2 3 4 5 6 7
" 等待某个条件满足 WHILE lv_ready = abap_false. PERFORM check_system_readiness CHANGING lv_ready. IF lv_ready = abap_false. WAIT UP TO 5 SECONDS. ENDIF. ENDWHILE.
CALL FUNCTION 'Z_MY_FUNCTION' EXPORTING param1 = lv_param1 IMPORTING result = lv_result EXCEPTIONS error1 = 1 error2 = 2 OTHERS = 3. IF sy-subrc <> 0. " 处理错误 CASE sy-subrc. WHEN 1. MESSAGE '错误1发生' TYPE 'E'. WHEN 2. MESSAGE '错误2发生' TYPE 'E'. WHEN OTHERS. MESSAGE '未知错误' TYPE 'E'. ENDCASE. ENDIF.
graph TD
A[域] --> B[技术定义]
B --> C[字段类型]
B --> D[字段长度]
B --> E[小数位数]
A --> F[数据元素]
F --> G[语义定义]
G --> H[业务含义]
G --> I[字段标签]
G --> J[字段帮助]
F --> K[表字段/结构字段]