| In this series of blog posts I like to highlight some features of TFS/Visual Studio that people seem to overlook. In my day to day job I often see that people don’t know about certain feature that are available in Team Foundation Server, Visual Studio or some of the Powertools. Some features are available as a Powertool. These can be downloaded from here Earlier Posts In this part……. Work Item State Diagrams Sometimes it useful to have an overview of all the states of a work item, and how the different states interact wit each other. The state transitions and states are defined inside the Work Item Definition. Surely you can export the work item type definition and look at the XML or, for a better experience, open the Work Item Type Definition in the Process Editor. This is all possible but not very user friendly. A better way to do this is use the Web Access Client that comes with TFS. - Navigate to your Web Access Client by using the url http://<tfs server name>:8080/tfs/web.
- Open a work item or create a new one of a specific type
- When the work item opens Click State Diagram on top
- The Diagram opens. Note all the reasons and transitions that are also drawn
 Have Fun! |
| In this series of blog posts I like to highlight some features of TFS/Visual Studio that people seem to overlook. In my day to day job I often see that people don’t know about certain feature that are available in Team Foundation Server, Visual Studio or some of the Powertools. Some features are available as a Powertool. These can be downloaded from here In this part……. Annotation When you use Team Foundation Server Source Control you certainly know about history. Sometimes you want to see the history of a single file and see how certain pieces of code ended up there. Who did that and when was this done. In TFS 2010 you get the possibility to annotate your file. Simply right click a file in Solution Explorer or Source Control and choose Annotate.  When you click this, the latest version of the file is loaded with annotations on the left side.  The blocks on the left show you the changeset number, the author and date. When you click the changeset number, the changeset details open directly. Have fun ! |
| I got this message a few weeks ago and it scared me. Why? Let me tell you. The company where I do a lot of consultancy called me in the middle of the day that users started receiving this message. People could not check-in, create work items or add/edit any TFS information. The support engineer already had looked in the Event Log and found the following result. Detailed Message: TF30065: An unhandled exception occurred. That scared me. I had had this message before and back then it was a full disk of the database server. That still is not nice as it not easily fixed sometimes, but at least it is obvious. When searching the internet I found many suggestions, but most of them indicated that I should put the DB in Simple recovery mode, or clean things up. Do not do that because this can have serious implications! Our disk was not full, and existing artefacts (work items, source, builds etc.) where still accessible. The database was about 50Gb. I was not planning to do anything about the database structure or data so more investigation was needed. Strange….When we looked a little bit further in the event log there were also different kind of messages. “Could not allocate space for object 'dbo.WorkItemsWere'.'PK_WorkItemsWere' in database 'Tfs_DefaultCollection' because the 'PRIMARY' filegroup is full. Create disk space by deleting unneeded files, dropping objects in the filegroup, adding additional files to the filegroup, or setting autogrowth on for existing files in the filegroup” Aha ! That was actually the hint I was looking for. As we already checked disk space I thought of SQL Server. You can fix a database. What I understood is that this is a trick a lot of DBA’s perform to increase performance on a database. Fix the size of the database file.  In order to fix the problem, we opened the properties of the TFS_DefaultCollection database and changed the autogrowth property to Unrestricted File Growth. Hope this helps! |
| Visual Studio 2010 has this nice feature for config transformations. When adding a new build configuration you also get the possibility to add a web.[Configuration].config file which contains specific settings for that specific configuration. When using the publish function, the transformation uses pretty slick XSLT transformations to update the web.config with the settings you specified in the web.[configuration].config. You can read all about this functionality here. http://msdn.microsoft.com/en-us/library/dd465326.aspx When you are coding for Azure or coding in a team with a number of developers, web.configs and app.configs can really make life hard. Especially for Azure it is hard to maintain the different configurations for the Acceptance and Production environment. Likewise when you are developing software in a team, it is also very unhandy that with every Get Latest Version, your config settings with all your connectionstrings and local paths are overwritten with the settings of your fellow coder. Would it not be nice to use these transformations to solve these problems as well? Just create your own config settings and the build process takes care of everything? Don’t worry about wrong settings or connections? Yes it would ! Unfortunately, the transformations only work on publish and not on build. Together with my friend and colleague from Delta-N Jasper Gilhuis, I figured out a way to use this transform functionality within Visual Studio and the TFS Build Server, which gives you loads of possibilities regarding different configuration files. The solution we have found can be implemented in the following way: - Create a build configuration for your local machine (for example [ComputerName])
  · Create a Web.Computername.config and perform the default transformations as described here http://msdn.microsoft.com/en-us/library/dd465326.aspx  - Unload your project and edit the file
  - Add this piece of code at the end of the project file.
1: <UsingTask AssemblyFile="..\BuildTasks\Microsoft.Web.Publishing.Tasks.dll" TaskName="TransformXml" />
2:
3: <Target Name="BeforeBuild">
4: <Copy SourceFiles="Web.Config" DestinationFiles="Web.Original.Config" />
5: <TransformXml Source="Web.Original.Config" Transform="Web.$(Configuration).config" Destination="Web.config" />
6: </Target>
7:
Make sure the path to the Microsoft.Web.Publishing.Tasks.Dll can be found. Best is to
copy the assembly to a relative folder of your solution. You can find the assembly here. C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web
- Copy all files to local directory
- Reload your solution
- You’re done.
To test it, just put a dummy value in your web.config and a real value in your “own” config. Build Solution and voila!
For the Team Foundation Build Server, just create a configuration like you did before and point to that configuration in the Build Dialog.
Nice thing is, this works for all xml based config files because it is plain XSLT transformations. To use this functionality with app.config or any other.config, follow the steps described here http://stackoverflow.com/questions/3004210/app-config-transformation-for-projects-which-are-not-web-projects-in-visual-studi to make the other configs dependent as well.
Hope this helps!
For your convenience I added a zip with a preconfigured solution with web.config transformations
http://blogs.delta-n.nl/vsts/Lists/Photos/Transformations.zip |
| When working with work items, sometimes it is useful to send the results of a work item query to other people. Even people from outside of your development team. For example the customer wants to know the status of his bugs and does not have access to your systems. In this case you can use the mail functionality of TFS 2010. You can either use the Web Access Client or Visual Studio to send your emails. Web Access Client - Go to your web access client. http://tfsserver:8080/tfs/web and navigate to the Work Items Tab.
- Open a Work Item Query
- When the results are visible open the Tools Dropdown list and select Email All Work Items as a List
 A pop up window appears with all the work items. Here you can add email adresses and additional text. Press Send to send the list.  Visual Studio - Open Visual Studio and the Team Explorer
- Navigate to the query and open it
- In the Query Results Press Open in Microsoft Office and choose Send Query to Outlook.
 Hope this helps! |
| In April 2011 I co presented the Pre-Conference for the Dutch DevDays. This Pre-Conference was all about adopting Agile Practices. My part was to tell something about adopting Scrum. I already mentioned this in my previous post  Below you find the abstract and the link to the Channel 9 Video http://channel9.msdn.com/Events/DevDays/DevDays-2011-Netherlands/devdayspcALM1 Abstract Agile and in particular SCRUM are becoming the defacto choice of companies who are looking to improve software development practices. Every aspect of application development - requirements, estimation, development, test, and deployment - benefits from new ideas and techniques. This pre-conference tutorial presented by Marcel de Vries, Rene van Osnabrugge, Ewald Hofman and Dennis Doomen will help you understand how to adopt and improve your agile practices for greater productivity and higher quality applications. Adopting SCRUM - Learn how Team Foundation Server combined with the Visual Studio SCRUM process template provides a solution for adopting SCRUM in your lifecycle; Enjoy watching ! |
| Yesterday I was looking the video of TechEd US. The Future of Microsoft Visual Studio Application Lifecycle Management. This session of Cameron Skinner gives a really nice overview of the new features that are coming up in Visual Studio vNext. During the session I twittered some things that eventually give a nice summary of what I saw. I certainly recommend you watch the video, but if you are short in time, this is a good alternative. While you are at it. Don’t forget to take a look at the white paper from Jason Zanders Blog. Twitter Feed Started Watching the future of #vsalm video from teched us #tfs Teched on my flatscreen at home #VSALM that's nice! Woot! intellitrace also on production servers in #vsalm vnext Storyboarding in powerpoint ! #VSALM #vNext. Nice templates, custom shapes. Very nice for none technical users The new #tfs webaccess client. All metro styled. #VSALM #vNext Drag drop in your product backlog and easily adding items. Drag drop to sprints & integrated real time velocity and burndown. #VSALM #vNext They really like urban turtle! they only made a better version of it! #VSALM #vNext assigning capacity and states is now getting simple! For the people who are curious what i am looking at. http://t.co/063bvC2 good stuff! That HUB looks sweet! Besides that, shelving all your workspaces , windows, breakpoints etc. Looks even sweeter! #VSALM #vNext Analyzing code clones! where did you copy paste so that you can better reuse! semantical similar blocks code! brilliant! #VSALM #vNext Built in NUnit and XUnit support and extensible to other framewoks. Automatic discovery of all those tests #VSALM #vNext A feature that should have been available in #tfs 2005. Searching work items. #VSALM #vNext happy with that! Built in code review workflow! Cool. Submit code review, shelve changes, open file, compare, give comments. Impressive! #VSALM #vNext The provisional tab. While debugging all code files are opened there instead of in the common dock. Promote from here to normal area. #VSALM I hope this all will make it to the beta and release #VSALM #vNext Stakeholder feedback. Record clicks, video, audio from stakeholders while they are clicking through. Nice ! #VSALM #vNext |
| In my previous post I talked about the Excel workbooks in combination with the MS Scrum template. Excel is a great help in quickly organizing and editing your work items. It is however kind of hard to see a good status overview of your work in the current sprint. Main problem is, that Parent Items (Product Backlog Items) are not automatically set to Done when the child tasks are done. Because of the colors in the excel list this is also very hard to see. My Delta-N colleague and friend Jasper Gilhuis (@jaspergilhuis) created a very nice solution for this. He created an excel sheet that applies color coding to your sprint backlog.  As you can see, the colors directly attend you on which PBI’s are not yet ready and which PBI’s can be set to done. All underlying tasks are either red, yellow or green, depending on their state. Jasper was so kind to make this fully configurable as well and create a xlsm template which you can easily use. This template is attached to the post. In order to use the sheet, you need to follow some additional steps. First create a query in Team Explorer that define the required columns. Call this Color Progress (or something like that)  Make sure you include at least the columns: - ID
- Work Item Type
- Title 1 (PBI title)
- Title 2 (Task title)
- Assigned To
- State
- Remaining Work
After that you open the Excel sheet and link the sheet to the query  - Go to the Team Tab on the Ribbon
- Set your cursor on the A1 cell in the Work Item Progress sheet
- Press “New List”
- Select you Color Progress Query
- Click OK
The data will now be retrieved from TFS If you want to change the colors, or if you are using a different template and thus other state names and work item types, you can use the Settings sheet to modify this.  This is really great and helpful! Thanks Jasper Gilhuis, for your great work ! Download Excel sheet here |
| The MSF Agile 5.0 Process Template in Team Foundation Server 2010 comes with a great set of Excel workbooks. These workbooks allow you maintain your Product and Iteration Backlog with Excel. The workbooks contain a set of macros that are very useful, because they transform information from the workbook in a visual appealing way. You can read all about these workbooks on MSDN The Product Planning Workbook shows information about the different sprints, to allow a good indication of how many story point will fit within an iteration  The Iteration Backlog Workbook shows the capacity of your team and allows you to fill in Interruptions and Holidays.  The MS Scrum Template 1.0 does not have these workbooks. Main reason is probably that is is not really Scrum to assign tasks and sprints beforehand. Although I like the Scrum way of working, I also like to see some indication of capacity and sprint planning. I refactored the Agile Workbooks so that they work for the Scrum Template as well. In my Devdays 2011 talk about Adopting Scrum I showed how to use these sheets. I will attach the sheets to this post as well. The workbooks do not have a TFS connection yet. Once you make a connection, it is stored inside the excel sheet and cannot be easily changed. Save the files somewhere on your WSS portal (or locally) as a template and copy every time you want to make a new planning. In order to use the sheets you need to follow some steps. Product Planning In your MS Scrum Team Project, create a Team Query that shows you all the Product Backlog Items. Save this query as for example “Product Planning” For example:  Make sure the query contains the following columns  Of course it is wise to sort the query by “Backlog Priority” Now follow these steps - Open (a copy) of your Product Planning Workbook and connect the Team Query.
- Place your cursor in cell A1 of the first worksheet.
- Switch to the Team ribbon and click New List.
- Select your Team Project and click Connect.
- From the New List dialog, select the “Product Planning” query from your team project .
 - Your sheet is now filled with data
- Save the workbook
In the Iterations Sheet a graph will fill, as soon as you assign Product Backlog Items to a Sprint and assign effort to the items. The table will only show the sprints that are filled in the Product Backlog sheet. Iteration Backlog In your MS Scrum Team Project, create a Team Query that shows you all the Sprint Backlog Items. Save this query as for example “Sprint Planning” For example:  Make sure the query contains the following columns  Now follow the same steps as in the Product Planning Sheet. Open the Iteration Backlog sheet and connect the Sprint Planning Query. Make sure you fill in a sprint, start and end date in the Settings Tab. As soon as you assign Items to the selected sprint and put Remaining Work in the items, the graphs start to fill up.  Now you can start planning ! Download the Excel Sheets |
View in Web Browser /vsts/_layouts/VisioWebAccess/VisioWebAccess.aspx?listguid={ListId}&itemid={ItemId}&DefaultItemOpen=1 0x0 0x1 FileType vdw 255 Edit in Browser /vsts/_layouts/xlviewer.aspx?id={ItemUrl}&DefaultItemOpen=1&Edit=1 0x0 0x25 FileType xlsx 256 Edit in Browser /vsts/_layouts/xlviewer.aspx?id={ItemUrl}&DefaultItemOpen=1&Edit=1 0x0 0x25 FileType xlsm 256 Edit in Browser /vsts/_layouts/xlviewer.aspx?id={ItemUrl}&DefaultItemOpen=1&Edit=1 0x0 0x25 FileType xlsb 256 Edit in Browser /vsts/_layouts/PowerPoint.aspx?PowerPointView=EditView&PresentationId={ItemUrl}&source={Source} 0x0 0x4 FileType pptx 256 Edit in Browser /vsts/_layouts/PowerPoint.aspx?PowerPointView=EditView&PresentationId={ItemUrl}&source={Source} 0x0 0x4 FileType ppsx 256 View in Browser {SiteUrl}/_layouts/WordViewer.aspx?id={ItemUrl}&source={Source} 0x0 0x1 FileType docx 255 Edit in Browser {SiteUrl}/_layouts/WordEditor.aspx?id={ItemUrl}&source={Source} 0x0 0x4 FileType docx 255 View in Browser {SiteUrl}/_layouts/WordViewer.aspx?id={ItemUrl}&source={Source} 0x0 0x1 FileType doc 255 View in Browser {SiteUrl}/_layouts/WordViewer.aspx?id={ItemUrl}&source={Source} 0x0 0x1 FileType dotx 255 View in Browser {SiteUrl}/_layouts/WordViewer.aspx?id={ItemUrl}&source={Source} 0x0 0x1 FileType dot 255 View in Browser {SiteUrl}/_layouts/WordViewer.aspx?id={ItemUrl}&source={Source} 0x0 0x1 FileType dotm 255 View in Browser {SiteUrl}/_layouts/WordViewer.aspx?id={ItemUrl}&source={Source} 0x0 0x1 FileType docm 255 Edit in Browser {SiteUrl}/_layouts/WordEditor.aspx?id={ItemUrl}&source={Source} 0x0 0x1 FileType docm 255 View in Browser {SiteUrl}/_layouts/OneNote.aspx?id={ItemUrl}&Edit=0&source={Source} 0x0 0x1 FileType one 255 Edit in Browser {SiteUrl}/_layouts/OneNote.aspx?id={ItemUrl}&Edit=1&source={Source} 0x0 0x4 FileType one 255 View in Browser {SiteUrl}/_layouts/OneNote.aspx?id={ItemUrl}&Edit=0&source={Source} 0x0 0x1 ProgId OneNote.Notebook 252 Edit in Browser {SiteUrl}/_layouts/OneNote.aspx?id={ItemUrl}&Edit=1&source={Source} 0x0 0x4 ProgId OneNote.Notebook 254 Compliance Details javascript:commonShowModalDialog('{SiteUrl}/_layouts/itemexpiration.aspx?ID={ItemId}&List={ListId}', 'center:1;dialogHeight:500px;dialogWidth:500px;resizable:yes;status:no;location:no;menubar:no;help:no', function GotoPageAfterClose(pageid){if(pageid == 'hold') {STSNavigate(unescape(decodeURI('{SiteUrl}'))+'/_layouts/hold.aspx?ID={ItemId}&List={ListId}'); return false;} if(pageid == 'audit') {STSNavigate(unescape(decodeURI('{SiteUrl}'))+'/_layouts/Reporting.aspx?Category=Auditing&backtype=item&ID={ItemId}&List={ListId}'); return false;} if(pageid == 'config') {STSNavigate(unescape(decodeURI('{SiteUrl}'))+'/_layouts/expirationconfig.aspx?ID={ItemId}&List={ListId}'); return false;}}, null); return false; 0x0 0x1 ContentType 0x01 898 Edit in Browser /_layouts/images/icxddoc.gif /vsts/_layouts/formserver.aspx?XsnLocation={ItemUrl}&OpenIn=Browser&Source={Source} 0x0 0x1 FileType xsn 255 Edit in Browser /_layouts/images/icxddoc.gif /vsts/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser&Source={Source} 0x0 0x1 ProgId InfoPath.Document 255 Edit in Browser /_layouts/images/icxddoc.gif /vsts/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser&Source={Source} 0x0 0x1 ProgId InfoPath.Document.2 255 Edit in Browser /_layouts/images/icxddoc.gif /vsts/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser&Source={Source} 0x0 0x1 ProgId InfoPath.Document.3 255 Edit in Browser /_layouts/images/icxddoc.gif /vsts/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser&Source={Source} 0x0 0x1 ProgId InfoPath.Document.4 255 View in Browser /vsts/_layouts/xlviewer.aspx?id={ItemUrl}&DefaultItemOpen=1 0x0 0x1 FileType xlsx 255 View in Browser /vsts/_layouts/xlviewer.aspx?id={ItemUrl}&DefaultItemOpen=1 0x0 0x1 FileType xlsm 255 View in Browser /vsts/_layouts/xlviewer.aspx?id={ItemUrl}&DefaultItemOpen=1 0x0 0x1 FileType xlsb 255 View in Browser /vsts/_layouts/PowerPoint.aspx?PowerPointView=ReadingView&PresentationId={ItemUrl}&source={Source} 0x0 0x1 FileType pptx 255 View in Browser /vsts/_layouts/PowerPoint.aspx?PowerPointView=ReadingView&PresentationId={ItemUrl}&source={Source} 0x0 0x1 FileType ppt 255 View in Browser /vsts/_layouts/PowerPoint.aspx?PowerPointView=ReadingView&PresentationId={ItemUrl}&source={Source} 0x0 0x1 FileType pptm 255 View in Browser /vsts/_layouts/PowerPoint.aspx?PowerPointView=ReadingView&PresentationId={ItemUrl}&source={Source} 0x0 0x1 FileType ppsx 255 View in Browser /vsts/_layouts/PowerPoint.aspx?PowerPointView=ReadingView&PresentationId={ItemUrl}&source={Source} 0x0 0x1 FileType ppsm 255 View in Browser /vsts/_layouts/PowerPoint.aspx?PowerPointView=ReadingView&PresentationId={ItemUrl}&source={Source} 0x0 0x1 FileType pps 255 View in Browser /vsts/_layouts/PowerPoint.aspx?PowerPointView=ReadingView&PresentationId={ItemUrl}&source={Source} 0x0 0x1 FileType potx 255 View in Browser /vsts/_layouts/PowerPoint.aspx?PowerPointView=ReadingView&PresentationId={ItemUrl}&source={Source} 0x0 0x1 FileType potm 255 View in Browser /vsts/_layouts/PowerPoint.aspx?PowerPointView=ReadingView&PresentationId={ItemUrl}&source={Source} 0x0 0x1 FileType pot 255 |
|
|
|