web-dev-qa-db-fra.com

Comment obtenir/définir des champs personnalisés Trello à l'aide de l'API?

Je suis déjà amoureux du Champs personnalisés dans Trello. Est-il possible d'obtenir et de définir des champs personnalisés via l'API?

J'ai essayé d'utiliser l'appel get field API pour obtenir un champ (sur un tableau avec un champ personnalisé appelé "MyCustomField"):

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

en vain.

12
mstringer

L’API Champs personnalisés de Trello est maintenant officiellement disponible ( billet de blog d’annonce ici ).

Il permet aux utilisateurs de manipuler à la fois des éléments de champs personnalisés de tableaux et des valeurs d’éléments de champs personnalisés sur des cartes.

Documentation API des champs personnalisés

Obtention de customFieldItems pour les cartes

Définition et mise à jour des CustomFieldItems

1
mike

J'ai donc une "sorte de" réponse à cela. Cela nécessite un peu de piratage de votre part pour que cela fonctionne et il y a plus qu'un peu d'entretien manuel lorsque vous ajoutez des propriétés ou des valeurs - mais cela fonctionne.

Je le fais dans PowerShell (je ne suis pas très versé dans le ps pour l'instant et c'est mon premier très grand script que j'ai rassemblé pour le réaliser) car mon intention est de l'utiliser avec TFS Builds pour automatiser le déplacement de certaines cartes créer des notes de version. Nous utilisons des champs personnalisés pour nous aider à classer la carte et à noter l'estimation/les heures réelles, etc. J'ai utilisé ce les gars travaillent comme base pour mes propres scripts. Je ne comprend pas tout, mais vous devriez pouvoir tout rassembler.

J'ai tout laissé de côté avec la connexion à Trello et tout ça. J'ai un tas d'autres fonctions pour les listes de gettings, le déplacement de cartes, l'ajout de commentaires, etc. Le module ps que j'ai lié ci-dessus a également beaucoup de fonctions intégrées.

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

Vous obtiendrez des données qui ressemblent à ceci:

@ {id = 582b5ec8df1572e572411513; idPlugin = 56d5e249a98895a9797bebb9; portée = carte; idModel = 58263201749710ed3c706bef; valeur = {"champs": {"ZIn76ljn-4yeYvz": 2, "ZIn76ljn-c2yhZH": 1}}; accès = partagé}

@ {id = 5834536fcff0525f26f9e53b; idPlugin = 56d5e249a98895a9797bebb9; portée = carte; idModel = 567031ea6a01f722978b795d; valeur = {"champs": {"ZIn76ljn-4yeYvz": 4, "ZIn76ljn-c2yhZH": 3}}; accès = partagé}

La collection de champs est essentiellement une clé/paire. Les caractères aléatoires correspondent à la propriété et la valeur qui suit est celle définie dans la propriété personnalisée. Dans ce cas, il s'agit d'un "index" pour la valeur dans la liste déroulante. Ces deux champs ont une "priorité" (faible, moyenne, élevée) et une "classification" (bogue, demande de changement, etc.) pour nous. (Nous utilisons des étiquettes pour autre chose).

Vous devrez donc créer une autre fonction dans laquelle vous pourrez analyser ces données. Je suis sûr qu'il existe de meilleures façons de le faire - mais voici ce que j'ai maintenant:

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 est une autre fonction ps que j'ai configurée pour créer un objet en fonction des propriétés que j'ai définies et que je connais.

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

Ceci est juste pour ajouter à la réponse de bdwakefield. Sa solution implique de coder en dur les noms des identifiants de champ.

Si vous souhaitez également récupérer le nom des champs eux-mêmes (par exemple, obtenez que "ZIn76ljn-4yeYvz" est en fait "prioritaire" dans Trello, sans avoir à le coder en dur, appelez le point final suivant:

conseils/{id conseil trello}/pluginData

Cela renverra un tableau contenant les informations sur les plugins et, dans l’un des éléments du tableau, une ligne suivant les lignes suivantes:

[valeur] => {"champs": [{"n": "~ nom du champ personnalisé ~:", "t": 0, "b": 1, "id": "~ identifiant du champ personnalisé qui est bizarre des choses au niveau de la carte ~ "," friendlyType ":" Text "}]}

Il vous suffit donc de déterminer le plug-in pour les champs personnalisés dans votre cas, et vous pouvez récupérer la paire clé -> valeur pour le nom du champ personnalisé et l'id qui lui est associé.

Cela signifie que si vous ajoutez/supprimez des champs ou si vous les renommez, vous pouvez les gérer au moment de l'exécution, par opposition à la modification de votre code.

Cela vous donnera également les options pour le champ personnalisé (quand il s'agit d'un menu déroulant comme dans l'exemple de bdwakefield ci-dessus).

2
Alon Sabi