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

时间:2016-02-22 00:04:25

标签: web-services odata metadata microsoft-dynamics dynamics-nav

环境

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

Microsoft Dynamics NAV 2016使用the Odata v3 standard

上下文

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

获取实体集合

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

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

获取单个实体

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

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

获取全局元数据

使用以下格式的链接,了解所有服务的$metadata工作正常(尽管它缺乏Json支持):

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

获取特定于集合的元数据

现在,基于the Odata v3 specs和我的客户概述服务的odata.metadata属性的值,我希望能够概览$metadata的{ {1}}实体,使用以下格式的链接:

customer

这并不像预期的那样有效。请参阅下面的https://<Server>:<WebServicePort>/<ServerInstance>/OData/$metadata#customer 小节。

获取特定于实体的元数据

同样,在检索单个客户时,基于the Odata v3 specs和我的数据集的The issue属性的值,我希望能够概述odata.metadata $metadata实体的单个字段,使用此格式的链接:

customer

这并不像预期的那样有效。请参阅下面的https://<Server>:<WebServicePort>/<ServerInstance>/OData/$metadata#customer/@<FieldName> 小节。

问题

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

实际问题

  • 是否可以获取一个集合或实体的元数据,因为我正在尝试上面$metadata部分的Fetching collection-specific metadataFetching entity-specific metadata子部分?< / LI>
  • 如果是的话,我在这里做错了什么?我错过了什么?

2 个答案:

答案 0 :(得分:1)

在评论中建议@xuzhg,并且像Support Metadata as a service (#181)这样的Github问题表明,似乎Odata $metadata并非真正的动态服务。相反,它只是一个XML文件。

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

答案 1 :(得分:1)

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

好消息是片段解除引用非常简单。像#customer这样的片段指定EntityType元素,其Name属性的值为customer。同样,#customer/@someprop会映射到Property属性为Name的{​​{1}}元素。