Donnerstag, 20. September 2012

BASTA Follow-Up

Für alle die meine Sessions auf der Basta verfolgt haben und besonders für alle die sie nicht verfolgen konnten, hier die jeweiligen Folien und Beispiele.

TFS Express Slides

NoSQL vs. SQL Slides and Examples

Auch die versprochenen kleinen agile Tools die im TFS Express fehlen gibt es zum Download. Dazu einige bekannt Einschränkungen:

  • Funktioniert nur mit der englischen Scrum-Template Version.
  • Alle Operationen laufen synchron - eventuelle Wartezeiten (insb. beim starten) können vorkommen.
  • Die Software wird "as-is" geliefert - Nutzung auf eigene Gefahr.
Wer Fragen dazu hat, kann sich melden.

Viel Spaß damit!

HTTP 503 Error in TFS

The night before my TFS Express talk at the BASTA conference I faced an ugly error with my TFS Express installation. The installation ran fine, I could start management console, access the database but trying to access the website at localhost:8080/tfs yielded the 503 error.

As a result of a quick Google query I found out that there is plenty of discussion on the web about this topic, for example at StackOverflow or on MSDN. Some post state that they never found a solution for this, other show a long list of possible things to try - nothing worked for me.

By luck I found the solution to my problem. I used RavenDb on my machine before, which is running on port 8080 as well. Due to a different problem in Raven I had in mind that it does some urlacl-stuff by reserving an urlacl for the URL http://+:8080. This is used to assign rights for accesing this URL for the logged on user. If you face a 503 error when trying to use RavenDb with IIS deployment you should run the following command line:


netsh http delete urlacl http://+:8080/


It seems that running raven from the console does a urlacl reservation, which in turn makes TFS to stop working. The solution to the problem was similar to the solution mentioned on the RavenDb website. Run the above command line and TFS works fine - I assume RavenDb will no longer work properly.

This is neither a RavenDb mistake nor a TFS mistake - you should just configure these servers to run on different ports if they run concurrently.

Anyway this is one possible solutions out of a thousand and perhaps it might save someone some valuable time. Happy serving...




Sonntag, 16. September 2012

Creating a child task for a backlog item with TFS API

Because TFS Express lacks the agile planning tools of the full version, I was writing a small tool that makes creating tasks as children of a backlog item more enjoyable. It took me a while to figure it out, so I share my result.

First you need a reference to the team project collection:

var tfs = new TfsTeamProjectCollection(new Uri("https://your.tfspreview.com"));
tfs.EnsureAuthenticated();

var workItemStore = tfs.GetService<WorkItemStore>();

The the new task work item must be created. To instanciate a work item you must pass its type. You get this from the Project class.

var project = workItemStore.Projects["NameOfYourTeamProject"];
var taskType = project.WorkItemTypes["Task"];
var task = new WorkItem(taskType);
task.Title = "A new task"; 
task.State = "To Do";      
task.Save();

Next, we need to create a parent / child link. We need a WorkItemLinkTypeEnd instance that we can get from the WorkItemLinkType that we can get from the work item store like this:

var linkType = workItemStore.WorkItemLinkTypes["System.LinkTypes.Hierarchy"];
var taskLink = new WorkItemLink(linkType.ReverseEnd, task.Id);

The taskLink instance is a parent / child work item link whose reverse end (where it points to aka the child) points to the id of the task work item we created formerly. To connect the close end to the parent, the backlog item, we have to load it and put the link into its Links collection:

var backlogItem = workItemStore.GetWorkItem(backlogItemId);´
backlogItem.Links.Add(taskLink);
backlogItem.Save();

Thats it - the new task appears as a child of the backlog item (for example in the taskboard). Hope this may save someone some time :-)