2016-08-30 1 views
10

Я уже влюблен в функцию Custom Fields в Трело. Есть ли способ получить и установить настраиваемые поля через API?Как получить/установить пользовательские поля Trello с помощью API?

Я попытался с помощью вызова 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

ответ

2

Так что у меня есть «своего рода» ответ на этот вопрос. Это требует некоторого хакерства с вашей стороны, чтобы он работал, и при добавлении свойств или ценностей есть немного больше ручного содержания, но оно работает.

Я делаю это в powershell (я еще не очень хорошо разбираюсь в ps, и это мой первый действительно «большой» сценарий, который я собрал для него), так как я намерен использовать это с TFS Builds для автоматизации перемещения некоторые карты вокруг и создание заметок выпуска. Мы используем настраиваемые поля, чтобы помочь нам классифицировать карточку и подсчитать оценку/фактические часы и т. Д. Я использовал это 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}

Коллекция полей в основном ключ/пара. Случайные символы соответствуют свойству и значение после этого - это то, что было установлено в пользовательском свойстве. В этом случае это «индекс» для значения в раскрывающемся списке. Эти два поля имеют для нас приоритет (низкий, средний, высокий) и «классификация» (ошибка, запрос на изменение и т. Д.). (Мы используем ярлыки для чего-то еще).

Таким образом, вам нужно будет создать еще одно fucntion, где вы сможете разобрать эти данные. Я уверен, что есть лучшие способы сделать это, - но это то, что я сейчас:

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 другая функция пс, что я создал для создания объекта на основе свойств, которых я знаю что я определил.

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. Его решение включает жесткое кодирование имен идентификаторов полей.

Если вы хотите, чтобы также получить имя самих полей (например, получить, что «ZIn76ljn-4yeYvz» на самом деле «приоритет» в Trello, без необходимости жесткого кода его, вызовите следующую конечную точку:

доски/{Trello доска ID}/pluginData

Это возвращает массив с информацией о плагинах и в одном из элементов массива, он будет включать в линию вдоль линий:

[значение] => {"fields": [{"n": "~ имя настраиваемого поля ~:", "t": 0, "b": 1, "id": "~ пользовательский идентификатор поля, который является странным материалом на уровне карты ~ " "friendlyType":" Te xt "}]}

Поэтому вам нужно всего лишь выяснить, какой плагин для пользовательских полей в вашем случае, и вы можете получить пару ключей -> значение для имени настраиваемого поля и связанного с ним идентификатора.

Это означает, что если вы добавляете/удаляете поля или переименовываете их, вы можете обрабатывать их во время выполнения и изменять код.

Это также даст вам варианты для настраиваемого поля (когда это выпадающее меню, например, в примере bdwakefield).

+0

Прошло некоторое время с тех пор, как я нуждался в этом; но я посмотрю, как сложно обновить то, что у меня есть, и изменить свой ответ, если я смогу; благодаря! – bdwakefield

+0

Создание и обновление невозможно, так как пользовательские поля доступа api доступны только для чтения –

Смежные вопросы