环境
作为集成项目的一部分,我需要一个 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
的概览。的customer
实体,使用以下格式的链接:https://<Server>:<WebServicePort>/<ServerInstance>/OData/$metadata#customer
这不会按预期工作。见小节
The issue
以下。获取特定于实体的元数据
同样,基于 the Odata v3 specs以及
odata.metadata
的值检索单个客户时我的数据集的属性,我希望能够获得 $metadata
的概述customer
的单个字段的实体,使用具有以下格式的链接:https://<Server>:<WebServicePort>/<ServerInstance>/OData/$metadata#customer/@<FieldName>
这不会按预期工作。见小节
The issue
以下。问题
出于某种原因,以下所有内容
$metadata
似乎被忽略了。这意味着最后三个 URL 给了我完全相同的输出,这不是我所期望的。实际问题
Fetching collection-specific metadata
中尝试的那样和 Fetching entity-specific metadata
我的 The context
以上部分? 最佳答案
如 @xuzhg在评论中提出建议,正如 Support Metadata as a service (#181) 等 Github 问题所指出的那样,看来 Odata $metadata
并不是真正的动态服务。相反,它只是一个 XML 文件。
这不仅解释了为什么在格式 https://<Server>:<WebServicePort>/<ServerInstance>/OData/$metadata#...
的链接中 $metadata 之后的任何内容都被忽略了。 ,以及为什么它只支持 XML,而不支持 Json(与实际的 Odata 服务不同)。
关于web-services - 使用 Microsoft Dynamics NAV 2016 中的 Odata Web 服务获取特定集合或实体的 $metadata,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35543769/