云网站服务器_国内数据云存储_移动云数据库服务器主机-搜集站云

云数据库_服务器502_限时特惠

小七 141 0

或:

如何实施深嵌件在里面SAP云应用编程模型远程服务

快速链接上的深度插入:项目文件第一部分:简介第2部分:UUID第3部分:多层次第五部分:使用SDK

我的意思是:我们正在用CAP创建一个OData服务,所以我们正在配置一个OData服务与以前不同的是,我们的服务不使用数据库来读写数据相反,我们希望使用现有远程OData服务的数据(例如s4hana)所以我们正在使用OData服务明白了吗?不每当我们服务的用户调用我们的服务来获取数据,然后我们的服务调用远程服务来使用数据,然后我们的服务将数据提供给用户。明白了吗?嗯…也许图表可以帮助

在前面的教程中已经介绍了资源调配方面。今天我想描述如何在消费端执行深度插入

目标

我们将创建一个odatav4服务,该服务连接到现有的远程odatav2服务。我们的OData V4服务支持deep insert,通过在远程OData v2服务上使用deep insert创建

场景:我们使用非常小的定制模型公开了一个odatav4服务该服务应该允许创建简单的订单以及相应的订单项目我们在数据库中没有持久性,因为有一个现有的远程odatav2服务,我们可以重用它远程服务的数据模型略有不同当我们的V4服务的用户执行创建操作时,我们调整数据并将其发送到远程服务

下面的描述显示了在深度插入时如何处理它

注意:关于连接到远程OData服务:在这个博客中,我们使用的是内置的通用库,而不是sapcloudsdk泛型库需要更多的编码工作,但这是一种很好的学习体验下一个教程将展示如何使用sapcloudsdk来实现相同的结果

前提条件

1)我们需要一个远程OData服务,我们可以从实现代码中调用它远程OData服务必须是公开的和免费的它必须支持写操作,否则我们无法测试深插入幸运的是,有一个满足我们需求的解决方案:odatav2参考服务要访问它,您需要注册SAP网关演示系统(简单)公告博客:演示系统可用如何在演示系统中获得帐户:注册演示系统关于示例服务的SAP文档

示例OData V2服务URL:https://sapes5.sapdevcenter.com/sap/opu/odata/iwbep/GWSAMPLE\u基本

2)另一个先决条件是关于深度插入的第一个教程,我们创建了一个名为DeepInsertRemote和java包的CAP项目com.example公司我们使用OData协议版本V4

注:OData版本对实现

CDS

数据模型并没有真正的影响我们的小CDS模型定义了两个相互关联的实体

我们从订单到项目有一对多的关系这是一篇有管理的"作文"为什么不联想?我们也可以把它定义为许多联想,没有太大区别。那为什么是"作文"?但通过选择"组合",我们声明"项目"只属于它们的"顺序"。将"Item"集合称为独立集合是没有意义的。请注意,"Item"不是"Product",它只是订单列表中的一个条目,订购者在其中记下订购了哪些东西因此,在服务定义CDS文件中将关联定义为"组合"

服务定义

是有意义的,我们需要确保我们的实体没有"自动公开"。注:Autoexposed意味着您可以定义模型和服务,然后进行部署,并且您有一个连接到数据库的正在运行的OData服务。意思是:不需要编码,所以"autoexposed"

在我们的例子中,我们不需要数据库,因为我们使用现有的远程odatav2服务来获取和存储数据。意思是:没有自动曝光,所以需要编码这意味着我们必须手动编写每个操作的代码(见下文)

为了声明我们不想要"自动曝光",我们不想要数据库,我们自己实现一切,我们在实体中添加了以下注释:

整个文件内容见附录

实现

到所需的java实现,我们知道我们需要自己编写所有操作(查询、创建等)。但是,在这个博客中,我们想重点介绍deep insert的实现,所以我们跳过了所有其他操作,只实现CREATE

的钩子注意:在我们的@Create实现中,我们甚至不支持正常的Create,没有内联数据

那么我们需要做什么呢?我们实现了CREATE操作,我们需要支持deep insert

通常,CREATE操作的工作原理如下:

在我们的例子中,第二点是指在远程服务上进行CREATE因此,我们服务的用户(V4)调用我们并发送一个包含嵌套(内联)实体(deepinsert)的有效负载我们将有效载荷发送到远程odatav2服务,再次作为深度插入。

听起来很简单是的,但是有一些繁琐的手工工作要做:

我们的数据模型与远程数据模型不匹配:它的结构相似,但属性名不同所以我们不能简单地转发有效载荷。我们必须适应它。因此,我们的具体步骤如下:

看起来不太糟是的,淘客系统开发,但是…。繁琐的手工工作在helper方法中我们到底要做什么?

1. 获取请求负载我们接收传入的(v4)请求有效负载作为map

2。转换我们创建一个新的映射,用于发送到远程v2服务

我们从v4映射中取出每个属性

并放入v2映射

这一行显示了不同属性名称的映射

在转换时还有一个任务要做:如果远程服务有我们的服务不支持的附加要求,我们需要手动完成它。在我们的简单示例中,我们只是硬编码一些值:

到实际的深度插入,嵌套的内联数据(关联的实体):我们以嵌套地图的形式获取嵌套数据,通过导航属性进行访问,然后像往常一样进行处理

该行显示嵌套地图不是地图,而是列表。原因是我们建立了一对多的关联模型,所以我们得到了很多嵌套映射

为了进行转换,我们有3个助手方法,一个用于顶级实体(父实体,OrderEntity)一个来看看名单第三,淘客平台,对每个嵌套映射(children,ItemEntity)