189 8069 5689

SAPOData编程该如何理解

SAP OData编程该如何理解,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

我们注重客户提出的每个要求,我们充分考虑每一个细节,我们积极的做好网站设计制作、成都网站建设服务,我们努力开拓更好的视野,通过不懈的努力,创新互联赢得了业内的良好声誉,这一切,也不断的激励着我们更好的服务客户。 主要业务:网站建设,网站制作,网站设计,小程序开发,网站开发,技术开发实力,DIV+CSS,PHP及ASP,ASP.Net,SQL数据库的技术开发工程师。

OData(Open Data Protocol)协议是一个开放的工业标准,用于定义RESTFul API的设计和使用。

目前OData被广泛用于SAP Business Suite和SAP S/4HANA的众多Fiori应用中,以及SAP Customer Engagement Center和一些正在开发的新一代云产品中。此外OData也是SAP Cloud for Customer推荐的一种将C4C和客户第三方应用集成的技术手段。

在SAP Business Suite中进行OData开发

以SAP CRM为例。SAP对于很多Fiori应用都贴心地提供了可以云端试用的版本,通过如下链接访问:

https://www.sapfioritrial.com/

点击链接之后,在Fiori Launchpad里能看到CRM目录下存在若干Tile,它们是SAP成都研究院CRM Fiori开发团队负责开发和维护的。随便点击一个Tile, 比如My Opportunities:

SAP OData编程该如何理解

然后我们能看到该应用的明细页面了。在Chrome开发者工具的Network标签页,我们能观察到一个对于metadata的请求:

SAP OData编程该如何理解

我们把这个metadata请求的url从Chrome开发者工具里拷贝出来,完整链接如下:

https://www.sapfioritrial.com/sap/opu/odata/sap/CRM_OPPORTUNITY/$metadata?sap-language=en&sap-client=001

直接在浏览器里访问这个链接,就能观察到包含在链接里名为CRM_OPPORTUNITY的OData服务的metadata(元数据)。我们可以把一个OData服务的模型类比成一个SAP Business Object,该模型同样由一个根节点和若干子节点组成,每个节点包含若干字段。某些节点提供了一些可以执行的逻辑,在OData协议里称这些逻辑为function import(相当于Business Object里的action)。不同节点之间通过定义Navigation建立关联关系——SAP基于Netweaver的不同产品的建模方式思路都类似,可以触类旁通。

SAP OData编程该如何理解

另一个重要的请求:

https://www.sapfioritrial.com/sap/opu/odata/sap/CRM_OPPORTUNITY/Opportunities?$skip=0&$top=20&$inlinecount=allpages&sap-client=001

SAP OData编程该如何理解

请求的分析:

  • $skip=0&$top=20:通知后台执行分页搜索,只将满足查询条件的前20条记录从数据库取出,返回给UI。

  • $inlinecount=allpages: 返回数据库满足搜索条件的记录数。因为Jerry未指定搜索条件,所以返回系统里Opportunity的总个数1051。

下面简单介绍SAP Business Suite系统里如何开发OData模型和服务。

在动手开发前,我们需要先温习Fiori的架构。

SAP Fiori应用:

SAP OData编程该如何理解

谈到Fiori开发时,就这张图而言,可以总结成两句话:

1. 在ABAP Back-End服务器上做OData模型和服务的开发

2. 在ABAP Front-End服务器上做OData服务的注册,以便让Fiori应用能够消费

首先我们到ABAP Back-End服务器上,使用事务码SEGW打开CRM_OPPORTUNITY这个OData服务。可以看到Data Model里包含了很多节点,每个节点实际上由一个ABAP DDIC Structure实现,节点上的每个字段对应着Structure上的字段。我们定义好OData模型包含哪些Structure之后,点击工具栏的Generate Runtime Objects按钮:

SAP OData编程该如何理解

SAP Gateway框架就会基于我们定义的OData模型,自动生成4个ABAP类和两个模型。

SAP OData编程该如何理解

MPC和MPC_EXT:当消费者访问该服务的metadata时,这两个类负责把通过ABAP DDIC Structure描述的metadata信息转换成OData协议规范的格式并返回。每次开发人员修改OData模型,点击Generate按钮后,MPC的代码都会重新生成。如果开发人员需要在模型上添加一些额外信息,比如一些版本控制信息或者相关注解(annotation),那么需要在MPC_EXT里通过ABAP代码实现。MPC_EXT是MPC的子类,其代码不会被Generate按钮覆盖。一个例子如下:

SAP OData编程该如何理解

DPC和DPC_EXT:包含了OData服务的实现,实际上也就是基于OData模型的CRUD操作,搜索操作和function import的实现。以Opportunity为例,因为该模型底层使用的是CRM One Order模型,所以DPC_EXT里包含了大量CRM_ORDER_*等函数调用,CRM顾问朋友们对这些函数应该非常熟悉。

在ABAP Back-End服务器做好OData开发后,登陆ABAP Front-End服务器,使用事务码/IWFND/MAINT_SERVICE将后台服务器做好的OData服务进行注册。

下图是OData服务在ABAP Front-End服务器的注册界面。从下图能看出理论上一台ABAP Front-End服务器可以连接多台ABAP Back-End服务器,

SAP OData编程该如何理解

SAP把这种1:N的关系称为Multiple Origin Composition,典型的使用场景比如一家跨国企业,其美洲分公司的应用运行于Back-End服务器1,欧洲分公司位于Back-End服务器2。一个销售经理使用Fiori应用查看该企业某个时间段内全球的销售数据,则其OData实现会将这两台服务器的后台数据搜集起来,进行汇总并返回给UI。

在S/4HANA中进行OData开发

CDS view是S/4HANA里一个重要的建模方式。

我们还是来看个具体的例子。假设需要在S/4HANA里开发一个管理Service Order的Fiori应用,功能暂定为支持对Service Order的只读操作,即查询和浏览。借助S/4HANA的CDS view建模技术,我们不需要写一行JavaScript,就可以自动生成一个满足需求的Fiori应用,听起来是不是很神奇?

我们需要创建一个CDS view,用它来自动生成OData的模型和服务,即下图绿色的Z_C_Service_Order_View。该View又从其他更底层的CDS view取数据,将Service Order的抬头,行项目,状态信息等数据聚合在一起。

SAP OData编程该如何理解

CDS view开发完毕后,只需要在事务码SEGW里将其通过Reference->Data Source加载进去:

SAP OData编程该如何理解

SAP OData编程该如何理解

就可以自动生成OData模型,以及前一章节提到的MPC和DPC各两套一共4个ABAP Class,分别对应下图蓝色和红色区域所示,无需应用开发人员再写ABAP代码。

SAP OData编程该如何理解

然后用SAP WebIDE创建一个新的Fiori应用,注意创建时不要使用普通的SAPUI5 Application模板,而采用Smart Template Application模板。在创建向导里指定之前基于CDS view自动生成的OData服务。

SAP OData编程该如何理解

点击向导的Finish按钮,最终不用写一行JavaScript代码,就得到这样一个Fiori应用:

SAP OData编程该如何理解

上图提到的CDS view的源代码,以及Smart Template的工作原理。

更进一步,如果想给这个自动生成的Fiori应用增添一些功能,例如支持对Service Order的修改和创建操作。

值得一提的是,在CDS view里有一个强大的注解:

@OData.publish: true

和SpringBoot的注解能实现很多神奇的功能一样,被该注解定义过的CDS view,能够不借助SEGW的帮助,自动生成OData模型和服务,进一步简化了开发人员做OData开发需要的配置,有助于开发人员快速构建出标准化的OData服务。

SAP OData编程该如何理解

OData服务的消费

前面说了这么多都是OData模型和服务的开发,现在来谈谈如何消费。

使用ABAP代码消费OData服务

以消费C4C Opportunity的标准OData服务为例。

首先在postman里搞清楚如何使用HTTP Post加上OData的$batch操作来创建Opportunity:

SAP OData编程该如何理解

其实最主要的工作量就是把$batch操作的一整套流程用ABAP代码实现。$batch请求的body通过下图代码里insert_line这个自定义宏操作的一系列字符串去填充。

SAP OData编程该如何理解

因为ABAP Netweaver既可作为Web Server,又可作为Web Client,所以使用ABAP代码消费OData这种RESTFul API,实质上是利用了IF_HTTP_CLIENT的SEND和RECEIVE方法,进行网络请求的发送和接收。

SAP OData编程该如何理解

使用Java代码 + Apache Olingo消费OData服务

相信大多数开发人员都不愿意像下面的代码这样直接操作OData $batch body,既麻烦又容易出错。

SAP OData编程该如何理解

于是在Java里就有了Apache Olingo,一个开源库,您可以把它当成OData的Java SDK,封装了OData底层的细节。$batch操作需要填充的BatchChangeSet和BatchChangeSetPart在Olingo里都有了对应的类进行封装,看看下图使用Java代码调用OData服务进行ServiceTicket 的创建,和上图ABAP代码进行比较,是不是从语义上看清晰了很多?

SAP OData编程该如何理解

上图的完整Java代码

使用UI5消费OData服务

在SAP UI5官网上能找到详细的API说明。

SAP OData编程该如何理解

Jerry只补充两点原创内容。

1. UI5 OData API的同步和异步参数。

SAP OData编程该如何理解

SAP OData编程该如何理解

下图是5个请求以同步模式发出在Chrome开发者工具Network标签页中观察到的时序:

SAP OData编程该如何理解

下图是5个请求以异步模式发出:

SAP OData编程该如何理解

2. 在SAP云平台的CloudFoundry环境下消费ABAP On-Premise OData服务

场景:在微信里消费On-Premise系统的OData服务。

SAP OData编程该如何理解

OData性能测试

1. 使用Netweaver提供的性能测试工具

SAP OData编程该如何理解

2. 使用JMeter测试OData服务在高并发场景下的性能指标

在之前工作过的客户项目里,很多客户提出了这种性能测试要求,比如同时发起1000个Service Request的OData创建请求,测量其平均响应时间。

两种办法:

(1) 自己写Java代码,用多线程编程技术,每个线程发起一个OData创建请求,自己度量平均响应时间。

(2) 使用性能测试神器JMeter,这样一行代码都不用写。

SAP OData编程该如何理解

Kapsel OData plugin原理讲解

SAP移动解决方案的Offline(离线)模式使用了Kapsel OData plugin,用于将业务数据从后台系统抽取出来,保存于设备本地的离线存储区域。

SAP OData编程该如何理解

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联行业资讯频道,感谢您对创新互联的支持。


网站栏目:SAPOData编程该如何理解
文章分享:http://cdxtjz.cn/article/ipsdgs.html

其他资讯