如何使用API获取/设置Trello自定义字段?

15

我已经爱上了Trello中的自定义字段功能。是否有一种方法可以通过API获取和设置自定义字段?

我尝试使用 获取字段 API 调用来获取一个字段(在自定义字段为“MyCustomField”的面板上):

curl "https://api.trello.com/1/cards/57c473503a5ef0b76fddd0e5/MyCustomField?key=${TRELLO_API_KEY}&token=${TRELLO_OAUTH_TOKEN}"

但却没有成功。


我浏览了这里https://developers.trello.com/advanced-reference/card,但是没有找到任何有用的信息 :/ 要么这还没有被记录下来,要么就是不公开。 - jakub
3
好的,我找到了这个链接:https://a.disquscdn.com/uploads/mediaembed/images/4185/8909/original.jpg。 - jakub
@jakub - 你有关于那张图片的来源的任何想法吗?我很好奇是否已经有进一步的讨论/动向。我正在编写一个脚本,以帮助自动创建基于卡片的发布说明,这对我来说将是非常宝贵的。 - bdwakefield
3
嗨@bdwakefield,这是Trello支持在八月底回复的tweet。我并不知道有进一步的讨论。我刚刚联系了他们,或许他们会有所回应? - jakub
mstringer和@jakub - 我在这方面取得了一些小的“进展”...它并不完美...但是它“可行”。也许你们可以拿我这里的东西,让它为你们工作。 - bdwakefield
3个回答

5
Trello的自定义字段API现已正式推出(官方博客)。该API允许用户操作面板的自定义字段项以及卡片上的自定义字段项值。Custom Fields API文档请参考此处。获取卡片的customFieldItems请参考此处。设置和更新CustomFieldItems请参考此处

1
更新:已移动至 https://developer.atlassian.com/cloud/trello/guides/rest-api/getting-started-with-custom-fields/。 - MoVod
谢谢。我已经更新了答案中的链接。 - Employee

3
这只是为了补充bdwakefield的答案。他的解决方案涉及硬编码字段 id 的名称。
如果您还想检索字段本身的名称(例如,获取 Trello 中“ZIn76ljn-4yeYvz”实际上是“priority”而无需硬编码),请调用以下终端节点:
boards/{trello board id}/pluginData
这将返回一个包含插件信息的数组,并且在其中一个数组项中,它将包括类似于以下行的内容:
[value] => {"fields":[{"n":"~custom field name~:","t":0,"b":1,"id":"~custom field id that is the weird stuff at the card level~","friendlyType":"Text"}]}
因此,您只需要弄清楚自定义字段的插件,就可以检索与其关联的自定义字段名称和 ID 的键值对。
这意味着如果您添加/删除字段或重命名它们,则可以在运行时处理它,而不必更改代码。
这也将为您提供自定义字段的选项(当它像bdwakefield上面的示例中的下拉框)。

这已经有一段时间了,我需要更新一下我现有的内容,并根据需要修改我的回答。谢谢! - bdwakefield
{btsdaf} - lucky6qi

2
我有一个“差不多”的答案。为使其正常工作,需要进行一些技巧性操作,并且在添加属性或值时需要手动维护 - 但它可以工作。
我正在使用PowerShell(我还不熟练ps,这是我第一个真正“大”的脚本),因为我的意图是将其与TFS Builds一起使用,以自动移动一些卡片并创建发布说明。我们正在使用自定义字段来帮助我们对卡片进行分类并注意估计/实际小时数等。 我使用了此人的工作作为自己脚本的基础。我没有包括所有内容,但您应该能够将所有内容组合在一起。
我省略了连接到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}

字段集合基本上是键/值对。随机字符对应于属性,之后的值是在自定义属性上设置的。在这种情况下,它是一个下拉列表中的“索引”。我们的这两个字段具有“优先级”(低、中、高)和“分类”(错误、变更请求等)。 (我们正在使用标签来处理其他内容)
因此,您需要创建另一个函数来解析这些数据。我相信有更好的方法可以实现它 - 但这就是我现在拥有的。
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 是我设置的另一个 PowerShell 函数,用于基于我已定义的属性构建对象。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接