Existe-t-il un moyen d'intégrer des tâches dans Team Foundation Server avec Trello?

12

J'essaie de déterminer s'il est possible d'intégrer Trello dans notre environnement de développement existant. Nous utilisons actuellement Team Foundation Server comme référentiel de contrôle du code source et j'aimerais lier des tâches dans TFS pour répertorier les éléments sur un tableau dans Trello, est-ce même possible à distance? Je sais qu'il y a une API en place, je suis surtout curieux de savoir si quelqu'un a déjà tenté une telle intégration. Si cela était possible, Trello deviendrait essentiellement notre interface utilisateur dans TFS.

marque
la source

Réponses:

9

Le programme ci-dessous crée des tâches TFS à partir de cartes Trello. Les listes de contrôle Trello apparaissent sous forme de descriptions d'éléments de tâche.

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.WorkItemTracking.Client;
using TrelloNet;

namespace TFSTrelloAPI
{
    class Program
    {
        #region Trello Security
        public static string DevTeamTasksBoardId { get; set; }
        public static string TrelloToken { get; set; }
        public static string TrelloKey { get; set; }
        #endregion

        #region TFS Details
        public static string TFSProject { get; set; }
        public static string TFSServerUri { get; set; }
        public static Uri Url { get; set; }
        #endregion

        static void Main(string[] args)
        {
            SetTrelloSecurity();
            SetTFSDetails();
            ITrello trello = new Trello(TrelloKey);
            IList<string> lines = new List<string>();
            Url = trello.GetAuthorizationUrl("TFSImport", Scope.ReadOnly);
            trello.Authorize(TrelloToken);
            var boards = trello.Boards;
            foreach (var board in boards.ForMe())
            {
                if (board.Id == DevTeamTasksBoardId)
                {
                    lines.Add("Name: " + board.Name);
                    lines.Add(" Desc: " + board.Desc);
                    lines.Add("ID: " + board.Id);
                }
            }
            IBoardId bid = new BoardId(DevTeamTasksBoardId);

            var lists = trello.Lists.ForBoard(bid);
            foreach (var list in lists)
            {
                var listId = new ListId(list.Id);
                var cards = trello.Cards.ForList(listId);
                foreach (var card in cards)
                {
                    var sbTaskDesc = new StringBuilder();
                    string taskName = (card.Name + " * Desc: " + card.Desc);
                    ICardId ic = new CardId(card.Id);
                    var chkLists = trello.Checklists.ForCard(ic);
                    foreach (var checklist in chkLists)
                    {
                        sbTaskDesc.AppendLine(" * " + checklist.Name);
                        sbTaskDesc.AppendLine(" * ");
                        var ckItems = checklist.CheckItems;
                        foreach (var checkItem in ckItems)
                        {
                            sbTaskDesc.AppendLine(" * " + checkItem.Name);
                        }
                    }
                    string taskDesc = sbTaskDesc.ToString();
                    CreateTask(taskName, taskDesc);
                }
            }
        }


    /// <summary>
        /// Replace empty strings with specific TFS information
        /// </summary>
        private static void SetTFSDetails()
        {
            TFSServerUri = string.Empty;
            TFSProject = string.Empty;
            Url = new Uri(TFSServerUri);
        }
        /// <summary>
        /// Replace empty strings with values from your Trello 
        /// See TrelloAPI documentaiotn for details
        /// </summary>
        private static void SetTrelloSecurity()
        {
            DevTeamTasksBoardId = string.Empty;
            TrelloToken = string.Empty;
            TrelloKey = string.Empty;
        }
        private static void CreateTask(string taskName, string taskDesc)
        {
            // Connect to the server and the store, and get the WorkItemType object
            // for user stories from the team project where the user story will be created. 
            var collectionUri = new Uri(TFSServerUri);
            var tpc = new TfsTeamProjectCollection(collectionUri);
            var workItemStore = tpc.GetService<WorkItemStore>();
            Project teamProject = workItemStore.Projects[TFSProject];
            WorkItemType workItemType = teamProject.WorkItemTypes["Task"];

            // Create the work item. 
            var userStory = new WorkItem(workItemType)
            {
                // The title is the only required field that does not have a default value. 
                // You must set it, or you cannot save the work item. 
                Title = taskName.Length > 255 ? taskName.Substring(0, 254) : taskName, // max length for name 255 char
                Description = taskDesc
            };

            // Save the new user story. 
            userStory.Save();
        }

    }
}
Marty
la source
2

Il n'y a aucun moyen de le faire dans l'application Trello, mais il existe une API que vous pouvez utiliser pour écrire l'intégration vous-même. La documentation est ici: https://trello.com/docs

Bobby Grace
la source