使用Trello API

时间:2018-03-23 22:00:47

标签: api object trello trello-powerup

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

我已创建了number类型的自定义字段。当我通过GET对自定义字段发出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该卡时(如记录所示) here),它返回此卡片对象(删除了不相关的字段):

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

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

然后,如果我在用户界面的Test Number Field框中键入数字 1 ,再次在卡片中GET,则会返回此信息(已删除不相关的字段):

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

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

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

查询验证

  • 密钥(我们的有效/正常工作的Trello API密钥)

  • 令牌(我们的有效/正常工作的Trello API令牌)

路径参数

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

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

查询参数

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

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

  • (包含要为卡片的自定义字段值设置的键和值的对象。用于设置值的键应与自定义字段定义。){"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 还是

我也不知道该卡是否在自定义字段中具有现有值会有所不同,但我希望能够设置此自定义字段的值,无论其是否为目前在该领域具有价值。

1 个答案:

答案 0 :(得分:2)

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标头设置为application/json,2)通过JSON对象体传递value

我尝试编辑文档中的实例,但我不可能。我希望他们能尽快解决。