作为集成项目的一部分,我需要一个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 metadata
和Fetching entity-specific metadata
子部分?< / LI>
答案 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}}元素。