我的公司正在使用 Dynamics 365 CRM,我们添加了一堆自定义表,其中有很多相互查找字段。当某些事件发生时,我尝试使用 javascript 更新其中一些查找字段。我已经遵循了文档(虽然是最少的) 我基于此的代码是:
Xrm.WebApi.updateRecord("new_nursesdatabase", "aa09e593-a624-ed11-b83e-000d3a371e11", {"[email protected]": "/new_personnelstatus_custom(5052e892-5aee-ec11-bb3d-000d3a5a2232)"}).then(function success(result) {console.log(result)})
其中第一个
new_personnelstatus_custom
指的是 new_nursesdatabase
中的字段,第二个指的是第一个字段指向的表(我不是为这些实体创建逻辑名称的人)。
运行它,我收到此错误:
[storage] Error Messages:
1: Error identified in Payload provided by the user for Entity :'', For more information on this error please follow this help link [Removed to avoid spam filter] InnerException : Microsoft.OData.ODataException: The navigation property 'new_PersonnelStatus_Custom' has no expanded value and no 'odata.bind' property annotation. Navigation property in request without expanded value must have the 'odata.bind' property annotation.
我按照错误代码中提供的链接进行操作,并被那里的文档告知要确保导航属性存在,通过搜索 CSDL 元数据文档,我确实找到了 new_personnelstatus_custom 字段,尽管它使用了架构名称 new_PersonnelStatus_Custom 而不是逻辑名称我在上面使用过,更改它并运行:
Xrm.WebApi.updateRecord("new_nursesdatabase", "aa09e593-a624-ed11-b83e-000d3a371e11", {"[email protected]": "/new_personnelstatus_custom(5052e892-5aee-ec11-bb3d-000d3a5a2232)"}).then(function success(result) {console.log(result)})
但是我收到此错误消息:
[storage] Error Messages:
1: URL was not parsed due to an ODataUnrecognizedPathException. Resource not found for the segment provided in the URL.
(表名大写没有区别)。我不确定这是向前进度还是向后进度,就好像我将字段名称拼写错误,这让我遇到了第一个错误,因此它清楚地识别了这个实体,而不是非大写版本,它似乎对待相同的作为一个虚构的领域。这是一个单值查找字段,即它一次只能有一个值,并且只能引用一个表,因此这不是多表查找问题,提供的 GUID 是直接从记录中获取的,因此应该是准确的(我希望如果其他一切都正常并且它们错了,我会得到不同类型的错误)。我已经在互联网上搜索过,但没有发现任何迹象表明该代码不应该按编写的那样工作。
使用 Guido Preite 提供的 Dataverse REST 构建器后,我能够找到导致问题的丢失字母。显然,您需要使用列的架构名称,并且似乎您需要使用表的“复数逻辑”名称。我没有找到任何对逻辑名称的引用,我必须深入研究 REST 构建器底层的代码才能找出它在哪里找到的,但显然我需要在表中使用 new_personnelstatus_customs 而不是 new_personnelstatus_customs,尽管 new_personnelstatus_customs 两者都不是逻辑名称 (new_personnelstatus_custom) 或模式名称 (new_PersonnelStatusCustom),我只能假设 Dataverse 将逻辑名称复数化该表在某些情况下如果属实就很奇怪。
您已经解决了问题,但以防万一将来有人遇到问题 - Dynamics API 要求表名称为复数(联系人 -> 联系人),但如果您的表已命名为联系人,则需要使用“联系人”(添加 -es)。欢迎来到这个荒谬的世界。