【发布时间】:2022-05-26 02:24:15
【问题描述】:
环境
作为集成项目的一部分,我需要一个能够读取和写入 Microsoft Dynamics NAV 2016 的 Odata 服务的 PHP 网站。
Microsoft Dynamics NAV 2016 使用 the Odata v3 standard。
上下文
现在,让我们以我的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
获取特定于集合的元数据
现在,基于我的客户概览服务的the Odata v3 specs 和odata.metadata 属性的值,我希望能够使用customer 实体获得$metadata 的概览链接格式如下:
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 给了我完全相同的输出,这不是我所期望的。
实际问题
- 是否可以仅获取一个集合或实体的元数据,正如我在上述
The context部分的子部分Fetching collection-specific metadata和Fetching entity-specific metadata中尝试的那样? - 如果是,我在这里做错了什么?我错过了什么?
【问题讨论】:
-
您似乎正在寻找作为服务的元数据。它现在在 ODL 中不支持,在 Dynamics CRM 中也不支持。见issue
-
@SamXu :那么,这是否意味着元数据真的只是一个静态文件?!实际上,这可以解释很多!
-
到目前为止,我是这么认为的。但是,元数据对客户来说是有用且必要的。例如,OData 客户端或类似客户端可以读取元数据内容以生成用于访问服务的代码。
标签: web-services odata metadata microsoft-dynamics dynamics-nav