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

Posted

技术标签:

【中文标题】如何使用 API 获取/设置 Trello 自定义字段?【英文标题】:How to get/set Trello custom fields using the API? 【发布时间】:2017-01-07 02:10:49 【问题描述】:

我已经爱上了 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"

无济于事。

【问题讨论】:

我在这里浏览了developers.trello.com/advanced-reference/card,但也没有运气:/这还没有记录,或者没有公开。 好的,发现这个:a.disquscdn.com/uploads/mediaembed/images/4185/8909/… @jakub - 关于该图像来源的任何想法?我很好奇是否对此有任何进一步的讨论/动议。我正在编写一个脚本来帮助自动创建基于卡片的发行说明,这对我来说非常宝贵。 嘿@bdwakefield,这是a tweet Trello 支持在八月底回复。我不知道有任何进一步的讨论。我刚刚poked them,也许他们会说点什么? mstringer 和@jakub——我在这方面取得了一些“进步”……它并不完全理想……但它“有效”。也许你可以拿走我这里的东西,让它为你工作。 【参考方案1】:

所以我对此有一个“有点”的答案。它需要您进行一些黑客操作才能使其工作,并且在您添加属性或值时需要进行一些手动维护 - 但它可以工作。

我正在 powershell 中执行此操作(我还不太精通 ps,这是我为它整理的第一个真正“大”的脚本),因为我的目的是使用 TFS Builds 来自动移动一些卡片和创建发行说明。我们正在使用自定义字段来帮助我们对卡片进行分类并记录估计/实际时间等。我使用这个guys work 作为我自己的脚本的基础。我没有包括所有内容,但您应该能够将所有内容拼凑在一起。

我忽略了连接到 Trello 的所有内容。我还有很多其他功能,用于获取列表、移动卡片、添加 cmets 等。我上面链接的 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; 范围=卡; idModel=58263201749710ed3c706bef; 值=“字段”:“ZIn76ljn-4yeYvz”:2,“ZIn76ljn-c2yhZH”:1; 访问=共享

@id=5834536fcff0525f26f9e53b; idPlugin=56d5e249a98895a9797bebb9; 范围=卡; idModel=567031ea6a01f722978b795d; 值=“字段”:“ZIn76ljn-4yeYvz”:4,“ZIn76ljn-c2yhZH”:3; 访问=共享

字段集合基本上是键/对。随机字符对应于属性,之后的值是自定义属性上设置的值。在这种情况下,它是下拉列表中值的“索引”。这两个字段对我们来说有一个“优先级”(低、中、高)和一个“分类”(错误、变更请求等)。 (我们将标签用于其他用途)。

因此,您必须创建另一个函数来解析这些数据。我确信有更好的方法来做到这一点——但这就是我现在所拥有的:

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
    

【讨论】:

【参考方案2】:

这只是添加到 bdwakefield 的答案。他的解决方案涉及对字段 id 的名称进行硬编码。

如果您还想检索字段本身的名称(例如,在 Trello 中获取“ZIn76ljn-4yeYvz”实际上是“优先级”,而不需要对其进行硬编码,请调用以下端点:

boards/trello board id/pluginData

这将返回一个包含插件信息的数组,并且在其中一个数组项中,它将包含一行:

[value] => "fields":["n":"~custom field name~:","t":0,"b":1,"id":"~custom field id that是卡牌级别的怪东西~","friendlyType":"Text"]

所以你只需要在你的案例中找出自定义字段的插件,你就可以检索自定义字段名称的键 -> 值对和与之关联的 id。

这意味着如果您添加/删除字段或重命名它们,您可以在运行时处理它而不是更改代码。

这还将为您提供自定义字段的选项(当它是像上面 bdwakefield 示例中的下拉列表时)。

【讨论】:

我已经有一段时间没有需要这个了;但我会看看更新我所拥有的内容并修改我的答案是多么困难,如果我能够的话;谢谢! 无法创建和更新,因为自定义字段访问api是只读的【参考方案3】:

Trello 的自定义字段 API 现已正式发布 (announcement blog post here)。

它允许用户操作板的自定义字段项和卡片上的自定义字段项值。

Custom Fields API documentation

Getting customFieldItems For Cards

Setting & Updating CustomFieldItems

【讨论】:

更新它已移动:developer.atlassian.com/cloud/trello/guides/rest-api/… 谢谢。我已经更新了答案中的链接。

以上是关于如何使用 API 获取/设置 Trello 自定义字段?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Trello API 创建卡片后如何解析响应

Trello API 获取卡片评论

ruby 代码转储,显示我们如何使用Trello API生成“Changelog Weekly”

ruby 代码转储,显示我们如何使用Trello API生成“Changelog Weekly”

如何获取 Trello 列表中最重要的卡片的某些信息?

Trello 获取apiKey 和token 自己也能开发todo程序