繁体   English   中英

在 Microsoft Dynamics NAV 2016 中使用 Odata Web 服务获取特定集合或实体的 $metadata

[英]Fetching $metadata for a specific collection or entity with Odata web services in Microsoft Dynamics NAV 2016

环境

作为集成项目的一部分,我需要一个能够读取和写入 Microsoft Dynamics NAV 2016 的 Odata 服务的 PHP 网站。

Microsoft Dynamics NAV 2016 使用Odata v3 标准


上下文

现在,让我们以我的customer服务为例。

获取实体集合

使用以下格式的链接获取我的customer实体集合的概述可以正常工作:

https://<Server>:<WebServicePort>/<ServerInstance>/OData/Company(\'<CompanyName>\')/customer

获取单个实体

使用具有以下格式的链接,基于id获取单个customer实体可以正常工作:

https://<Server>:<WebServicePort>/<ServerInstance>/OData/Company(\'<CompanyName>\')/customer(\'<Id>\')

获取全局元数据

使用以下格式的链接获取我所有服务的$metadata概览可以正常工作(尽管它缺乏 Json 支持):

https://<Server>:<WebServicePort>/<ServerInstance>/OData/$metadata

获取特定于集合的元数据

现在,基于 Odata v3 规范和我的客户概览服务的odata.metadata属性的值,我希望能够使用具有以下格式的链接获得customer实体的$metadata的概览:

https://<Server>:<WebServicePort>/<ServerInstance>/OData/$metadata#customer

这不能按预期工作。 请参阅下面The issue小节。

获取实体特定的元数据

同样,在检索单个客户时,基于 Odata v3 规范和我的数据集的odata.metadata属性的值,我希望能够获得customer实体单个字段的$metadata的概述,使用这种格式的链接:

https://<Server>:<WebServicePort>/<ServerInstance>/OData/$metadata#customer/@<FieldName>

这不能按预期工作。 请参阅下面The issue小节。

问题

出于某种原因, $metadata之后的所有内容似乎都被忽略了。 这意味着最后三个 URL 给了我完全相同的输出,这不是我所期望的。


实际问题

  • 是否可以仅获取一个集合或实体的元数据,就像我在上面的“ Fetching collection-specific metadata ”和“ Fetching entity-specific metadata ”的子部分The context尝试的那样?
  • 如果是,我在这里做错了什么? 我错过了什么?

正如@xuzhg在评论中所建议的那样,正如支持元数据即服务 (#181)等 Github 问题所表明的那样,Odata $metadata似乎并不是真正的动态服务。 相反,它只是一个 XML 文件。

这不仅解释了为什么在格式https://<Server>:<WebServicePort>/<ServerInstance>/OData/$metadata#...的链接中忽略 $metadata 之后的任何内容,而且解释了为什么它只支持 XML,而不支持Json(与实际的 Odata 服务不同)。

由于您想要的特定元数据由附加到元数据 URI 的片段标识,因此您必须获取整个$metadata文档,然后在客户端取消引用该片段。

好消息是片段解引用非常简单。 #customer类的片段指定了一个EntityType元素,其Name属性的值为customer 同样, #customer/@someprop映射到Name属性为somepropProperty元素。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM