1. 环境准备与工具安装
作为一个从ABAP传统开发转向Fiori的老兵,我深刻理解环境配置这个"入门第一关"有多劝退。记得第一次打开HANA Studio时,光是找安装入口就花了半小时。下面就把我踩过的坑总结成保姆级教程:
必备软件清单:
- SAP HANA Studio(基础开发环境)
- UI5开发工具包(UI Development Toolkit for HTML5)
- ABAP开发工具(ABAP Development Tools for SAP NetWeaver)
安装时有个隐藏技巧:在Help→Install New Software界面,不要直接输入官方仓库地址。我习惯先下载离线安装包到本地,通过Add→Archive添加,速度能快3倍。特别是网络环境不稳定时,这个方法能避免90%的安装失败问题。
注意:安装过程中遇到"cannot complete request"报错时,先检查JDK版本。推荐使用Java 8,高版本可能会产生兼容性问题。
安装完成后需要验证三个关键点:
- 在Preferences→SAP UI5里确认运行时版本设置为1.71以上(老版本缺少重要API)
- ABAP项目连接测试时,记得勾选"Enable OData服务支持"
- 在SAP GUI中提前准备好以下事务码权限:
- /N/UI2/FLP(Fiori启动板)
- SEGW(Gateway服务构建)
- SICF(服务配置)
2. 构建后端OData服务
2.1 数据模型定义实战
在SEGW中新建项目时,我强烈建议采用"Z"开头的命名规范。有次我偷懒用了"TEST_"前缀,结果在传输到生产系统时引发了一连串冲突。具体操作流程:
- 右键Data Model选择Import→DDIC Structure导入透明表
- 字段映射时要注意:金额字段必须关联到Edm.Decimal类型
- 主键设置有个隐藏技巧:同时勾选"Nullable"属性,这样前端做CRUD时更灵活
" 实体类型定义示例
define type ZC_ProductType {
key ProductId : String(10);
ProductName : String(40);
Price : Decimal(10,2);
Currency : String(5);
}
2.2 ABAP代码实现要点
重写DPC_EXT类时,这几个方法最容易出错:
- GET_ENTITYSET:分页参数$skip和$top要手动处理
- CREATE_ENTITY:注意校验MIME类型为application/json
- UPDATE_ENTITY:ETag处理不当会导致并发冲突
" 典型GET_ENTITYSET实现
METHOD products_get_entityset.
DATA: lt_filter TYPE /iwbep/t_mgw_select_option.
lt_filter = io_tech_request_context->get_filter( )->get_filter_select_options( ).
" 处理过滤条件
IF line_exists( lt_filter[ property = 'PRODUCTID' ] ).
" 具体筛选逻辑...
ENDIF.
" 分页处理
DATA(lv_skip) = io_tech_request_context->get_skip( ).
DATA(lv_top) = io_tech_request_context->get_top( ).
" 数据查询...
ENDMETHOD.
2.3 服务发布避坑指南
执行/N/IWFND/MAINT_SERVICE时,90%的新手会卡在技术服务名称(Technical Service Name)上。这里有个诀窍:名称必须包含"_SRV"后缀,否则前端无法识别。测试时建议先用Postman发送以下请求:
GET /sap/opu/odata/sap/ZPRODUCT_SRV/ProductSet?$format=json
如果返回406错误,检查SICF节点是否激活;返回401则需要配置ICF用户权限。
3. 前端工程开发
3.1 项目脚手架搭建
在HANA Studio创建UI5项目时,模板选择有讲究:
- SAPUI5 Application:纯前端项目
- SAP Fiori Elements:基于模板的快速开发
- SAPUI5 Mobile Application:移动端优化
我推荐新手先用Fiori Elements模板,它能自动生成CRUD界面。创建时注意这两个参数:
- Application Type:选"Standalone App"
- Data Source:填写刚发布的OData服务地址
// manifest.json关键配置
"dataSources": {
"default": {
"uri": "/sap/opu/odata/sap/ZPRODUCT_SRV/",
"type": "OData",
"settings": {
"odataVersion": "2.0"
}
}
}
3.2 视图与控制器开发
List页面布局有个实用技巧:在Table控件中加入以下属性可以优化性能:
<Table
growing="true"
growingThreshold="10"
growingScrollToLoad="true"
sticky="ColumnHeaders">
编辑对话框建议使用FlexBox布局:
<l:VerticalLayout>
<Label text="产品ID" />
<Input value="{ProductId}" editable="false" />
<Label text="产品名称" />
<Input value="{ProductName}" />
</l:VerticalLayout>
4. 应用发布与磁贴配置
4.1 代码部署实战
右键项目选择Team→Share Project时,会遇到两种部署模式:
- 开发版本(Development):可调试但性能差
- 生产版本(Production):经过压缩优化
我建议先用开发版本测试,确认无误后执行以下操作转换为生产版本:
# 在项目根目录执行构建
grunt build --production
4.2 磁贴配置的隐藏参数
在/N/UI2/FLPD_CUST配置磁贴时,这些参数最易出错:
- 语义对象(Semantic Object):必须与后端服务关联
- 动作(Action):通常设为display
- 导航语义对象(Navigation Semantic Object):用于跨应用跳转
动态磁贴配置示例:
Tile ID: ZPRODUCT_MONITOR
Title: 产品监控
Subtitle: 实时数据
Info: 刷新率60秒
Service URL: /sap/opu/odata/sap/ZPRODUCT_SRV/ProductSet/$count
4.3 权限配置技巧
通过PCFG分配权限时,需要同时配置:
- 业务角色(Business Role)
- 目录权限(Catalog Authorization)
- 目标映射权限(Target Mapping)
有个快速验证权限的方法:在浏览器无痕窗口访问应用URL,模拟无权限用户访问场景。
5. 调试与性能优化
5.1 前端调试三板斧
- 组件检查器:Ctrl+Alt+Shift+S调出UI5诊断工具
- 网络追踪:过滤odata请求,重点关注__metadata字段
- 控制台命令:
// 获取UI5版本
sap.ui.version
// 查看绑定路径
sap.ui.getCore().byId("tableId").getBinding("items").getPath()
5.2 后端性能优化
在SEGW中启用$expand查询时,务必实现以下方法:
METHOD products_get_entityset.
IF io_tech_request_context->has_expand( ).
DATA(lt_expand) = io_tech_request_context->get_expand( ).
" 处理关联查询...
ENDIF.
ENDMETHOD.
缓存配置建议:
/IWFND/CACHE_CLEANUP - 清理Gateway缓存
/UI2/INVALIDATE_CACHES - 清除UI5缓存
6. 项目实战经验
在实际电商系统开发中,我总结出这些最佳实践:
- 分页查询必须实现服务端过滤,避免全表扫描
- 批量操作使用$batch请求,减少网络开销
- 错误处理遵循OData标准格式:
{
"error": {
"code": "Z001",
"message": "库存不足",
"target": "ProductId=1001"
}
}
表单验证推荐使用sap.ui.model.odata.type:
new sap.ui.model.odata.type.DateTime({
displayFormat: "timestamp"
})

466

被折叠的 条评论
为什么被折叠?



