Как получить / установить пользовательские поля Trello с помощью API?
Я уже влюблен в Настраиваемые Поля функция в Trello. Есть ли способ получить и установить пользовательские поля через API?
Я попытался с помощью сделать поле вызов API для получения поля (на плате с пользовательским полем, определенным под названием "MyCustomField"):
curl "https://api.trello.com/1/cards/57c473503a5ef0b76fddd0e5/MyCustomField?key=${TRELLO_API_KEY}&token=${TRELLO_OAUTH_TOKEN}"
безрезультатно.
3 ответов
API настраиваемых полей от Trello теперь официально доступен (объявление в блоге здесь).
оно позволяет потребителям манипулировать и изготовленными на заказ деталями поля доск и изготовленными на заказ значениями деталя поля на карточках.
пользовательские поля API документация
Итак, у меня есть "своего рода" ответ на это. Это требует некоторого хакерства с вашей стороны, чтобы заставить его работать, и есть более чем небольшое ручное обслуживание, когда вы добавляете свойства или значения, но это работает.
Я делаю это в powershell (я еще не очень хорошо разбираюсь в ps, и это мой первый действительно "большой" скрипт, который я собрал для него), так как мое намерение состоит в том, чтобы использовать это с сборками TFS для автоматизации перемещения некоторых карт и создания заметок о выпуске. Мы используем настраиваемые поля для помогите нам классифицировать карту и отметить оценку / фактические часы и т. д. Я использовал это ребята работают в качестве основы для моего собственного сценария. Я не включаю все, но вы должны быть в состоянии собрать все вместе.
я пропустил все с подключением к 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}}; access=shared}
@{id=5834536fcff0525f26f9e53b; idPlugin=56d5e249a98895a9797bebb9; область=карта; idModel=567031ea6a01f722978b795d; значение={"поля": {"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 - еще одна функция 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. Его решение включает в себя жесткое кодирование имен идентификаторов полей.
Если вы хотите также получить имя самих полей (например, получить, что" ZIn76ljn-4yeYvz "на самом деле" приоритет " в Trello, без необходимости жесткого кода, вызовите следующую конечную точку:
платы / {trello board id} / pluginData
Это вернет массив с информацией о плагинах и в одном из элементов массива, он будет включить строку следующего содержания:
[value] = > {"fields": [{"n": "~имя настраиваемого поля~:", "t": 0,"b": 1,"id":"~идентификатор настраиваемого поля, который является странным на уровне карты~","friendlyType":"Text"}]}
поэтому вам просто нужно выяснить плагин для пользовательских полей в вашем случае, и вы можете получить пару ключ -> значение для имени пользовательского поля и связанного с ним идентификатора.
Это означает, что если вы добавляете / удаляете поля или переименовываете их, вы можете обрабатывать их при запуске время против изменения кода.
Это также даст вам параметры для настраиваемого поля (когда это выпадающий список, как в Примере bdwakefield выше).