使用 Trello API 在卡片上设置自定义字段值

Setting custom field values on a card with the Trello API

我正在尝试使用 Trello API 的新自定义字段方法来设置卡片上自定义字段的值。

我创建了一个 number 类型的自定义字段。当我通过 id 对自定义字段发出 GET 请求时,它 returns 这个自定义字段对象:

{
"id":"5ab13cdb8acaabe576xxxxx",
"idModel":"54ccee71855b401132xxxxx",
"modelType":"board",
"fieldGroup":"837a643fd25acc835affc227xxxxxxxxxxxxxxxxxxxx",
"name":"Test Number Field",
"pos":16384,
"type":"number"
}

然后当我在 Trello UI 中创建一张新卡片时(但不要在 Test Number Field 框中输入值)然后 GET 使用 customFieldItems=true(如记录here),它returns这个卡片对象(删除了不相关的字段):

{
"id": "5ab56e6b62abac194d9xxxxx",
"name": "test1",
"customFieldItems": []
}

请注意,由于我没有在 UI 的 Test Number Field 框中键入任何内容,因此 customFieldItems 属性 包含一个空数组。

然后,如果我在 UI 和 GET 卡片的 Test Number Field 框中再次输入数字 1,它 returns 这个(不相关的字段已删除):

{
"id": "5ab56e6b62abac194d9xxxxx",
"name": "test1",
"customFieldItems":
    [
        {
        "id": "5ab570c5b43ed17b2dxxxxx",
        "value": {
            "number": "1"
            },
        "idCustomField": "5ab13cdb8acaabe5764xxxxx",
        "idModel": "5ab56e6b62abac194d9xxxxx",
        "modelType": "card"
        }
    ]
}

我希望能够通过 API 设置此自定义字段的值。

当我转到 API 文档以了解 “设置、更新和删除卡片上自定义字段的值”时,here) 我插入以下信息:

查询授权

路径参数

查询参数

当我点击 Try It 时,我得到了响应:400 Bad Request "Invalid custom field item value."

我试过以下方法:

无论我尝试什么,我总是得到 "Invalid custom field item value." 无论卡片在自定义字段中是否有值,这都以相同的方式表现。

我很确定路径参数中的 idCustomField 被接受了,因为当我更改一个字符时,它反而给我这个错误:"invalid value for idCustomField".

所以我不知道 "Invalid custom field item value." 是指查询参数 idCustomField* 还是 value.

我也不知道卡片在自定义字段中是否具有现有值是否会有所不同,但我希望能够设置此自定义字段的值,无论它是否存在当前在该字段中有一个值。

the Trello documentation page 上的实例(使用 XMLHttpRequest)是错误的。您应该使用 fetch.

来使用下一个示例
var url = "https://api.trello.com/1/cards/{idCard}/customField/{idCustomField}/item?token={yourToken}&key={yourKey}";
var data = {value: { number: "42" }};
fetch(url, { body: JSON.stringify(data), method: 'PUT', headers: {'content-type': 'application/json'}})
.then((resp) => resp.json())
.then((data) => console.log(JSON.stringify(data, null, 2)))
.catch((err) => console.log(JSON.stringify(err, null, 2)))

这个例子有效。在尝试之后,我修改了 XMLHttpRequest 版本并且它也有效。

var data = null;
var xhr = new XMLHttpRequest();
xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

data = {value: { number: "3" }};  //added
var json = JSON.stringify(data);  //added

xhr.open("PUT", 'https://api.trello.com/1/cards/{idCard}/customField/{idCustomField}/item?key={yourkey}&token={yourtoken}');
xhr.setRequestHeader('Content-type','application/json');  //added
xhr.send(json);  //modified

重点是您应该 1) 将请求 Content-type header 设置为 application/json 和 2) 通过 JSON object body.

我试图编辑文档中的实时示例,但我不可能。我希望他们能尽快修复它。