尝试通过 Web API 创建记录时出现“未声明的属性”

问题描述 投票:0回答:5

我收到一个错误,我似乎无法调试。我正在尝试通过自定义 HTML/JavaScript Web 资源创建自定义活动实体。

用户单击按钮和以下参数:

var params = {
    '[email protected]': '/rob_faqs(guid-here)',
    'rob_source': 180840000,
    'subject': 'Signpost',
    'actualstart': new Date(),
    'actualend': new Date()
};

传递到此 URL:

https://dynamicsorg/api/data/v8.2/rob_quickactions/

具有以下标题:

xhr.setRequestHeader('OData-MaxVersion', '4.0');
xhr.setRequestHeader('OData-Version', '4.0');
xhr.setRequestHeader('Accept', 'application/json');
xhr.setRequestHeader('Content-Type', 'application/json; charset=utf-8');
xhr.setRequestHeader('Prefer', 'return=representation');

这给了我一个 HTTP 代码

400 (bad request)
和这个错误消息:

An undeclared property 'rob_faqid' which only has property annotations in the payload but no property value was found in the payload. In OData, only declared navigation properties and declared named streams can be represented as properties without values.

有趣的是,无论我使用实际的 GUID 还是在其中放入一些乱码(表明这与传入的值无关),我都会收到此错误。

我可以通过标准表格手动创建记录。

我在同一项目的其他地方使用

odata.bind
,没有错误。

javascript asp.net-web-api microsoft-dynamics dynamics-crm-online dynamics-365
5个回答
9
投票

睡了一夜好觉后,我意识到自己的错误。要设置查找字段的值,您需要使用关系方案名称,而不是属性名称。

一旦我改变了这一点,一切都工作正常。


8
投票

当您想通过 Web API 创建或更新(新)记录期间设置查找字段的值时,您必须使用查找的架构名称或逻辑名称,后跟绑定注释.

  • 对于像 primarycontactid 这样的
    default
    字段,必须使用 逻辑名称(屏幕截图中的第一列)。
  • 对于像rob_FaqId这样的
    自定义
    字段,必须使用模式名称(屏幕截图中的第二列)。
var params = {
    '[email protected]': '/rob_faqs(guid-here)',
    'rob_source': 180840000,
    'subject': 'Signpost',
    'actualstart': new Date(),
    'actualend': new Date()
};

解决方案 > 实体 > 您的实体 > 字段的屏幕截图:

因此,通过 Web API 创建具有已设置查找字段的新记录的一般结构如下:

{
  "[email protected]": "/relatedentitys(guid)" //don't forget the plural 's'
}

或者来自官方文档的另一个例子。如何创建新的客户记录并直接将现有联系人指定为主要联系人。

var newAccountRecordObj = {
  "name": "Sample Account",
  "[email protected]": "/contacts(00000000-0000-0000-0000-000000000001)"
}

7
投票

虽然在这种情况下接受的答案是正确的,但这似乎并不是故事的全部。在某些情况下,有必要使用

<logical name>_<entity name>
。例如,当做
POST sharepointdocumentlocations
时,我必须使用:

"[email protected]": "/contacts(xxxx)"
"[email protected]" "/sharepointdocumentlocations(xxx)"

这可能与这些关系可以指向不止一种类型的实体有关,但我还没有找到任何有关它的 Microsoft 文档。


0
投票

@Andy 的回答对于更深奥的命名来说是正确的,但我无法在脑海中映射它们对我的数据意味着什么。

为了找到我的工作价值,我最终强力尝试了在元数据 xml 中找到的 20 多个对

new_mylookupfield
(以及任何合作伙伴字段)引用的所有独特变体:

https://$yourCRMInstance.api.crm.dynamics.com/api/data/v9.2/$metadata

在我的例子中,所有记录的模式名称或关系名称都不起作用 - 它最终是(对于 查找字段:

new_mylookupfield
/实体:
new_mycustomentity
):

{new_mylookupfield[email protected]: "/systemusers(guid)"}

0
投票

我遵循了上述所有情况,但我的错误仍然没有解决。 在我的例子中,查找是对任务实体和查找引用实体的多表查找 是定制的(new_automobile)

请建议我的方法。 创建任务记录时发生错误

© www.soinside.com 2019 - 2024. All rights reserved.