我正在尝试使用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 还是值。
我也不知道该卡是否在自定义字段中具有现有值会有所不同,但我希望能够设置此自定义字段的值,无论其是否为目前在该领域具有价值。
答案 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
。
我尝试编辑文档中的实例,但我不可能。我希望他们能尽快解决。