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

时间:2016-08-30 17:16:43

标签: api trello

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

无济于事。

3 个答案:

答案 0 :(得分:2)

所以我有一个"""回答这个问题。它需要你的一些hackery来使它工作,并且当你添加属性或值时,不仅仅需要一些手动维护 - 但它可以工作。

我在powershell中这样做(我还不熟悉ps,这是我的第一个真正的'大脚本,我已经拉到一起),因为我的目的是将它用于TFS构建以自动移动一些卡并创建发行说明。我们使用自定义字段来帮助我们对卡片进行分类并记下估算/实际时间等。我使用此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;   范围=卡; idModel = 58263201749710ed3c706bef;   值= {"字段" {" ZIn76ljn-4yeYvz":2" ZIn76ljn-c2yhZH":1}};   访问共享=}

     

@ {ID = 5834536fcff0525f26f9e53b; idPlugin = 56d5e249a98895a9797bebb9;   范围=卡; idModel = 567031ea6a01f722978b795d;   值= {"字段" {" ZIn76ljn-4yeYvz&#34: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
    }
}

答案 1 :(得分:2)

这只是为了补充bdwakefield的答案。他的解决方案涉及对字段ID的名称进行硬编码。

如果你想同时检索字段的名称(例如,在Trello中获取" ZIn76ljn-4yeYvz"实际上"优先级"无需硬编码,请致电以下终点:

boards / {trello board id} / pluginData

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

[value] => {"字段":[{" n":"〜自定义字段名称〜:"," t":0,&#34 ; b":1," id":"〜自定义字段ID,这是卡级别的奇怪内容〜"," friendlyType":& #34;文本"}]}

因此,您只需要在自己的案例中找出自定义字段的插件,然后就可以检索密钥了 - >自定义字段名称的值对和与之关联的ID。

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

这也将为您提供自定义字段的选项(如下面的bdwakefield&#39示例中的下拉菜单)。

答案 2 :(得分:1)

Trello的Custom Fields API现已正式推出(announcement blog post here)。

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

Custom Fields API documentation

Getting customFieldItems For Cards

Setting & Updating CustomFieldItems