2016-08-30 5 views
10

Ich bin bereits in die Custom Fields Funktion in Trello verliebt. Gibt es eine Möglichkeit, benutzerdefinierte Felder über die API zu erhalten und festzulegen?Wie erhalte ich benutzerdefinierte Trello Felder mit der API?

Ich versuchte, den get field API-Aufruf mit einem Feld zu bekommen (auf einem Brett mit einem benutzerdefinierten Feld namens „MyCustomField“ definiert):

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

ohne Erfolg.

+0

Ich überflogen hier https://developers.trello.com/advanced-reference/card aber auch kein Glück:/Entweder ist dies noch nicht dokumentiert oder es ist nicht bekannt. – jakub

+3

Ok gefunden: https://a.disquscdn.com/uploads/mediaembed/images/4185/8909/original.jpg – jakub

+0

@jakub - Irgendeine Idee über die Quelle dieses Bildes? Ich bin gespannt, ob es darüber eine weitere Diskussion/Bewegung gegeben hat. Ich schreibe ein Skript, um die Erstellung von Versionshinweisen basierend auf Karten zu automatisieren, und das wäre für mich von unschätzbarem Wert. – bdwakefield

Antwort

2

Also habe ich eine "Art" Antwort auf diese Frage. Es bedarf einiger Hackereien, um es zum Laufen zu bringen und es gibt mehr als nur ein wenig manuellen Pflege, wenn Sie Eigenschaften oder Werte hinzufügen - aber es funktioniert.

Ich mache das in Powershell (ich bin noch nicht gut in ps noch und dieses erste wirklich 'große' Skript, das ich für sie zusammen gezogen habe), da meine Absicht ist, dies mit TFS Builds zu automatisieren zu bewegen einige Karten herum und Erstellen von Release Notes. Wir verwenden benutzerdefinierte Felder, um uns zu helfen, die Karte zu klassifizieren und die geschätzten/tatsächlichen Stunden usw. zu notieren. Ich habe diese guys work als Grundlage für mein eigenes Scripting verwendet. Ich nehme nicht alles auf, aber Sie sollten alles zusammenfügen können.

Ich habe alles mit Verbindung zu Trello und all das weggelassen. Ich habe eine Reihe anderer Funktionen, um Listen zu erhalten, Karten zu verschieben, Kommentare hinzuzufügen usw. Das ps-Modul, das ich oben verlinkt habe, hat 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 werden Daten erhalten, die wie folgt aussieht:

@ {id = 582b5ec8df1572e572411513; idPlugin = 56d5e249a98895a9797bebb9; scope = Karte; idModel = 58263201749710ed3c706bef; Wert = {"Felder": {"ZIn76ljn-4yeYvz": 2, "ZIn76ljn-c2yhZH": 1}}; Zugriff = gemeinsam}

@ {id = 5834536fcff0525f26f9e53b; idPlugin = 56d5e249a98895a9797bebb9; scope = Karte; idModel = 567031ea6a01f722978b795d; Wert = {"Felder": {"ZIn76ljn-4yeYvz": 4, "ZIn76ljn-c2yhZH": 3}}; Zugriff = gemeinsam}

Die Felder Sammlung ist im Grunde Schlüssel/Paar. Die zufälligen Zeichen entsprechen der Eigenschaft und der Wert, der danach für die benutzerdefinierte Eigenschaft festgelegt wurde. In diesem Fall ist es ein 'Index' für den Wert im Dropdown-Menü. Diese zwei Felder haben eine 'Priorität' (niedrig, mittel, hoch) und eine 'Klassifizierung' (Bug, Änderungsanforderung, usw.) für uns. (Wir verwenden Etiketten für etwas anderes).

Sie müssen also eine andere Funktion erstellen, wo Sie diese Daten analysieren können. Ich bin sicher, es gibt bessere Möglichkeiten, es zu tun - aber das ist, was ich habe 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 auf die Eigenschaften eines Objekts einrichten bauen basierend Ich weiß, das habe ich definiert.

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

Dies ist nur zu bdwakefields Antwort hinzuzufügen. Seine Lösung besteht darin, die Namen der Feld-IDs hart zu codieren.

Wenn Sie wollen auch den Namen der Felder selbst abrufen (zum Beispiel erhalten, dass „ZIn76ljn-4yeYvz“ ist eigentlich „Priorität“ in Trello, ohne es zu hart Code zu benötigen, rufen Sie die folgende Endpunkt:

Platten/{Trello Tafel ID}/pluginData

Dies wird ein Array mit den Plugins Informationen und in eine der Array-Elemente zurück, es wird eine Linie entlang der Linien umfassen:

[Wert] => {"Felder": [{"n": "~ benutzerdefinierter Feldname ~:", "t": 0, "b": 1, "id": "~ benutzerdefinierte Feld-ID, die auf der Kartenebene seltsame Dinge sind ~ "," friendlyType ":" Te xt "}]}

Sie müssen nur das Plugin für benutzerdefinierte Felder in Ihrem Fall herausfinden, und Sie können das Schlüssel -> Wert-Paar für den benutzerdefinierten Feldnamen und die zugehörige ID abrufen.

Es bedeutet, dass wenn Sie Felder hinzufügen/entfernen oder umbenennen, Sie es zur Laufzeit gegen das Ändern Ihres Codes behandeln können.

Dies gibt Ihnen auch die Optionen für das benutzerdefinierte Feld (wenn es ein Dropdown wie in bdwakefield Beispiel oben ist).

+0

Es ist eine Weile her, seit ich das gebraucht habe; aber ich werde sehen, wie schwer es ist, das, was ich habe, zu aktualisieren und meine Antwort zu ändern, wenn ich dazu in der Lage bin; Vielen Dank! – bdwakefield

+0

Das Erstellen und Aktualisieren ist nicht möglich, da die benutzerdefinierten Felder Zugriff api schreibgeschützt sind –

Verwandte Themen