如何使用 API get/set Trello 自定义字段?
How to get/set Trello custom fields using the API?
我已经爱上了 Trello 中的 Custom Fields 功能。有没有办法通过 API?
获取和设置自定义字段
我尝试使用 get field API 调用来获取一个字段(在一个自定义字段定义为 "MyCustomField" 的板上):
curl "https://api.trello.com/1/cards/57c473503a5ef0b76fddd0e5/MyCustomField?key=${TRELLO_API_KEY}&token=${TRELLO_OAUTH_TOKEN}"
无济于事。
所以我有一个 "sort of" 答案。它需要您的一些 hacker 技能才能使其工作,并且在您添加属性或值时需要更多的手动维护——但它确实有效。
我在 powershell 中这样做(我还不精通 ps,这是我第一个真正的 'big' 脚本,我已经为它拼凑起来)因为我的目的是使用这与 TFS Builds 一起自动移动一些卡片并创建发行说明。我们正在使用自定义字段来帮助我们对卡片进行分类并记录 estimate/actual 小时等。我使用此 guys work 作为我自己脚本编写的基础。我没有包括所有内容,但您应该能够将所有内容拼凑起来。
我已经省略了连接到 Trello 的所有内容。我还有很多其他功能,用于获取列表、移动卡片、添加评论等。我上面链接的 ps 模块也有很多内置功能。
function Get-TrelloCardPluginData
{
[CmdletBinding()]
param
(
[Parameter(Mandatory,ValueFromPipelineByPropertyName)]
[ValidateNotNullOrEmpty()]
[Alias('Id')]
[string]$CardId
)
begin
{
$ErrorActionPreference = 'Stop'
}
process
{
try
{
$uri = "$baseUrl/cards/$CardId/pluginData?$($trelloConfig.String)"
$result = Invoke-RestMethod -Uri $uri -Method GET
return $result
}
catch
{
Write-Error $_.Exception.Message
}
}
}
您将获得如下所示的数据:
@{id=582b5ec8df1572e572411513; idPlugin=56d5e249a98895a9797bebb9;
scope=card; idModel=58263201749710ed3c706bef;
value={"fields":{"ZIn76ljn-4yeYvz":2,"ZIn76ljn-c2yhZH":1}};
access=shared}
@{id=5834536fcff0525f26f9e53b; idPlugin=56d5e249a98895a9797bebb9;
scope=card; idModel=567031ea6a01f722978b795d;
value={"fields":{"ZIn76ljn-4yeYvz":4,"ZIn76ljn-c2yhZH":3}};
access=shared}
字段集合基本上是key/pair。随机字符对应属性,后面的值是自定义属性上设置的值。在本例中,它是下拉列表中值的 'index'。这两个字段对我们来说有一个 'priority'(低、中、高)和一个 'classification'(错误、变更请求等)。 (我们将标签用于其他用途)。
所以你必须创建另一个函数来解析这些数据。我确信有更好的方法来做到这一点——但这就是我现在所拥有的:
function Get-TrelloCustomPropertyData($propertyData)
{
$data = $propertyData.Replace('{"fields":{', '')
$data = $data.Replace('}}', '')
$data = $data.Replace('"', '')
$sepone = ","
$septwo = ":"
$options = [System.StringSplitOptions]::RemoveEmptyEntries
$obj = $data.Split($sepone, $options)
$cardCustomFields = Get-TrelloCustomFieldObject
foreach($pair in $obj)
{
$field = $pair.Split($septwo,$options)
if (-Not [string]::IsNullOrWhiteSpace($field[0].Trim()))
{
switch($field[0].Trim())
{
'ZIn76ljn-4yeYvz' {
switch($field[1].Trim())
{
'1'{
$cardCustomFields.Priority = "Critical"
}
'2'{
$cardCustomFields.Priority = "High"
}
'3'{
$cardCustomFields.Priority = "Medium"
}
'4'{
$cardCustomFields.Priority = "Low"
}
}
}
'ZIn76ljn-c2yhZH' {
switch($field[1].Trim())
{
'1'{
$cardCustomFields.Classification = "Bug"
}
'2'{
$cardCustomFields.Classification = "Change Request"
}
'3'{
$cardCustomFields.Classification = "New Development"
}
}
}
'ZIn76ljn-uJyxzA'{$cardCustomFields.Estimated = $field[1].Trim()}
'ZIn76ljn-AwYurD'{$cardCustomFields.Actual = $field[1].Trim()}
}
}
}
return $cardCustomFields
}
Get-TrelloCustomFieldObject 是我设置的另一个 ps 函数,用于根据我所定义的属性构建对象。
function Get-TrelloCustomFieldObject
{
[CmdletBinding()]
param()
begin
{
$ErrorActionPreference = 'Stop'
}
process
{
$ccf = New-Object System.Object
$ccf | Add-Member -type NoteProperty -name Priority -value "None"
$ccf | Add-Member -type NoteProperty -name Classification -value "None"
$ccf | Add-Member -type NoteProperty -name Estimated -value ""
$ccf | Add-Member -type NoteProperty -name Actual -value ""
return $ccf
}
}
这只是为了添加到 bdwakefield 的回答中。他的解决方案涉及对字段 ID 的名称进行硬编码。
如果您还想检索字段本身的名称(例如,在 Trello 中获取 "ZIn76ljn-4yeYvz" 实际上是 "priority",无需对其进行硬编码,请调用以下端点:
boards/{trello board id}/pluginData
这将 return 一个包含插件信息的数组,并且在其中一个数组项中,它将包含一行:
[值] => {"fields":[{"n":"~自定义字段名称~:","t":0,"b":1, "id":"~自定义字段 ID,这是卡片级别的奇怪东西~","friendlyType":"Text"}]}
所以你只需要在你的案例中弄清楚自定义字段的插件,你就可以检索自定义字段名称的键 -> 值对和与之关联的 ID。
这意味着如果您添加/删除字段或重命名它们,您可以在 运行 时间处理它而不是更改代码。
这也会为您提供自定义字段的选项(当它是一个下拉列表时,就像上面 bdwakefield 的例子一样)。
Trello 的自定义字段 API 现已正式可用 (announcement blog post here)。
它允许用户操作看板的自定义字段项和卡片上的自定义字段项值。
Custom Fields API documentation
我已经爱上了 Trello 中的 Custom Fields 功能。有没有办法通过 API?
获取和设置自定义字段我尝试使用 get field API 调用来获取一个字段(在一个自定义字段定义为 "MyCustomField" 的板上):
curl "https://api.trello.com/1/cards/57c473503a5ef0b76fddd0e5/MyCustomField?key=${TRELLO_API_KEY}&token=${TRELLO_OAUTH_TOKEN}"
无济于事。
所以我有一个 "sort of" 答案。它需要您的一些 hacker 技能才能使其工作,并且在您添加属性或值时需要更多的手动维护——但它确实有效。
我在 powershell 中这样做(我还不精通 ps,这是我第一个真正的 'big' 脚本,我已经为它拼凑起来)因为我的目的是使用这与 TFS Builds 一起自动移动一些卡片并创建发行说明。我们正在使用自定义字段来帮助我们对卡片进行分类并记录 estimate/actual 小时等。我使用此 guys work 作为我自己脚本编写的基础。我没有包括所有内容,但您应该能够将所有内容拼凑起来。
我已经省略了连接到 Trello 的所有内容。我还有很多其他功能,用于获取列表、移动卡片、添加评论等。我上面链接的 ps 模块也有很多内置功能。
function Get-TrelloCardPluginData
{
[CmdletBinding()]
param
(
[Parameter(Mandatory,ValueFromPipelineByPropertyName)]
[ValidateNotNullOrEmpty()]
[Alias('Id')]
[string]$CardId
)
begin
{
$ErrorActionPreference = 'Stop'
}
process
{
try
{
$uri = "$baseUrl/cards/$CardId/pluginData?$($trelloConfig.String)"
$result = Invoke-RestMethod -Uri $uri -Method GET
return $result
}
catch
{
Write-Error $_.Exception.Message
}
}
}
您将获得如下所示的数据:
@{id=582b5ec8df1572e572411513; idPlugin=56d5e249a98895a9797bebb9; scope=card; idModel=58263201749710ed3c706bef; value={"fields":{"ZIn76ljn-4yeYvz":2,"ZIn76ljn-c2yhZH":1}}; access=shared}
@{id=5834536fcff0525f26f9e53b; idPlugin=56d5e249a98895a9797bebb9; scope=card; idModel=567031ea6a01f722978b795d; value={"fields":{"ZIn76ljn-4yeYvz":4,"ZIn76ljn-c2yhZH":3}}; access=shared}
字段集合基本上是key/pair。随机字符对应属性,后面的值是自定义属性上设置的值。在本例中,它是下拉列表中值的 'index'。这两个字段对我们来说有一个 'priority'(低、中、高)和一个 'classification'(错误、变更请求等)。 (我们将标签用于其他用途)。
所以你必须创建另一个函数来解析这些数据。我确信有更好的方法来做到这一点——但这就是我现在所拥有的:
function Get-TrelloCustomPropertyData($propertyData)
{
$data = $propertyData.Replace('{"fields":{', '')
$data = $data.Replace('}}', '')
$data = $data.Replace('"', '')
$sepone = ","
$septwo = ":"
$options = [System.StringSplitOptions]::RemoveEmptyEntries
$obj = $data.Split($sepone, $options)
$cardCustomFields = Get-TrelloCustomFieldObject
foreach($pair in $obj)
{
$field = $pair.Split($septwo,$options)
if (-Not [string]::IsNullOrWhiteSpace($field[0].Trim()))
{
switch($field[0].Trim())
{
'ZIn76ljn-4yeYvz' {
switch($field[1].Trim())
{
'1'{
$cardCustomFields.Priority = "Critical"
}
'2'{
$cardCustomFields.Priority = "High"
}
'3'{
$cardCustomFields.Priority = "Medium"
}
'4'{
$cardCustomFields.Priority = "Low"
}
}
}
'ZIn76ljn-c2yhZH' {
switch($field[1].Trim())
{
'1'{
$cardCustomFields.Classification = "Bug"
}
'2'{
$cardCustomFields.Classification = "Change Request"
}
'3'{
$cardCustomFields.Classification = "New Development"
}
}
}
'ZIn76ljn-uJyxzA'{$cardCustomFields.Estimated = $field[1].Trim()}
'ZIn76ljn-AwYurD'{$cardCustomFields.Actual = $field[1].Trim()}
}
}
}
return $cardCustomFields
}
Get-TrelloCustomFieldObject 是我设置的另一个 ps 函数,用于根据我所定义的属性构建对象。
function Get-TrelloCustomFieldObject
{
[CmdletBinding()]
param()
begin
{
$ErrorActionPreference = 'Stop'
}
process
{
$ccf = New-Object System.Object
$ccf | Add-Member -type NoteProperty -name Priority -value "None"
$ccf | Add-Member -type NoteProperty -name Classification -value "None"
$ccf | Add-Member -type NoteProperty -name Estimated -value ""
$ccf | Add-Member -type NoteProperty -name Actual -value ""
return $ccf
}
}
这只是为了添加到 bdwakefield 的回答中。他的解决方案涉及对字段 ID 的名称进行硬编码。
如果您还想检索字段本身的名称(例如,在 Trello 中获取 "ZIn76ljn-4yeYvz" 实际上是 "priority",无需对其进行硬编码,请调用以下端点:
boards/{trello board id}/pluginData
这将 return 一个包含插件信息的数组,并且在其中一个数组项中,它将包含一行:
[值] => {"fields":[{"n":"~自定义字段名称~:","t":0,"b":1, "id":"~自定义字段 ID,这是卡片级别的奇怪东西~","friendlyType":"Text"}]}
所以你只需要在你的案例中弄清楚自定义字段的插件,你就可以检索自定义字段名称的键 -> 值对和与之关联的 ID。
这意味着如果您添加/删除字段或重命名它们,您可以在 运行 时间处理它而不是更改代码。
这也会为您提供自定义字段的选项(当它是一个下拉列表时,就像上面 bdwakefield 的例子一样)。
Trello 的自定义字段 API 现已正式可用 (announcement blog post here)。
它允许用户操作看板的自定义字段项和卡片上的自定义字段项值。
Custom Fields API documentation