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

问题描述:

我已经爱上了Trello的Custom Fields功能。有没有办法通过API获取和设置自定义字段?如何使用API​​获取/设置Trello自定义字段?

我尝试使用get field API调用来获取一个字段(在黑板与定义了一个名为“MyCustomField”的自定义字段):

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

无济于事。

+0

我在这里浏览了https://developers.trello.com/advanced-reference/card,但没有运气:/要么这还没有记录,或者它没有暴露。 – jakub

+3

好的发现这个:https://a.disquscdn.com/uploads/mediaembed/images/4185/8909/original.jpg – jakub

+0

@jakub - 任何想法在该图像的来源?我很好奇,如果有任何进一步的讨论/运动在这个。我正在编写一个脚本来帮助自动化创建基于卡的发行说明,这对我来说是非常宝贵的。 – bdwakefield

所以我有一个“排序”的答案。它需要一些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; 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 
} 

获取-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的名称。

如果你也想检索字段本身的名称(例如获取“ZIn76ljn-4yeYvz”其实是“优先”在Trello,而无需硬编码,请拨打以下终点:

板/ {trello板ID}/pluginData

这将返回一个数组与插件的信息,并在数组项中的一个,将包括沿着线的行:

[值] => {“字段”:[{“n”:“〜自定义字段名称〜:”,“t”:0,“b”:1,“id”:“〜自定义字段ID,这是在卡级别怪异的东西〜 “ ”friendlyType“:” 特xt“}]}

所以你只需要找出你的情况下自定义字段的插件,并且你可以检索自定义字段名称和与其关联的id的键 - >值对。

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

这也会为您提供自定义字段的选项(当它是像上面bdwakefield示例中的下拉菜单时)。

+0

我已经有一段时间需要这个了;但我会看到如果我能够更新我的内容并修改我的答案是多么困难;谢谢! – bdwakefield

+0

创建和更新是不可能的,因为自定义字段访问API是只读的 –