it-swarm.com.de

Wie erhalte/setze ich benutzerdefinierte Trello-Felder mit der API?

Ich bin bereits verliebt in die Funktion Benutzerdefinierte Felder in Trello. Gibt es eine Möglichkeit, benutzerdefinierte Felder über die API abzurufen und festzulegen?

Ich habe versucht, mit dem Aufruf get field API ein Feld abzurufen (auf einer Platine mit einem benutzerdefinierten Feld namens "MyCustomField"):

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

umsonst.

12
mstringer

Die Custom Fields API von Trello ist jetzt offiziell verfügbar ( Ankündigung Blog-Post hier ).

Benutzer können damit sowohl benutzerdefinierte Feldelemente von Brettern als auch benutzerdefinierte Feldelementwerte auf Karten bearbeiten.

Benutzerdefinierte Felder API-Dokumentation

customFieldItems für Karten abrufen

Einstellen und Aktualisieren von CustomFieldItems

1
mike

Ich habe also eine "Art" Antwort darauf. Damit dies funktioniert, ist ein gewisses Maß an Hackergeist erforderlich. Beim Hinzufügen von Eigenschaften oder Werten ist mehr als nur eine kleine manuelle Wartung erforderlich - es funktioniert jedoch.

Ich mache das in Powershell (ich kenne mich mit ps noch nicht gut aus und dies ist mein erstes wirklich 'großes' Skript, das ich dafür zusammengestellt habe), da ich beabsichtige, dies mit TFS Builds zu verwenden, um das Verschieben einiger Karten zu automatisieren und Erstellen von Versionshinweisen. Wir verwenden benutzerdefinierte Felder, um die Karten- und Notizschätzung/die tatsächlichen Stunden usw. zu klassifizieren. Ich habe dies Jungs arbeiten als Grundlage für mein eigenes Scripting verwendet. Ich schließe nicht alles ein, aber Sie sollten in der Lage sein, alles zusammenzufügen.

Ich habe alles ausgelassen, um mich mit Trello zu verbinden und so weiter. Ich habe eine Reihe von anderen Funktionen für Einstellungslisten, das Verschieben von Karten, das Hinzufügen von Kommentaren usw. Das PS-Modul, das ich oben verlinkt habe, hat auch eine Menge davon eingebaut.

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
        }
    }
}

Sie erhalten folgende Daten:

@ {id = 582b5ec8df1572e572411513; idPlugin = 56d5e249a98895a9797bebb9; Umfang = Karte; idModel = 58263201749710ed3c706bef; value = {"fields": {"ZIn76ljn-4yeYvz": 2, "ZIn76ljn-c2yhZH": 1}}; access = shared}

@ {id = 5834536fcff0525f26f9e53b; idPlugin = 56d5e249a98895a9797bebb9; Umfang = Karte; idModel = 567031ea6a01f722978b795d; value = {"fields": {"ZIn76ljn-4yeYvz": 4, "ZIn76ljn-c2yhZH": 3}}; access = shared}

Die Fields-Sammlung besteht im Wesentlichen aus Schlüssel/Paar. Die zufälligen Zeichen entsprechen der Eigenschaft und der Wert danach wurde für die benutzerdefinierte Eigenschaft festgelegt. In diesem Fall handelt es sich um einen Index für den Wert in der Dropdown-Liste. Diese beiden Felder haben für uns eine "Priorität" (niedrig, mittel, hoch) und eine "Klassifizierung" (Fehler, Änderungsanforderung usw.). (Wir verwenden Etiketten für etwas anderes).

Sie müssen also eine weitere Funktion erstellen, mit der Sie diese Daten auswerten können. Ich bin mir sicher, dass es bessere Möglichkeiten gibt - aber das habe ich jetzt:

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 ist eine weitere ps-Funktion, die ich eingerichtet habe, um ein Objekt basierend auf den Eigenschaften zu erstellen, die ich definiert habe.

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

Dies ist nur, um die Antwort von bdwakefield zu ergänzen. Seine Lösung beinhaltet die harte Codierung der Namen der Feld-IDs.

Wenn Sie auch den Namen der Felder selbst abrufen möchten (zum Beispiel, dass "ZIn76ljn-4yeYvz" in Trello tatsächlich "Priorität" hat, ohne es hart zu codieren, rufen Sie den folgenden Endpunkt auf:

boards/{Trello Board ID}/pluginData

Dies gibt ein Array mit den Plugins-Informationen zurück und enthält in einem der Array-Elemente eine Zeile mit den folgenden Angaben:

[value] => {"fields": [{"n": "~ benutzerdefinierter Feldname ~:", "t": 0, "b": 1, "id": "~ benutzerdefinierte Feld-ID, die seltsam ist Zeug auf Kartenebene ~ "," friendlyType ":" Text "}]}

Sie müssen also nur das Plugin für benutzerdefinierte Felder in Ihrem Fall herausfinden und können das Schlüssel-> Wertepaar für den Namen des benutzerdefinierten Felds und die damit verknüpfte ID abrufen.

Wenn Sie Felder hinzufügen/entfernen oder umbenennen, können Sie dies zur Laufzeit tun, während Sie den Code ändern.

Dies gibt Ihnen auch die Optionen für das benutzerdefinierte Feld (wenn es sich um ein Dropdown handelt, wie im obigen Beispiel von bdwakefield).

2
Alon Sabi