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

Emp*_*yee 5 api object trello trello-powerup

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

我创建了一个类型为 的自定义字段number。当我GET通过 it's 发出自定义字段请求时id,它返回此自定义字段对象:

{
"id":"5ab13cdb8acaabe576xxxxx",
"idModel":"54ccee71855b401132xxxxx",
"modelType":"board",
"fieldGroup":"837a643fd25acc835affc227xxxxxxxxxxxxxxxxxxxx",
"name":"Test Number Field",
"pos":16384,
"type":"number"
}
Run Code Online (Sandbox Code Playgroud)

然后,当我在 Trello UI 中创建一张新卡(但不要在框中输入值Test Number Field),然后GET使用该卡customFieldItems=true(如此处所述时,它会返回此卡对象(删除了不相关的字段):

{
"id": "5ab56e6b62abac194d9xxxxx",
"name": "test1",
"customFieldItems": []
}
Run Code Online (Sandbox Code Playgroud)

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

然后,如果我再次在 UI 和卡的框中输入数字,它会返回以下内容(删除了不相关的字段1):Test Number FieldGET

{
"id": "5ab56e6b62abac194d9xxxxx",
"name": "test1",
"customFieldItems":
    [
        {
        "id": "5ab570c5b43ed17b2dxxxxx",
        "value": {
            "number": "1"
            },
        "idCustomField": "5ab13cdb8acaabe5764xxxxx",
        "idModel": "5ab56e6b62abac194d9xxxxx",
        "modelType": "card"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

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

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

查询授权

  • key:(我们的有效/工作 Trello API 密钥)

  • token:(我们的有效/工作 Trello API 令牌)

路径参数

  • idCard:(应为其设置/更新自定义字段值的卡的 ID) 5ab56e6b62abac194d9xxxxx

  • idCustomField (卡上自定义字段的 ID。)5ab570c5b43ed17b2dxxxxx

查询参数

  • idCustomField(该项目所属的自定义字段的ID。):5ab13cdb8acaabe576xxxxx

  • modelType (这应该始终是卡。)card

  • value (包含要为卡的自定义字段值设置的键和值的对象。用于设置值的键应与定义的自定义字段的类型匹配。){"number": 2}

当我单击“尝试”时,我收到响应:400 Bad Request "Invalid custom field item value."

我尝试过以下操作:

  • 切换两个idCustomField值(令人困惑的是路径参数和查询参数具有相同的名称,这意味着它们应该接受相同的值,但它们有不同的描述,并且描述模糊/令人困惑)。

  • 将两个idCustomField值设置为相同的值(对于两个可能的 ID)

  • 将值设置为2{"number": "2"}{number: 2}{number: "2"}

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

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

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

我也不知道卡在自定义字段中是否具有现有值是否有影响,但我希望能够设置此自定义字段的值,无论它当前是否在场。

San*_*Lee 4

Trello 文档页面上的实时示例(使用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)))
Run Code Online (Sandbox Code Playgroud)

这个例子有效。尝试之后,我修改了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
Run Code Online (Sandbox Code Playgroud)

要点是您应该 1) 设置请求Content-type标头application/json并 2) 传递valuevia JSON 对象主体。

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