4

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

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

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

然后,当我在 Trello UI 中创建新卡(但不要在Test Number Field框中输入值)然后GET使用该卡customFieldItems=true(如此记录)时,它会返回此卡对象(已删除无关字段):

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

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

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

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

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

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

查询授权

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

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

路径参数

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

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

查询参数

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

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

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

当我单击 Try It 时,我得到响应: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.

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

4

1 回答 1

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)))

这个例子有效。在尝试了这个之后,我修改了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标头设置为application/json2)value通过 JSON 对象主体传递。

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

于 2018-03-30T00:45:15.837 回答