课程地址很多SAP从业者反映openSAP上的视频因为网络原因无法访问,我会继续贴在我的个人微信公众号“王子熙”,将这些视频放上中文字幕并发布,敬请期待。本单元的主题是对SAPOData和注释的深入解释。以下是本单元视频讲解的中文字幕,全部由Jerry人工翻译。====欢迎来到OpenSAPFioriElements公开课第三单元。本单元介绍OData和注释。我叫StefanEngelhardt,是SAPFioriElements的开发架构师。在第二单元中,Marcel简要介绍了OData。每个FioriElements应用程序都需要一个OData服务。FioriElements对OData服务的后台技术栈没有特殊要求,因为OData协议本身就是对后台实现细节的抽象。下面深入介绍OData服务的核心概念。从数据模型的元描述入手每个OData服务都有其数据模型的元描述信息。屏幕右侧是我们通常简称为OData元数据的示例。在ODataurl后添加$metadata以查看其元数据。屏幕左下角的超链接是OData元数据的完整url。元数据定义业务模型及其属性。下图右侧是ODataV4的例子,定义了一个包含用户名的Person模型,FirstName等字段元数据中的属性也有进一步的定义。这些进一步的定义包括属性的数据类型,例如Edm。该字段称为导航字段。模型的导航字段表示模型与其导航目标模型之间的基数关系,即“一对一”或“一对多”。比如屏幕中名为Trips的导航属性指向目标模型Trip,类型为Collection,说明Person和Trip这两个模型是一对多的关系。此外,元数据还可以包含复杂类型、动作和单例等的定义。Marcel在上一单元介绍过OData支持增删改查操作,我们来看一些例子。在这里我们可以看到对OData服务的HTTP请求和响应。第一种情况是阅读所有的人。People类型是Person,在元数据中定义。HTTP响应包含相应的数据集。.结果列表中的第一条记录是RussellWhyte。我们还可以通过指定键来查询特定的Person记录。将键值russellwhyte添加到花括号中。可以在响应中看到请求只返回一条对应的数据下面我们来看一些使用$top的更复杂的查询,只返回前两条记录。使用$select,只读取FirstName和LastName字段,再次过滤结果集,条件是至少有一条Trip记录,成本3000多。可以看到,我们可以非常构造复杂的查询语句flexibly现在展示如何创建一个Person记录,使用HTTPPOST请求,并在请求文本中维护Person数据。响应返回HTTP201状态码,表示数据创建成功。为了提高Fiori的用户体验,SAP定义了一个标准化的处理机制,支持文档的Draft版本。通过Draft机制,用户对文档的编辑可以随时中断,也可以随时继续。只有当用户完成编辑后,文档数据才会存储在相应的数据库表中。在SAPFioriElements应用中,每当用户在编辑模式下添加或更改信息时,Draftversion这种自动保存的请求响应可能会包含一些提示信息,例如SalesArea的售达方未维护。当售达方数据发生变化时,HTTP响应包含该方的所有数据,以便显示在UI上,例如地址和联系信息。Draft机制使得应用程序具有动态交互的特性。请注意,草案机制应通过框架提供开箱即用的支持。如果在应用层面重新实现整个Draft处理机制,工作量是相当巨大的。Marcel在上一单元中还介绍了OData注释。这些注释在行为和消费方面为模型提供了更多的描述性信息。现在我将解释OData注解的工作原理,并举例说明注解是OData的附加元数据。格式是OData和SAP维护的词汇表中定义的XML注解表中的注解都是抽象定义,所以比较稳定,不会经常变化。它们可以被包括SAPUI5在内的消费者解析。SAPFioriElements解析注释并生成相应的UI页面。看一个具体的例子:TravelApp中ODataMeasures词汇表中的TotalPrice字段有一个ISOCurrency注解。OData元数据中的TotalPrice类型由其注解,指向目标字段CurrencyCode,让框架代码可以理解TotalPrice为货币金额,CurrencyCode字段包含货币单位。FioriElements在金额字段的右侧显示货币单位。这个注解也是用来根据货币单位显示对应的小数点,保证表格中金额的显示也能正确对齐。当然,可以定义更复杂的UI元素。例如,这些UI可以是UI.LineItem定义的表单,UI.FieldGroup定义的表单,UI.Chart定义的图表等。另外,注解还可以从行为的角度来描述应用。一个例子是在应用程序中提供添加、删除和修改。比如通过注解,可以指定Travel模型可以编辑,这样FioriElements就在UI上绘制了Edit按钮。工具栏中其他按钮的显示或隐藏逻辑也可以类推。另一种情况是所谓的副作用的定义。例如,当一个表格的订单项级别的产品单价发生变化时,UI需要再次从后台读取订单表头级别的最新总价信息。SAP系统后台可以提供基于ABAPCDS或CAPCDS的注解,也可以使用本地文件中定义的注解。对于UI,并不关心注解是来自后端服务器还是本地文件。CDSView中的注解由后端服务器翻译成XML格式的注解。后者由FioriElements框架解析。任何类型的后端服务器都可以使用XML格式的注释。后端服务器可以是SAP传统的ABAP编程模型、SAPBW和非SAP服务器。下图右边是ABAPCDS注解的例子。您通常对开发工具的偏好可能会影响您对注释类型的选择。在SAPFioriTools中,它提供的向导式创建步骤可以帮助我们创建正确的注解XML,CAPCDS注解都是SAPFioriTools所支持的。如果使用ABAPDevelopmentTool,可以直接在ABAPCDS中维护注解生命周期管理和功能可用性。它还会影响注释类型的选择。UI项目本地文件提供的注解具有相同的生命周期。应用是一致的。CDS注解的生命周期与OData服务实现一致。如果我们是在低版本的ABAP服务器上开发,可能有些注解是不支持的。如有疑问,请查阅文档。让我们总结一下本单元的内容。我们介绍了OData概念、OData元数据、OData请求和Draft机制的核心部分。我们还了解了OData注释是什么以及它们如何影响Fiori元素。现在可以期待下一个单元的内容了。届时,我们将介绍如何搭建FioriElements应用的开发环境。感谢收看本期视频,更多Jerry原创文章见下期,尽在:《王子熙》:
