云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

CDN_云服务器租用价格_折扣

小七 141 0

假设我们从未听说过CDS视图和BOPF。我们将如何创建OData服务?我们可以自己实现我们的服务(基于代码),而且有很多关于如何实现的博客和白皮书。为此,您必须使用gwapi来实现标准的OData系统查询选项(系统查询选项的前缀是"$"字符,例如$filter、$orderby等)。但是,sapgateway还允许您创建OData服务,而无需编写一行代码。您所做的只是在gatewayservicebuilder(事务SEGW)中进行一些建模,其余的都是由GW完成的,这听起来不是很神奇吗?这是惊人的,但并不是所有的工作都像我们中的一些人预期的那样。

我找不到太多的博客说明如何将数据库表映射到GW服务(更准确地说是映射到entityset),我也没有发现太多的陷阱。所以我写了这个博客。这就是我们要做的:

我已经验证了NW ABAP 7.5 SP04和NW ABAP 7.4 SP12上的示例。

创建DB表

我选择在SE11中创建一个非常简单的DB表。我的表将包含一些相当简单的客户数据:

在表中插入一些测试数据

要插入数据,您可以编写一个简单的报告:

通过从DB表(DDIC)导入字段来创建实体+实体集

在SEGW中有许多博客可以创建项目,所以我将跳过这个。一旦您创建了一个项目,继续如下操作,通过导入上面创建的DB表中的字段来创建一个客户实体和相应的实体集:

在实体的属性级别上,根据您的需要设置可创建、可更新、可排序、可空和可扩展的复选框。另外,请确保您有一个密钥集。

我已将生成的EntitySet从CustomerSet重命名为Customers(请参见下面的屏幕截图)。确保复选框可创建、可更新、可删除、可分页、可寻址,也可以在实体集级别为Customers实体集选中Searchable:

将实体集映射到DB table+gerenerate+publish

现在我们要将前面创建的DB table映射到Customers实体集的服务实现:

从打开的diealog中选择类型Business Entity,然后按F4帮助输入名称。在此之后,您可以选择您的DB表:

提示:您也可以直接在名称字段中输入名称DDIC~ZNABI\U CUSTOMERS。

接下来,我们要将DB表的字段映射到我们实体的属性。在我们的例子中,这非常简单–您只需按Generate Mapping按钮(参见屏幕截图):

保存所有内容后,确保按SEGW中的Generate按钮。在此之后,继续使用事务代码/IWFND/MAINT\u服务来发布OData服务。之后,您可以调用/IWFND/GW\u CLIENT在GW CLIENT中测试生成的OData服务。

触发GET\u ENTITY并从GW CLIENT获取\u ENTITYSET

假设服务已成功发布,我们可以开始使用我们的OData服务,即在GW CLIENT中。先触发GET ENTITYSET,什么是数据中台,然后再触发GET ENTITYSET:

CUSTOMERS GET ENTITYSET:/sap/opu/odata/sap/ZNABI\u CUSTOMERS\u SRV/CUSTOMERS?$format=json&$inlinecount=allpages

请注意,我们应用了OData系统查询选项$inlinecount,企业云服务器,它的工作非常出色。为了证明其他系统查询选项同样有效,请尝试调用以下命令:

/sap/opu/odata/sap/ZNABI\u CUSTOMERS\u SRV/CUSTOMERS?$format=json&$inlinecount=allpages&$skip=50&$top=2跳过前50个条目并返回下一个条目,即51和52:

/sap/opu/odata/sap/ZNABI\u CUSTOMERS\u SRV/CUSTOMERS?$format=json&$inlinecount=allpages&$skip=50&$top=2&$orderby=Kunnr DESC同上,但在Kunnr属性上有$orderby DESC:

注意,到目前为止我们还没有实现任何东西。这些问题起了很大的作用!这很酷,不是吗?下一步,让我们尝试GET\u ENTITY:

CUSTOMERS\u GET\u ENTITY:/sap/opu/odata/sap/ZNABI\u CUSTOMERS\u SRV/CUSTOMERS('1')?$format=json

效果也不错!

请注意,GW负责我们物业Kunnr的转换出口。这是天衣无缝的,因为底层域是KUNNR,您可以在那里找到ALPHA转换出口。有关SAP GW上转换的详细信息,请参阅Thomas Nitschke关于SAP Gateway Foundation中转换的伟大博客–第1部分。对我们来说,这意味着我们的客户端应用程序不会看到Kunnr的丑陋值,大数据存储技术,即"0000000001"。

触发从GW客户端创建实体/更新实体/删除实体–哎呀

不是很有趣。我们可以假设Create、Update和Delete也是开箱即用的。好吧,这是一个陷阱,因为它实际上不是开箱即用的。让我们通过GW客户端触发其中的每一个:

CUSTOMERS\u CREATE\u ENTITY:POST/sap/opu/odata/sap/ZNABI\u CUSTOMERS\u SRV/CUSTOMERS

CUSTOMERS\u UPDATE\u ENTITY:PUT/sap/opu/odata/sap/ZNABI\u CUSTOMERS\u SRV/CUSTOMERS('1')

CUSTOMERS\u DELETE\u ENTITY:DELETE/sap/opu/odata/sap/ZNABI\u CUSTOMERS\u SRV/CUSTOMERS('1')

案例我们基本上得到以下错误:

CX\u SADL\u ENTITY\u SRVICE\u NOT\u SUPP:请求的服务不受ENTITY~ZNABI\u客户支持

这是我没有预料到的。如果你做一些调试,你会得到一段有趣的代码: