8

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

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

var params = {
    'rob_faqid@odata.bind': '/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在同一个项目中使用其他地方没有错误。

4

3 回答 3

9

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

一旦我改变了它,一切都很好。

于 2017-05-15T18:02:08.910 回答
6

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

  • 对于默认字段,例如必须primarycontactid使用逻辑名称(屏幕截图中的第一列)。
  • 对于自定义字段,例如必须rob_FaqId使用架构名称(屏幕截图中的第二列)。
var params = {
    'rob_FaqId@odata.bind': '/rob_faqs(guid-here)',
    'rob_source': 180840000,
    'subject': 'Signpost',
    'actualstart': new Date(),
    'actualend': new Date()
};

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

因此,通过 Web API 使用已设置的查找字段创建新记录的一般结构是这样的:

{
  "logicalorschemaName@odata.bind": "/relatedentitys(guid)" //don't forget the plural 's'
}

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

var newAccountRecordObj = {
  "name": "Sample Account",
  "primarycontactid@odata.bind": "/contacts(00000000-0000-0000-0000-000000000001)"
}
于 2018-08-24T16:47:55.200 回答
2

虽然在这种情况下接受的答案是正确的,但它似乎并不是全部。在某些情况下,有必要使用<logical name>_<entity name>. 例如,在执行 a 时POST sharepointdocumentlocations,我必须使用:

"regardingobjectid_contact@odata.bind": "/contacts(xxxx)"
"parentsiteorlocation_sharepointdocumentlocation@odata.bind" "/sharepointdocumentlocations(xxx)"

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

于 2021-05-14T07:19:19.820 回答