![](/img/trans.png)
[英]Creating new entities from PHP using the Microsoft Dynamics NAV 2016's Odata web services
[英]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
属性为someprop
的Property
元素。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.