TFS 2012 – Customize Backlog Pages

September 12, 2012 Leave a comment

 

Add New Field for Backlogs

Download agile process config file

witadmin exportagileprocessconfig /collection:http://tfsbox:8080/tfs/FirstCollection /p:CMMI-Test /f:"d:\tfs2012\AgileConfiguration.xml"

New Field To Add Dialog

Locate the AddPanel element and Iteration Path Element :

    <AddPanel>

      <Fields>

        <Field refname="System.Title" />

        <Field refname="Microsoft.VSTS.CMMI.RequirementType" />

        <Field refname="System.IterationPath" />

      </Fields>

    </AddPanel>

Upload config file to TFS Server

witadmin importagileprocessconfig /collection:http://tfsbox:8080/tfs/FirstCollection /p:CMMI-Test /f:"d:\tfs2012\AgileConfiguration.xml"

Result

Notice that Iteration Path Field appeared in the Add Dialog

image

Note:

witadmin command-line tool can be found in below locations
cd %programfiles%\Microsoft Visual Studio 11.0\Common7\IDE

Note: For Windows 64-bit version…replace %programfiles% with %programfiles(x86)%


Add Work Item type as Backlog Item

By Default only Work items in “Requirements” category (defined in Collection Categories) can be added as Backlog item. If you want to add other workitems such as Bugs, Change Requests as Backlog Item…Here is the solution.

Download Categories

witadmin exportcategories /collection:http://tfsbox:8080/tfs/FirstCollection /p:CMMI-Test /f:"d:\tfs2012\categories.xml"

Add New WorkItems

Locate the CATEGORY element for the "Requirement Category" in categories.xml. By default (in CMMI process template) it has only one child for Requirement Workitem. Add Other workitems to the list. In the below code, I added Bug, Change Request, Task workitems.

<CATEGORY refname="Microsoft.RequirementCategory" name="Requirement Category">

  <DEFAULTWORKITEMTYPE name="Requirement" />

  <WORKITEMTYPE name="Bug" />

  <WORKITEMTYPE name="Task" />

  <WORKITEMTYPE name="Change Request" />

</CATEGORY>

Upload Categories

witadmin importcategories /collection:http://tfsbox:8080/tfs/FirstCollection /p:CMMI-Test /f:"d:\tfs2012\categories.xml"

Result

TF400916: The current configuration is not valid for this feature. This feature cannot be used until a Team Foundation Administrator corrects the configuration.

Oops…!

Add Microsoft.VSTS.Scheduling.Size and Microsoft.VSTS.Common.StackRank field to Change Request work item type of the team project.

Now you can add Change requests as Backlog

image

 

In the same way you can add “Issue”, “Bugs” work item type as well. But what about Tasks?

By Default Task work item is in “Task Category” and you can’t have an work item in both “Task category” and “Requirement category”. Also Backlogs are only for “Requirement category”

Hope this Helps…!

Categories: Uncategorized

Configuration Transformation in Windows/Console Apps

August 31, 2012 Leave a comment

Introduction

If you are an ASP.NET Web Developer you might have seen the advantages of Web.Config Transformations. Here you can have separate Config files for each configuration defined in “Application Configuration Manager”

image image

But the Configuration Transformations are not supported for Windows Or Console Applications. But there is an work-around way to get it done. Lets see How it is…by Step by Step.

Approach…

image

You can observe that this has only one App.Config file. Lets add two configuration files “App.Test.Config”, “App.Prob.Config”

image

Newly added files are at the Root Level of the Project instead of under App.Config file. See how they are defined in .proj file. (For this you need unload the project and Edit the Project File in Visual Studio)

image

Use DependentUpon  element to make “App.Test.Config”, “App.Prob.Config” files Childs to “App.Config” as  shows below…

image

Reload the Project and See the result

image

Let Add a connection String to the App.Config file.

<?xml version="1.0"?>

<configuration>

    <startup>

        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>

    </startup>

 

  <connectionStrings>

    <add name="MyConnString" connectionString="Data Source=.;Initial Catalog=MyDataBase_dev;Integrated Security=True" providerName="System.Data.SqlClient" />

  </connectionStrings>

 

</configuration>

Add Connection strings to Child Config files also… (with the change in database name MyDataBase_Prod, MyDataBase_Test)

<?xml version="1.0" encoding="utf-8" ?>

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">

 

  <connectionStrings xdt:Transform="Replace">

    <add name="MyConnString" connectionString="Data Source=.;Initial Catalog=MyDataBase_Prod;Integrated Security=True" providerName="System.Data.SqlClient" />

  </connectionStrings>

 

</configuration>

To know more about the Transformation syntax refer below links

http://msdn.microsoft.com/en-us/library/dd465326.aspx

Now…Let Test it by Setting The Project Configuration to Test and Build…

image

If you look at the config file at bin\Test folder…you will find connection string same as “App.config” file.

Why…?

Out of the box, .config file transformation is only available for Web application projects in Visual Studio 2010. Console, WinForms, WPF and other applications projects don’t support this capability out of the box.

What is the Work-Around? TransformXml Task

In this MSBuild code snippet, we are using the TransformXml task defined in the Microsoft.Web.Publishing.Tasks.dll. This is the task responsible for transforming Web.config files in Web application projects. It takes parameters that specify names of the original .config file, the transform file and the output (transformed) file. We use TransformXml task to override AfterCompile target if a transform file exist for the current build configuration. For example, if our project contains a file called App.Debug.config and the current project configuration is Debug, the AfterCompile target will be called. Finally, we use ItemGroup element to change the built-in AppConfigWithTargetPath item collection.

Add Below code to the Project file.

  <UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll" />

  <Target Name="AfterCompile" Condition="exists(‘app.$(Configuration).config’)">

    <TransformXml Source="app.config" Destination="$(IntermediateOutputPath)$(TargetFileName).config" Transform="app.$(Configuration).config" />

    <ItemGroup>

      <AppConfigWithTargetPath Remove="app.config" />

      <AppConfigWithTargetPath Include="$(IntermediateOutputPath)$(TargetFileName).config">

        <TargetPath>$(TargetFileName).config</TargetPath>

      </AppConfigWithTargetPath>

    </ItemGroup>

  </Target>

That’s it….!

Build the project in Test Configurations and see the output @ bin\Test folder…!

Hope this Helps..Smile

Categories: Uncategorized

Excel – Highlight Row & Columns of Currently selected cell

February 29, 2012 Leave a comment

Problem:

In large worksheets it is very difficult to track the current row and column of the currently selected cell.

Solution:

Found a nice solution here

Dim RowRng As Long
Dim ColRng As Long

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

    If RowRng <> 0 Then
        With Rows(RowRng).Interior    ‘begin clearing previous highlights
            .Pattern = xlNone
        End With
        With Columns(ColRng).Interior
            .Pattern = xlNone
        End With
    End If
   
    RowRng = Target.Row
    ColRng = Target.Column
    With Rows(RowRng).Interior       ‘set highlights
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 49407
    End With
    With Columns(ColRng).Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 49407
    End With
End Sub

This works as expected. Sample screen is shown below…

image

Categories: Office

TFS 2010 Build Automation–Different Folders for each VS Project

January 30, 2012 Leave a comment

Problem

My Visual Studio solution contains several projects of different kind (Web Apps, Console Apps, etc.). If you are using single TFS Build definition for all projects, then TFS will place all projects output files into the root of Drop folder. It is very hard to manage the output files.

It would be if TFS placed output files of each project in a separate folder. TFS 2010 don’t have this feature  by default, but there is an workaround with two steps.

Step-1

1.1 Select “Run MsBuild for Project” activity from TFS Build Template Workflow.

image

1.2 Update CommandLineArguments with the following
String.Format("/p:SkipInvalidConfigurations=true /p:TeamBuildOutDir=""{0}"" {1}", BinariesDirectory, MSBuildArguments)

1.3 Clear OutDir property.

Step-2

Update PropertyGroup > Ouputpath in all Project files (.csproj / .vbprog) in the Visual Studio Solution, for each configuration.
image

<OutputPath Condition=" ‘$(TeamBuildOutDir)’==” ">bin\Debug\</OutputPath>
<OutputPath Condition=" ‘$(TeamBuildOUtDir)’!=” ">$(TeamBuildOutDir)\WebApplication3\</OutputPath>

That’s it. Hope it helps.

Categories: TFS

Query dbproj file to get list of database object

October 3, 2011 Leave a comment

Recently I got a requirement to parse database project to list down all procedures and tables etc.

I binged net for the solution and able to get the query finally.


DECLARE @xml XML;
SELECT @xml = CAST(xmlFile.BulkColumn AS XML)
FROM OPENROWSET(BULK 'D:\WorkArea\Projects\myDatabaseProject.dbproj' ,single_blob) AS xmlFile
IF OBJECT_ID('tempdb..#t') IS NOT NULL
drop table #t

;WITH XMLNAMESPACES( ‘http://schemas.microsoft.com/developer/msbuild/2003&#8217; AS ns)
Select
build.value(‘@Include’,’nvarchar(1000)’) AS _path
into #t
FROM @xml.nodes(‘//ns:Build’) AS R(build)
GO
IF OBJECT_ID(‘tempdb..#Result’) IS NOT NULL
drop table #Result
CREATE table #Result(fname varchar(1000), ftype varchar(100))
— Get Indexes
INSERT INTO #Result (fname, ftype)
SELECT reverse(left(reverse(_path), charindex(‘\’, reverse(_path)) -1)) as _name, ‘index’ from #t WHERE _path LIKE ‘%.index.sql’
UNION ALL
SELECT reverse(left(reverse(_path), charindex(‘\’, reverse(_path)) -1)) as _name, ‘proc’ from #t WHERE _path LIKE ‘%.proc.sql’
UNION ALL
SELECT reverse(left(reverse(_path), charindex(‘\’, reverse(_path)) -1)) as _name, ‘table’ from #t WHERE _path LIKE ‘%.table.sql’
UNION ALL
SELECT reverse(left(reverse(_path), charindex(‘\’, reverse(_path)) -1)) as _name, ‘function’ from #t WHERE _path LIKE ‘%.function.sql’
UNION ALL
SELECT reverse(left(reverse(_path), charindex(‘\’, reverse(_path)) -1)) as _name, ‘view’ from #t WHERE _path LIKE ‘%.view.sql’
UNION ALL
SELECT reverse(left(reverse(_path), charindex(‘\’, reverse(_path)) -1)) as _name, ‘defconst’ from #t WHERE _path LIKE ‘%.defconst.sql’
UNION ALL
SELECT reverse(left(reverse(_path), charindex(‘\’, reverse(_path)) -1)) as _name, ‘schema’ from #t WHERE _path LIKE ‘%.schema.sql’

select * from #Result where ftype = ‘table’

Similarly we can parse SSIS projects also. Script is as shown below.


DECLARE @xml XML;
SELECT @xml = CAST(xmlFile.BulkColumn AS XML)
FROM OPENROWSET(BULK 'D:\WorkArea\MySSISProject.dtproj' ,single_blob) AS xmlFile
IF OBJECT_ID('tempdb..#t') IS NOT NULL
drop table #t
Select
R.build.value('Name[1]','nvarchar(1000)') AS _path
FROM @xml.nodes('//Project/DTSPackages/DtsPackage') AS R(build)

References:
http://sqlblog.com/blogs/jamie_thomson/archive/2011/01/17/querying-visual-studio-project-files.aspx

http://www.simple-talk.com/sql/learn-sql-server/robyn-pages-sql-server-string-manipulation-workbench/

http://www.simple-talk.com/sql/t-sql-programming/sql-string-user-function-workbench-part-1

Categories: Uncategorized Tags: ,

Rollback Changeset in TFS 2010

July 15, 2011 Leave a comment

Recently, I got a requirement to rollback changeset from TFS 2010. I referred some articles in the net. Below are some of them

http://msdn.microsoft.com/en-us/library/dd380776.aspx
http://geekswithblogs.net/TarunArora/archive/2011/06/27/how-to-undo-a-changeset-using-tf.exe-rollback.aspx

Here I want to summarize the steps to rollback change sets in TFS 2010.

As described in above links, TF is a TFS command line tool available in “C:\ProgramFiles\Microsoft Visual Studio 10.0\Common7\IDE”. There are several arguments we pass to it. Among them /Changeset and /toVersion are mostly used arguments.

/Changeset
Syntax: tf rollback /changeset:C<n> <TFS BranchPath> /r — where <n> is the changeset number
How it works?: Removes the changes done as part of the <n> changeset.

/toVersion

Syntax: tf rollback /toVersion:C<n> <TFS Branch Path> /r –where <n> is the changeset number
How it works?: This will remove the changes done by all changesets after thespecified changeset.

For example, if you have change sets 1, 2, 3, 4. The command “tf rollback/changeset:C4” will remove the changes of Changeset 4. The command
“tf rollback /toVersion:C2” will remove the changes of Changesets 3,4 and leaves the at change set#2.

Points to remember:

  1. TFS Branch Path should
    be path to the branch ex: $/project/applicaitonFolder/branchFolder
  2. You need to run this TF command from the workspace folder.
  3. Open VS 2010 command prompt
  4. Go to the branch folder in your local disk
    Ex: D:\project\applicaitonFolder\branchFolder>tf rollback /toVersion:C123
    $/project/applicaitonFolder/branchFolder /r

On successful execution of TF Rollback, files will be checked-out in your workspace. You can check-in them to complete the rollback.

 

Categories: Uncategorized

TFS – Get Compare Results

January 25, 2011 Leave a comment

I need to export the Folder compare results to a text file. Command used for this is “tf folderdiff

Note: This command comes with VS2008, you can’t found in VS2005.
Syntex:
C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE>tf folderdiff /?
TF – Team Foundation Version Control Tool
Copyright (c) Microsoft Corporation.  All rights reserved.

Displays a visual representation of the differences between files in two server
folders, in a server folder and a local folder, or in two local folders.

tf folderdiff [sourcePath] targetPath [/recursive] [/noprompt]
              [/server:serverName:port] [/filter:filter]
              [/filterLocalPathsOnly]
              [/view:same,different,sourceOnly,targetOnly]

Example:
tf folderdiff $/Project/MyApplication/Branch1/database $/Project/MyApplication/Branch2/database /login:myDomain\userName,myPassword /s:http://myTfsServer::8080 /view:different,sourceOnly,targetOnly /noprompt  /recursive > c:\result.txt

Very useful command.

Categories: Uncategorized

How to Test Emails during the Development?

January 25, 2011 Leave a comment

It is very common need to test whether Emails are going to recipients or not, during our development. But your development environment may not support to send the emails.
Below are  the few such environments.
Note: Here I am considering the developing .NET application, either WinForms, or WebForms.

  1. Using Windows XP system for developement.
  2. You don’t have IIS.
  3. You have IIS, but without SMTP server configuration.
  4. In case of ASP.NET web application, you are using ASP.NET Development Server (Cassini)

In such cases, the best workaround to test emails is – Configure an 3rd party SMTP server.
Coming to the point of interest for this post…that is SMTP4Dev (http://smtp4dev.codeplex.com/). It is a dummy SMTP server, sits in the system tray and does not deliver the received messages. The received messages can be quickly viewed, saved and the source/structure inspected. Useful for testing/debugging software that generates email.

How to use it?

Step#1: Download and install it. You will find it in the system tray

And below is its interface

Step#2: Configure (Domain name, IP, Port) and start listening

Step#3: Now, your SMTP server is ready. Before testing this, add configuration setting to web.config file.
    <mailSettings>
      <smtp>
        <network host=”localhost” port=”31” defaultCredentials=”true” enableSsl=”false”  />
      </smtp>
    </mailSettings>
  </system.net>

Step#4: Below is the code snippet to test it.

SmtpClient mailClient = new SmtpClient();
MailMessage msg = default(MailMessage);
msg = new MailMessage();
msg.From = new MailAddress(“sentFrom@EmailAddress.com”);
msg.To.Add(“ypradeep23@hotmail.com“);
msg.Subject = “TEST Subject”;
msg.Body = “TEST Message”;
msg.IsBodyHtml = true;
mailClient.Send(msg);

Step#5: Once it done, you will have the mail in SMTP4Dev window, as shown below…

Step#6: In this dialog, “Inspect”, “View” are useful commands.
Inspect, will shows you the inner details of the email (like… source, headers, body… )

And you can “View” the mail in Outlook client / Windows Live mail client.

We are done with Email testing during the development it self. Very useful and hope the same for you.
Also, there is one more alternative to test emails using deliveryMethod=”SpecifiedPickupDirectory”. Refer the below links…
http://www.antix.co.uk/Projects/SMTPServerForDevelopers
http://chillicode.wordpress.com/2009/07/25/send-emails-with-out-smtp-server/

– Pradeep.

Categories: Uncategorized

TFS – List out all changes between 2 dates

December 21, 2010 Leave a comment

List out all changes between 2 dates

  1. Need to use “C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\tf.exe”; Run it from command prompt.

Command:  “tf history -noprompt -server:<tfs server> <Project Path> -version:<Date1>Z~<Date2>Z -recursive -format:detailed -login:<UserName>,<Password> > c:\checkedout.txt”

Ex: tf history -noprompt -server:http://mytfs-server:8080 $/MyProject/Release/Dev2 -version:D2010-11-01T01:01:01Z~D2010-12-20T20:00:00Z -recursive -format:detailed -login:crm\pradeep,password > c:\checkedout.txt

Categories: Uncategorized

TFS – List out all checkout files

December 21, 2010 Leave a comment

Some times you may need to listed out all the checkedout files in an TFS project. This is very frequent task in my project. There is a command line tool available for to do this.

  1. Need to use “C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\tf.exe”; Run it from command prompt.
  2. Command:  “tf.exe status $/MyProject/Release/Dev2 /login:crm\pradeep,xxxx /user:* /s:http://mytfs-server:8080 /recursive > c:\checkedout.txt”

    Project name = $/MyProject/Release/Dev2
    User Name = crm\pradeep
    Password = xxxx (replace with your password)
    Users = * (/user:*, consider all users)
    TFS Server = http://mytfs-server:8080
    Output = c:\checkedout.txt

  3. References:
    http://msdn.microsoft.com/en-us/library/9s5ae285.aspx
    http://clay.lenharts.net/blog/2008/01/28/listing-checked-out-files-in-team-system-tfs/
  4. To avoid manual work in executing this from command prompt, create a batch file. Below is the batch file, and just click on it. (Need to change your password)@echo off
    echo *** LIST OF CHECKED-OUT FILES FROM A TFS SERVER ***CD C:\Program Files\Microsoft Visual Studio 8\Common7\IDE

    tf.exe status $/MyProject/Development  /login:crm\pradeep,password /user:* /s:http://comrcn01clademo:8080 /recursive > c:\checkedout.txt

    REM for specific User
    REM tf.exe status $/MyProject/Development /login:crm\pradeep,password /user:crm\pradeep /s:http://mytfs-server:8080 /recursive > c:\checkedout.txt

    START c:\checkedout.txt
    echo *** Completed ***
    REM pause

  5. If you are using VS 2010, TFS 2010… try TFS Power Tools
Categories: Uncategorized