SAP学习笔记 - 开发22 - 前端Fiori开发 数据绑定(Jason),Data Types(数据类型)
上一章讲了Icons(图标),Icon Explorer。
SAP学习笔记 - 开发21 - 前端Fiori开发 Icons(图标),Icon Explorer(图标浏览器)-CSDN博客
本章继续讲SAP Fiori开发的知识。
目录
1,Aggregation Binding(聚合绑定)
1),Invoices.json
2),manifest.json
3),InvoiceList.view.xml
4),App.view.xml
5),i18n.properties
6),运行看效果
2,Data Types (数据类型)
1),InvoiceList.view.xml
2),InvoiceList.controller.js
3),运行看效果
4),总结
- currency: "JPY"
- 属性的查找方法
1),如何查找官方文档
方法1:直接访问SAPUI5 API参考
方法2:通过开发环境查找
方法3:使用SAPUI5文档结构导航
2),ObjectListItem常用属性
a),核心属性
b),状态相关属性
c),数字格式化
d),其他属性
以下是详细内容。
1,Aggregation Binding(聚合绑定)
Aggregation Binding是SAP Fiori和SAPUI5框架中数据绑定的一个重要概念,它允许开发者在UI控件与其数据模型之间建立关联,是SAP Fiori开发中实现动态、数据驱动UI的核心技术,它大大简化了列表、表格等集合型控件的开发工作。
Aggregation Binding指的是将控件中的聚合(aggregation)属性与数据模型中的集合数据进行绑定。在SAPUI5中,聚合是指可以包含多个子元素的容器属性,例如:
-
Table
控件的items
聚合 -
List
控件的items
聚合 -
Form
控件的formContainers
聚合
Aggregation Binding通过以下方式工作:
-
将UI控件的聚合属性连接到数据模型中的集合
-
为集合中的每个数据项创建相应的子控件
-
自动保持UI与数据的同步
上面这一段是Deepseek里面的解释,还挺高大上的哈,我好像也没太看懂🤦
下面来看看实例安慰一下心情。
1),Invoices.json
这个就是咱们这个小例子里面的数据源啦。
其实数据源基本都应该是DB,从DB取数据生成jason,然后再绑定到Fiori前端,咱一步步来。
{"Invoices": [{"ProductName": "Pineapple","Quantity": 21,"ExtendedPrice": 87.2,"ShipperName": "Fun Inc.","ShippedDate": "2015-04-01T00:00:00","Status": "A"},{"ProductName": "Milk","Quantity": 4,"ExtendedPrice": 10,"ShipperName": "ACME","ShippedDate": "2015-02-18T00:00:00","Status": "B"},{"ProductName": "Canned Beans","Quantity": 3,"ExtendedPrice": 6.85,"ShipperName": "ACME","ShippedDate": "2015-03-02T00:00:00","Status": "B"},{"ProductName": "Salad","Quantity": 2,"ExtendedPrice": 8.8,"ShipperName": "ACME","ShippedDate": "2015-04-12T00:00:00","Status": "C"},{"ProductName": "Bread","Quantity": 1,"ExtendedPrice": 2.71,"ShipperName": "Fun Inc.","ShippedDate": "2015-01-27T00:00:00","Status": "A"}]
}
- Invoices:这是json文件里数据名,可以简单理解为DB的表名,那下面就是数据行和字段
2),manifest.json
{"_version": "1.65.0","sap.app": {"id": "ui5.walkthrough","i18n": "i18n/i18n.properties","title": "{{appTitle}}","description": "{{appDescription}}","type": "application","applicationVersion": {"version": "1.0.0"}},"sap.ui": {"technology": "UI5","deviceTypes": {"desktop": true,"tablet": true,"phone": true}},"sap.ui5": {"dependencies": {"minUI5Version": "1.108.0","libs": {"sap.ui.core": {},"sap.m": {}}},"models": {"i18n": {"type": "sap.ui.model.resource.ResourceModel","settings": {"bundleName": "ui5.walkthrough.i18n.i18n","supportedLocales": [""],"fallbackLocale": ""}},"invoice": {"type": "sap.ui.model.json.JSONModel","uri": "Invoices.json"}},"rootView": {"viewName": "ui5.walkthrough.view.App","type": "XML","id": "app"},"resources": {"css": [{"uri": "css/style.css"}]}}
}
- "invoice": { =》这是view里面使用的model 名称
- "type": "sap.ui.model.json.JSONModel", =》这个说的是数据源的类型
- "uri": "Invoices.json" =》这个和Type配套,指向的jason文件的路径(当前文件同路径)和名称
"invoice": {
"type": "sap.ui.model.json.JSONModel",
"uri": "Invoices.json"
}
将来等连接DB的时候,这里会改成SAP提供的API(Odata)
3),InvoiceList.view.xml
<mvc:Viewxmlns="sap.m"xmlns:mvc="sap.ui.core.mvc"><ListheaderText="{i18n>invoiceListTitle}"class="sapUiResponsiveMargin"width="auto"items="{invoice>/Invoices}" ><items><ObjectListItemtitle="{invoice>Quantity} x {invoice>ProductName}"/></items></List>
</mvc:View>
这个视图说的是把Invoices.json里的内容给通过List展示出来
- items="{invoice>/Invoices}" >
invoice 如前述,是manifest.json 里面说的是model 名
> 可以理解为下级访问符
/Invoices =》/ 是绝对路径,Invoices 是 Invoices.json文件里面的名叫 Invoices(表名)的数据
- title="{invoice>Quantity} x {invoice>ProductName}"/>
这个是个简写,完整写法是 invoice>/Invoices>Quantity,为了简略化,把>/Invoices 给省去了
<List
headerText="{i18n>invoiceListTitle}"
class="sapUiResponsiveMargin"
width="auto"
items="{invoice>/Invoices}" >
<items>
<ObjectListItem
title="{invoice>Quantity} x {invoice>ProductName}"/>
</items>
</List>
4),App.view.xml
<mvc:ViewcontrollerName="ui5.walkthrough.controller.App"xmlns="sap.m"xmlns:mvc="sap.ui.core.mvc"displayBlock="true"><Shell><App class="myAppDemoWT"><pages><Page title="{i18n>homePageTitle}"><content><mvc:XMLView viewName="ui5.walkthrough.view.HelloPanel"/><mvc:XMLView viewName="ui5.walkthrough.view.InvoiceList"/></content></Page></pages></App></Shell>
</mvc:View>
- <mvc:XMLView viewName="ui5.walkthrough.view.InvoiceList"/>
这个是嵌套视图,这样就把 InvoiceList.view.xml 视图给加进来了,还是很方便的哈
SAP学习笔记 - 开发20 - 前端Fiori开发 Nest View(嵌套视图) ,Fragment(片段)-CSDN博客
5),i18n.properties
# App Descriptor
appTitle=Hello World
appDescription=A simple walkthrough app that explains the most important concepts of OpenUI5# Hello Panel
showHelloButtonText=Say Hello
helloMsg=Hello {0}
homePageTitle=Walkthrough
helloPanelTitle=Hello World
openDialogButtonText=Say Hello With Dialog
dialogCloseButtonText=Ok# Invoice List
invoiceListTitle=Invoices
暂时还没有Controller,就是个数据暂时,跑一下看看
6),运行看效果
2,Data Types (数据类型)
数据类型,比较典型的是金额的话,需要对应的Currency,不然也不知道是多少钱是吧。
下面来看具体的例子。
1),InvoiceList.view.xml
<mvc:ViewcontrollerName="ui5.walkthrough.controller.InvoiceList"xmlns="sap.m"xmlns:core="sap.ui.core"xmlns:mvc="sap.ui.core.mvc"><ListheaderText="{i18n>invoiceListTitle}"class="sapUiResponsiveMargin"width="auto"items="{invoice>/Invoices}"><items><ObjectListItemcore:require="{Currency: 'sap/ui/model/type/Currency'}"title="{invoice>Quantity} x {invoice>ProductName}"number="{parts: ['invoice>ExtendedPrice','view>/currency'],type: 'Currency',formatOptions: {showMeasure: false}}"numberUnit="{view>/currency}"/></items></List>
</mvc:View>
- controllerName="ui5.walkthrough.controller.InvoiceList"
加了个Controller
- ObjectListItem: 列表中的每一项使用ObjectListItem控件显示
- core:require: 动态加载Currency类型用于数据格式化
- title: 显示数量和产品名称的组合
- number: 复杂绑定,包含:
- parts: 绑定多个数据源(价格和货币类型)
- type: 使用Currency类型格式化,这里的主要意义就是把小数点都保留成 2位的
- formatOptions: 格式化选项(不显示货币符号)
- numberUnit: 显示货币单位。这个其实和 number里的Currency是一个东西,只不过这个显示的小
<ObjectListItem
core:require="{
Currency: 'sap/ui/model/type/Currency'
}"
title="{invoice>Quantity} x {invoice>ProductName}"
number="{
parts: [
'invoice>ExtendedPrice',
'view>/currency'
],
type: 'Currency',
formatOptions: {
showMeasure: false
}
}"
numberUnit="{view>/currency}"/>
2),InvoiceList.controller.js
sap.ui.define(["sap/ui/core/mvc/Controller","sap/ui/model/json/JSONModel"
], (Controller, JSONModel) => {"use strict";return Controller.extend("ui5.walkthrough.controller.InvoiceList", {onInit() {const oViewModel = new JSONModel({currency: "EUR"});this.getView().setModel(oViewModel, "view");}});
});
- this.getView().setModel(oViewModel, "view");
其实就是把一个JasonModel 给set 到 View上面,名称就叫 “view"。
有关JasonModel,可以参照下面文章。
SAP学习笔记 - 开发15 - 前端Fiori开发 Boostrap,Controls,MVC(Model,View,Controller),Modules-CSDN博客
可以看到,这个Controller的作用就是弄一个Currency(这里是EUR),因为咱们json里没有嘛
真正开发当中,这个基本都是从DB取。
3),运行看效果
把 showCurrency: true
显示的就是这样的了,EUR 单位是不是有两个,下面那个小的就是 numberUnit显示的
就是说如果你不想显示小文字的货币单位,那你完全可以去掉 numberUnit
去掉 numberUnit,就显示成这样
4),总结
本节所说的Data Types的意思是说,Fiori 页面的格式化表示,你不需要自己写多少代码,
这些Data Types(数据类型)本身就自带格式,只要设上了,就会自带格式化。
- currency: "JPY"
这个Currency 的意义还有一个,这个需要说一下
就是每个币种,对保留小数位数的要求是不一样的,比如日元,没有小数;欧元,需要两位小数
它这个地方好像还没有太完善哈,如果原始数据有小数的话,JPY还是保留了 2位小数
而如果第二位小数为 0,则会被删掉
不管怎么说吧,好像跟SAP里面不太一样,不知道这个可不可以设置小数位数
那要是硬搞,能让JPY不显示小数吗?网上说也是可以的
通过属性设置:formatOptions > decimals: 0
TODO:惨,不好用
我估摸着,现在只能是 Jason数据过来的时候,就给整好,不要啥啥都靠Fiori 前端
- 属性的查找方法
下面咱们以 ObjectListItem 为例,来研究一下查找方法。
1),如何查找官方文档
方法1:直接访问SAPUI5 API参考
-
访问 SAPUI5 SDK - https://sapui5.hana.ondemand.com/
-
在顶部搜索栏输入"ObjectListItem"
-
在搜索结果中选择"ObjectListItem (API)"或"ObjectListItem (Samples)"
点 Control Sample 旁边那个链接,还能有例子提供
方法2:通过开发环境查找
-
在SAP Web IDE或Business Application Studio中
-
将光标放在控件名称上按F1
-
或右键点击控件选择"API Reference"
方法3:使用SAPUI5文档结构导航
-
进入API Reference部分
-
导航至
sap.m > List Items > ObjectListItem
2),ObjectListItem常用属性
ObjectListItem是SAPUI5中用于显示复杂列表项的控件,常用属性包括:
a),核心属性
-
title - 主标题文本
-
number - 右侧显示的数字(常用于金额、数量等)
-
numberUnit - 数字的单位(如货币符号)
-
intro - 副标题/简介文本
-
icon - 左侧显示的图标
-
activeIcon - 激活状态下的图标
-
type - 列表项类型(如Active, Inactive, Detail等)
b),状态相关属性
-
highlight - 高亮状态(如Success, Error, Warning等)
-
press - 点击事件处理函数
-
selected - 是否被选中
c),数字格式化
-
numberState - 数字的状态(如Success, Error等)
-
number和numberUnit常结合使用显示格式化的金额
d),其他属性
-
attributes - 附加属性集合(显示在标题下方)
-
firstStatus - 第一个状态指示器
-
secondStatus - 第二个状态指示器
-
markers - 标记集合
以上就是本篇的全部内容。
更多SAP顾问业务知识请点击下面目录链接或东京老树根的博客主页
https://blog.csdn.net/shi_ly/category_12216766.html
东京老树根-CSDN博客
相关文章:

SAP学习笔记 - 开发22 - 前端Fiori开发 数据绑定(Jason),Data Types(数据类型)
上一章讲了Icons(图标),Icon Explorer。 SAP学习笔记 - 开发21 - 前端Fiori开发 Icons(图标),Icon Explorer(图标浏览器)-CSDN博客 本章继续讲SAP Fiori开发的知识。 目录 1&…...

网络编程之TCP编程
基于 C/S :客户端(client)/服务器端(server) 1.流程 2. 函数接口 所有函数所需头文件: #include <sys/types.h> #include <sys/socket.h> 系统定义好了用来存储网络信息的结构体 ipv4通信使…...

C++进阶--C++11(04)
文章目录 C进阶--C11(04)lambdalambda表达式语法捕捉列表lambda的应用lambda的原理 包装器functionbind 总结结语 很高兴和大家见面,给生活加点impetus!!开启今天的编程之路!! 今天我们进一步c…...

当AI遇上防火墙:新一代智能安全解决方案全景解析
在2025年网络安全攻防升级的背景下,AI与防火墙的融合正重塑安全防御体系。以下三款产品通过机器学习、行为分析等技术创新,为企业提供智能化主动防护: 1. 保旺达数据安全管控平台——AI驱动的动态治理引擎 智能分类分级:基于…...
STL 库基础概念与示例
一、STL 库基础概念与示例 1. 容器分类 顺序容器 核心特性:按元素插入顺序存储,支持下标访问(类似数组),动态扩展内存。典型容器:vector(动态数组)。适用场景:需要频繁…...

Spring MVC参数绑定终极手册:单多参/对象/集合/JSON/文件上传精讲
我们通过浏览器访问不同的路径,就是在发送不同的请求,在发送请求时,可能会带一些参数,本文将介绍了Spring MVC中处理不同请求参数的多种方式 一、传递单个参数 接收单个参数,在Spring MVC中直接用方法中的参数就可以&…...

Fluence推出“Pointless计划”:五种方式参与RWA算力资产新时代
2025年6月1日,去中心化算力平台 Fluence 正式宣布启动“Pointless 计划”——这是其《Fluence Vision 2026》战略中四项核心举措之一,旨在通过贡献驱动的积分体系,激励更广泛的社区参与,为用户带来现实世界资产(RWA&am…...

innovus: ecoAddRepeater改变hier层级解决办法
我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 来自星球提问: 星主,我在A/B/C/D/E/U0这个cell后面插入一个BUFF,生成的名字为A/B/C/BUFF1,少了D/E两个层级,不应该是生成A/B/C/…...

华为OD机试真题——硬件产品销售方案(2025A卷:100分)Java/python/JavaScript/C++/C语言/GO六种最佳实现
2025 A卷 100分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式! 2025华为OD真题目录+全流程解析/备考攻略/经验分享 华为OD机试真题《硬件产品销售方案》: 目录…...
突破数据孤岛:StarRocks联邦查询实战指南
随着企业数据生态的复杂化,跨多个数据存储系统进行联合查询的需求日益增长。本文将深入解析如何利用StarRocks构建高效的数据联邦查询体系,实现与Apache Doris和Hive数据仓库的无缝对接。 ### 一、StarRocks联邦查询架构解析 StarRocks采用分布式架构设…...

传统业务对接AI-AI编程框架-Rasa的业务应用实战(1)--项目背景即学习初衷
我的初衷:我想学习AI。具体的方向是这样的:原本传统的平台业务去对接智能体。比如发票业务,发票的开具、审核、计税、回款等。根据用户在业务系统前台界面输入若干提示词 或者 语音输入简短语音信息,可以通过智能体给出需要处理的…...

低功耗架构突破:STM32H750 与 SD NAND (存储芯片)如何延长手环续航至 14 天
低功耗架构突破:STM32H750 与 SD NAND (存储芯片)如何延长手环续航至 14 天 卓越性能强化安全高效能效图形处理优势丰富集成特性 模拟模块实时监控保障数据完整性提升安全性与可靠性测量原理采样率相关结束语 在智能皮电手环及数据存储技术不…...
CSS选择子元素
通过选择器 为所有子元素应用样式。以下是几种常见方法: 1. 选择所有直接子元素(不包括孙级) css 复制 下载 .parent > * {/* 样式规则 */color: red; } > 选择器:只匹配直接子元素 * 通配符:匹配任意类型…...
git cherry-pick (28)
1.1 目的 本文档用于说明如何git上,通过cherry-pick命令合并某个功能。 将分支bg_device的 AHB New feature support libalgo arm64 lib 提交内容合并至 分支spfl_device 分支当中 1.2适配步骤 1.2.1 实操过程 > 分支sfpl_device的状态 rootxrootx-ThinkPad:~/workdir…...
android与Qt类比
一、概念对应关系 Android RecyclerView 组件类比描述Qt 模型 - 视图组件Qt 类比描述RecyclerView画板(容器)QAbstractItemView视图(展示数据的容器,如列表、表格)RecyclerView.Adapter画布(数据桥梁&…...
AX513CE 是一款针对模组渠道市场前端IPC应用而设计的数字SOC芯片 支持高清CMOS Sensor输入 国产品牌
AX513CE 是一款针对模组渠道市场前端IPC应用而设计的数字SOC芯片 支持高清CMOS Sensor输入 国产品牌 产品概述: AX513CE 是一款针对模组渠道市场前端IPC应用而设计的数字SOC芯片,支持高清CMOS Sensor输入,经ISP处理、视频前处理以及音视频编…...

Linux(11)——基础IO(上)
目录 一、理解文件 二、回顾C文件的接口 📄 C语言文件操作函数表 编辑📄 三个文件流 三、系统文件I/O 1️⃣open 2️⃣close 3️⃣write 4️⃣read 四、文件描述符 💡用户操作文件的底层逻辑是什么? Ǵ…...

ABP-Book Store Application中文讲解 - Part 9: Authors: User Interface
ABP-Book Store Application中文讲解 - Part 9: Authors: User Interface TBD 1. 汇总 ABP-Book Store Application中文讲解-汇总-CSDN博客 2. 前一章 ABP-Book Store Application中文讲解 - Part 8: Authors: Application Layer-CSDN博客 项目之间的引用关系。 目…...
鸿蒙开发修改版本几个步骤
鸿蒙开发修改版本几个步骤 比如:5.0.4(16)版本改为5.0.2(14)版本 一、项目下的build-profile.json5 "products": [{"name": "default","signingConfig": "default&qu…...

Hive自定义函数案例(UDF、UDAF、UDTF)
目录 前提条件 背景 概念及适用场景 UDF(User-Defined Function) 概念 适用场景 UDAF(User-Defined Aggregate Function) 概念 适用场景 UDTF(User-Defined Table-Generating Function) 概念 适…...

【学习笔记】Circuit Tracing: Revealing Computational Graphs in Language Models
Circuit Tracing: Revealing Computational Graphs in Language Models 替代模型(Replacement Model):用更多的可解释的特征来替代transformer模型的神经元。 归因图(Attribution Graph):展示特征之间的相互影响,能够追踪模型生成输出时所采用…...
3D视觉重构工业智造:解码迁移科技如何用“硬核之眼“重塑生产节拍
一、工业视觉的进化论:从CCD到3D相机的范式革命 在汽车冲压车间里,传统CCD相机正面临四大检测困局: 平面感知局限:二维视觉无法捕捉曲面工件形变环境适应性差:反光板件导致误检率超12%动态捕捉延迟:传送带…...
Elasticsearch中的刷新(Refresh)和刷新间隔介绍
在 Elasticsearch 中,刷新(Refresh) 是控制索引数据何时对搜索可见的机制,而 刷新间隔(Refresh Interval) 则是配置该机制执行频率的参数。理解这两个概念对于平衡搜索实时性与写入性能至关重要。 一、刷新(Refresh)的本质 Lucene 索引结构与搜索可见性Elasticsearch …...

STM32标准库-TIM定时器
文章目录 一、TIM定时器1.1定时器1.2定时器类型1.1.1 高级定时器1.1.2通用定时器1.1.3基本定时器 二、定时中断基本结构预分频器时器计时器时序计数器无预装时序计数器有预装时序RCC时钟树 三、定时器定时中断3.1 接线图3.2代码3.3效果: 四、定时器外部中断4.1接线图…...
【算法训练营Day05】哈希表part1
文章目录 哈希表理论基础有效的字母异位词两个数组的交集快乐数两数之和 哈希表理论基础 几个值得关注的知识点: hash表用于快速的判断元素是否存在(空间换时间)其原理就是将数据通过散列函数映射到bucket中,如果发生hash碰撞&a…...
CMap应用场景和例子
CMap 详解 CMap 是 MFC (Microsoft Foundation Classes) 库中的一个模板类,用于实现键值对的映射关系(类似哈希表或字典)。它提供了高效的数据存储和检索功能,适用于需要通过键快速查找值的场景。 基本模板参数 cpp 运行 tem…...

Kafka 如何保证顺序消费
在消息队列的应用场景中,保证消息的顺序消费对于一些业务至关重要,例如金融交易中的订单处理、电商系统的库存变更等。Kafka 作为高性能的分布式消息队列系统,通过巧妙的设计和配置,能够实现消息的顺序消费。接下来,我…...

【算法题】算法一本通
每周更新至完结,建议关注收藏点赞。 目录 待整理文章已整理的文章方法论思想总结模版工具总结排序 数组与哈希表栈双指针(滑动窗口、二分查找、链表)树前缀树堆 优先队列(区间/间隔问题、贪心 )回溯图一维DP位操作数学…...

Modbus转Ethernet IP赋能挤出吹塑机智能监控
在现代工业自动化领域,小疆智控Modbus转Ethernet IP网关GW-EIP-001与挤出吹塑机的应用越来越广泛。这篇文章将为您详细解读这两者的结合是如何提高生产效率,降低维护成本的。首先了解什么是Modbus和Ethernet IP。Modbus是一种串行通信协议,它…...
C++中如何遍历map?
文章目录 1. 使用范围for循环(C11及以上)2. 使用迭代器3. 使用反向迭代器注意事项 在C中, std::map 是一种关联容器,它存储的是键值对(key-value pairs),并且按键的顺序进行排序。遍历 std::m…...