私はすでにTrelloの カスタムフィールド 機能が大好きです。 APIを介してカスタムフィールドを取得および設定する方法はありますか?
get field API呼び出しを使用してフィールドを取得しようとしました(「MyCustomField」と呼ばれるカスタムフィールドが定義されたボード上):
curl "https://api.trello.com/1/cards/57c473503a5ef0b76fddd0e5/MyCustomField?key=${TRELLO_API_KEY}&token=${TRELLO_OAUTH_TOKEN}"
無駄に。
TrelloのCustomFields 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; 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}
フィールドコレクションは基本的にキー/ペアです。ランダムな文字はプロパティに対応し、その後の値はカスタムプロパティに設定されたものです。この場合、それはドロップダウンの値の「インデックス」です。これらの2つのフィールドには、「優先度」(低、中、高)と「分類」(バグ、変更要求など)があります。 (私たちは何か他のものにラベルを使用しています)。
したがって、このデータを解析できる別の機能を作成する必要があります。私はそれを行うためのより良い方法があると確信しています-しかしこれは私が今持っているものです:
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は、私が定義したことがわかっているプロパティに基づいてオブジェクトを構築するために設定したもう1つの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
これにより、プラグイン情報を含む配列が返され、配列アイテムの1つに、次の行に沿った行が含まれます。
[値] => {"fields":[{"n": "〜custom field name〜:"、 "t":0、 "b":1、 "id": "〜custom field id that is the weirdカードレベルのもの〜 "、" friendlyType ":" Text "}]}
したがって、ケースのカスタムフィールドのプラグインを理解するだけで、カスタムフィールド名とそれに関連付けられたIDのキー->値のペアを取得できます。
つまり、フィールドを追加/削除したり、フィールドの名前を変更したりすると、コードを変更するのではなく、実行時に処理できます。
これにより、カスタムフィールドのオプションも提供されます(上記のbdwakefieldの例のようにドロップダウンの場合)。