这是另一个教程,是解释SAP云平台后端服务的详细信息。
在前面的一个教程中,我们学习了如何将服务定义移到一个单独的部分中。在本教程中,我们将再次关注这个主题。在服务定义部分,物联网传感器,您可以添加select语句我不得不说,这是相当强大的听起来不错
到目前为止,我们已经做了如下工作:
在数据模型中定义实体,在服务模型中,将要公开的实体定义为projection on…
现在,我们将使用select语句来代替projection.
首先,让我们比较两个相同的表达式:
如果您基于此模型创建API,您将看到OData服务有两个完全相同的EntityTypes。如果您创建一些数据并使用两个实体集获取集合,那么您将收到完全相同的负载。
注意:您可以使用通配符:
现在让我们尝试一个不同的示例。
在这个服务定义中,我们使用投影和select语句公开一个实体和第二个实体
在这两种情况下,数据都是从同一个表中获取的。此外,select语句允许选择所需的列除此之外,还可以指定一个过滤器(where)。像这样,我们可以做非常精细的建模。
这意味着在这个例子中,返回的集合对于"Customers"和"CustomersUSA"是不同的如果是"CustomersUSA",则直接在数据库上应用一个过滤器
注意:有时在使用后台服务时,我会感到有点不满意,因为我看不到后台到底发生了什么。比如查数据库。阅读日志等也就是说,无服务器计算有缺点你有同感吗?我觉得累了好吧,算了吧
看下面一个完整的例子:
我们有所有客户的正常收款。此外,我们有一个收集,我们只得到客户位于我们的祖国(在这个例子中,它是美国)第三个集合给出了一个通配符和只获取空值项的示例(例如,用于维护或任何用例)
尝试:
在API生成后,创建一些示例数据。
使用(通用)"Customers"集合创建多个项。例如:
{"id":1,"name":"customer1",云淘,"country":"美国"}
某些具有该属性值的条目:"country":"IND"
有些根本没有国家,例如:
{"id":4,"name":"customer4"}
在创建一些示例数据后,调用2个集合,这2个集合的引擎盖下有一个select语句。我想看看引擎盖下面有什么…我觉得很累…
但首先看到的是满负荷,我们使用(通用)"客户"集合:
https://backend服务…/…//客户
结果如下:
然后是美国的"家庭客户"
https://backend服务…/…//家庭客户
最后收集无效条目:
https://backend服务…/…//HomelessCustomers
我们在这里看到的是,我们有3个实体集在同一个数据库表上运行,每个实体集显示一个不同的条目列表。
最后一个示例看起来很奇怪
是的,我们显式地列出条目以始终看到一个null属性。如果我已经指定了空值,为什么我必须看到它?是的,这可以加强。我们可以排除那些我们不需要看到的属性。怎么用?保持安静,继续下一个例子我们在select中添加了一个"excluding",只是为了表明这是可能的,返利是什么意思,我们再加一个过滤器,我们添加了一个别名…为什么?…只是为了表明这是可能的
别名的工作方式和我们从投影中已经知道的一样。此外,排除在外也并不意外。如您所见,复杂的filter语句是可能的。这并不复杂可能
试用:
API生成后,创建一些样本数据。
{"id":1,"name":"customer1","country":"美国"}
{"id":2,"name":"Customer2"}
{"id":3}
随后查看包含所有3个条目的"Customers"实体集,并与仅包含一个条目的"HomelessCustomers"实体集进行比较。此外,exclude和别名也起作用:
只是另一个select语句的示例
您可以像往常一样测试它,创建id号为1、2和11的条目当调用Customers集合时,所有3个条目都会出现,当调用FirstTenCustomers集合时,只显示2个
请看这种过滤器是如何工作的。使用关键字"like"和带有占位符的字符串。例如:
对于测试,使用以下有效负载创建一些条目:
{"id":1,"name":"customer1","country":"未知"}{"id":2,"name":"customer2","country":"不知道"}{"id":3,"name":"customer3","country":"美国"}{"id":4,"name":"customer4","country":"不是现在"}
在测试实体集时,您会看到"CustomersUnknown"只包含前2个条目。条目3和条目4与"like"表达式不匹配。
本例显示了where子句如何缩短。而且,它还显示了"不是"和"是"之间的区别!=
{"id":1,"name":"customer1","country":"美国"}
{"id":2,"name":"customer2","country":"GER"}
{"id":3,"name":"customer3"}
结果:"CustomersNotNull"集合将显示前2个条目"CustomersNotUSA"集合将只显示第二个条目
假设您创建了一个服务,并且您希望对允许使用该服务的用户有细粒度的限制。E、 例如,通常不允许管理员用户调用服务和查看客户数据