在上一篇博客中,南京大数据,我们学习了如何基于SAP云平台SDK进行服务开发,在OData V4服务中定义和实现两个实体之间的导航在我们的例子中,我们可以从一个人导航到他的工作一对多导航:在我们的示例中,我们可以从一个作业导航到所有拥有此作业的人员。
在当前的博客中,我们将添加更多的用例:
单个实体的一对多导航和访问:在我们的例子中,我们从一个工作导航到另一个人,但不是所有的人:我们只阅读其中一个在导航上创建:是的,可以在指向导航属性的URL上触发创建请求系统查询选项:导航到集合时,可以应用$top之类的查询选项$扩展:fwk以一种通用的方式支持$expand,在我们已经完成的基础上不需要额外的代码。
您可能已经注意到,这个博客是我们为使用SAP云平台SDK进行服务开发的初学者提供的系列博客的一部分(请参阅此处了解更多信息)
关于OData和edmx没有什么新的内容。不过,实现中的一些附加方面在这里是新的,这并不奇怪使用该服务时的一些用例,也不会让您感到惊讶
前提条件:请参阅此处
请参阅此处了解如何创建项目。
我们可以重用上一篇博客中使用的相同edmx文件。无需更改
首先,我们可以重用上一篇博客中使用的相同java文件。我们以后会加强的。好的,我让你复制文件,同时我会等待…
…
…复制…
…
好的,既然你已经复制了java文件,让我们添加所需的代码。
这在导航中有点特殊。正如您所意识到的,当从一个工作导航到指定的人员时,云服务器好吗,我们最终会出现在一个列表中。这是一张单子。我是认真的:这是一张单子。即使列表是空列表或只包含一个条目的列表…它仍然是一个列表,因为我们已经这样建模了。所以,如果它真的是一个列表…为什么不处理列表中的一个条目呢?就像我们正常阅读一样?
让我们看一下我们的例子:
我们可以为一个人做一个读取:
https:///odata/v4/DemoService/People(2)
现在,我们也可以为跟随导航时得到的人员列表做一个读取。换言之:有一个名单上的人都有相同的工作。现在我们只想读这个列表中的一个人。
URL如下:
https:///odata/v4/DemoService/Jobs(1)/Employees(2)
这是什么意思?
实现部分与之前的博客相同:Job->People注释看起来非常相似,唯一的区别是@Read而不是@Query
第一步:我们首先需要获得拥有所选工作的人员的列表。
第二步:从URL获得被请求的人员。
第一步之后,我们有一个拥有该工作的人员的列表。然后我们想看看这个清单。在我们阅读之前,我们必须知道我们要读的是谁。它在URL中。我们得到的信息就像在一个正常的阅读:
第3步:找到被请求的人
这是有被请求的工作的人的名单,我们通过导航访问这个名单一旦我们找到它,我们可以返回它。
第四步:小错误处理
如果用户指定了一个有效但不是真的密钥怎么办?抱歉,这个晦涩的短语…
我的意思是:我们知道这个人存在,我们可以为它做一个读取:
…/DemoService/People(4)
如果我们使用导航+读取:
…/DemoService/Jobs(2)/Employees(4)
我们得到相同的人,所以如果我们调用:
…/DemoService/Jobs(1)/Employees(4)
我们指向一个现有的人,但是,这个调用必须失败,因为这个人没有工作(1)如果上一步中的循环没有找到一个人,那么这就是我们假设的错误因此,最后我们可以返回这样的错误响应:
规范说明了实体的创建:
对于我们这些必须实现此要求的人来说,这意味着:实现一个CREATE操作,把源实体考虑进去,
换言之:
对于注解,我们已经使用了两次如下注解属性:
@Query(serviceName="DemoService",大淘客网,entity="People",sourceEntity="Jobs")
@Read(serviceName="DemoService",entity="People",sourceEntity="Jobs")
现在同样,属性是相同的,我们只需更改操作:
@Create(serviceName="DemoService",entity="People",sourceEntity="Jobs")
换言之:
一对多导航最终进入一个集合e、 g.
https:///odata/v4/DemoService/Jobs(2)/Employees
如您所知,当触发"正常"POST请求时,通常针对集合触发…那为什么不用这个收藏呢?
导航属性上的CREATE代码与普通CREATE几乎相同。区别在于:"普通"创建使用请求主体作为输入此"特殊"创建使用请求主体,但也使用URL作为输入
更具体。
URL显示我们创建了一个"人员"(因为"雇员"的类型为"人员")
https:///odata/v4/DemoService/Jobs(2)/Employees
创建"人员"时,我们需要以下属性来填充数据:
当执行"正常"创建时,这些属性在请求负载中指定(我们在以前的博客中已经这样做了)
例如
但是,云估价,如果是在导航属性上创建,我们在URL中已经有了"JobId"的值,它是一个2:
https:///odata/v4/DemoService/Jobs(2)/Employees