In this blog, I’ll examine TFS capabilities to create and manage subscriptions. While I will be using Visual Studio 2008 and TFS 2008, most of this column applies equally to TFS 2005.
Built In Alerts
Alerts are notifications in e-mail when certain events occur in your team project. You can subscribe to alerts for yourself or for others, and can select to receive alert messages in either HTML or Plain Text format. However, Team Explorer has 4 different built-in alerts:

Using TFS Exposed Events
Alert subscriptions are stored on the server by team project, and you can add different alerts for each team project that you have permission to open. If you want to get notified for all new workitems, regardless of who they get assigned to, you will want a custom subscription.
There are a couple of techniques you can use to achieve this.
BisSubscribe
First option is to create alert with the BisSubscribe tool that is on the TFS at C:\Program Files\Microsoft Visual Studio 2008 Team Foundation Server\TF Setup. Note that this tool is also available as a part of the Visual Studio Team Server (VSTS ) SDK, which is, in turn, a part of the larger Visual Studio SDK.
There is a ChangeType with each WorkItemChangedEvent, set to either “Change” or “New”. In the filter expression below, only new changes will generate emails.
BisSubscribe.exe /eventType WorkItemChangedEvent /deliveryType EmailHtml /server <server name> /address <email address> /filter “PortfolioProject = ‘<project>’ AND ChangeType = ‘New’ ”
|
Parameter |
Command |
Notes |
|
eventType |
Subscribe |
The name of the event. Case sensitive. |
|
filter |
Subscribe |
A filter expression. Default is none. |
|
address |
Subscribe |
The e-mail address or Web method URL for the subscriber. |
|
server |
Subscribe/Unsubscribe |
The Team Foundation Server name. |
|
tag |
Subscribe |
A field to use later to identify this subscription. Default is none. |
|
deliveryType |
Subscribe |
Indicates the preferred message delivery type: EmailHtml, EmailPlaintext, or SOAP. Default is SOAP. |
|
id |
Unsubscribe |
The integer ID for the subscription to be deleted when unsubscribing. |
Team Foundation Server Event Subscription Tool
This tool for subscribing to events on a Team Foundation Server is based on the bissubscribe.exe tool, but have user interface. It is deployable to client workstations, whereas bissubscribe.exe only exists on the Team Foundation Server. It is very easy to use and with a couple of clicks you can create subscription (see screenshot).

List of supported events:
Precondition
Precondition for TFS to be able to send emails is to configure Team Foundation Server to use an existing SMTP server to send e-mail alerts. Users can configure alerts for various projects, work item, and build event notifications.
You can change the e-mail address by using the emailAddress parameter of the ChangeAccount Command or by manually editing the Services Web.Config file. However, to change the SMTP server, you must manually edit the Services Web.Config file.
The content of Team Foundation Server alert e-mails is not customizable. The content of the e-mails is automatically generated from the TeamFoundation.xsl file. Modifying this file is not recommended. If you do modify the contents of this file, be sure to thoroughly test your modifications. Incorrect modifications of this file can result in the failure of Team Foundation Server e-mail alerts and the inability to view Team Foundation work items, changesets, or files in a Web browser.
Required Permissions
To perform this procedure, you must be a member of the Administrators group on the Team Foundation application-tier server.
To define or change the SMTP server
To define or change the sender e-mail address for e-mail alerts
You must close and restart the Web services application for Team Foundation before your changes will take effect.
]]>Visual Studio 2010 RC made some significant improvements of which I chose following:
Pause playback to wait for certain event
This capability was not available in VS 2010 Beta 2 and it was noticeably lacking. For example, it was impossible to wait for the form, message, progress bar to disappear etc.
This was accomplished with a modification of the UITestControl class. In the RC, you can use the appropriate UITestControl methods from the list.
1. WaitForControlReady() – This waits for the control to be ready to accept mouse/keyboard input.
2. WaitForControlEnabled() – This waits for the control to be enabled.
3. WaitForControlExist() – This waits for the control to exist on the UI.
4. WaitForControlNotExist() – This waits until the control ceases to exist on the UI.
5. WaitForControlPropertyEqual(string propertyName, object propertyValue) – This waits for the specified property of the control to have the given value.
6. WaitForControlPropertyNotEqual(string propertyName, object propertyValue) – This waits for the specified property of the control to not have the given value.
7. WaitForControlCondition(Predicate conditionEvaluator) – This waits until the specified predicate returns true.
Also, the namespace Microsoft.VisualStudio.TestTools.UITesting have 3 new namespaces which provide classes that represent HTML, WinControls, WpfControls respectively within the framework.

More importantly, all controls are now available across a whole solution.
Multiple UI Maps are now supported. Previously a Coded UI Test Project could have only one UI Map file. Now, we allow the addition of multiple UI Maps to enable test projects to scale up to real world applications. Also, this will enable multiple UI automation engineers to work simultaneously on the test project without running into merge conflicts.
All accessed objects and actions performed during recording sessions were stored in UIMap.Uitest.xml and this file was used for code re-generation in the UIMap.Designer.cs file. However, in order to customize recorded actions or objects, a user has to modify either UIMap.Designer (you must be familiar with file structure) or the UIMap.cs file as a part of partial class UIMap.
In the cases of modifications and creating a lot of tests in one project, the UIMap file got cluttered and so big that it was really necessary to exercise your skills in using other IDE features for searching. Furthermore, the UIMap file would contain logically different methods for different tests. Opposite to partial class definition, it was impossible to split UIMap class into multiple individual files.
Specialized classes (e.g., HtmEdit) are now part of the product binaries instead of the UserControls.cs file generated earlier.
In Visual Studio 2010 Beta 2, all controls used in test were stored in Usercontrols.cs and this file was project specific. In order to use custom control, user should add that class to all projects within solution.
]]>When you utilize Merit Solutions Development Services, you have direct access to a highly-skilled team with proven technical, functional and domain expertise. Our 15+ software engineers work under 4 separate Team Leaders (Technical Team Lead, Development Team Lead, QA Team Lead, and SharePoint / CRM Team Lead). Each Belgrade-based Team Lead is managed in a very hands-on way by our US-based Director of Development, a top-notch programmer from Serbia who was instrumental in structuring our development division. In most cases, a project will blend consultants and engineers from the U.S. (analysis) with team members in Belgrade (design, coding, testing). So, our overall costs include a blend of both of these engineering locations. As mentioned before, each software engineer is English fluent, and capable of communicating directly with all of our clients.
This direct access to developers leverages our strong project management expertise, reducing the risks of miscommunication and ensuring the highest possible software development quality.
]]>In our previous posts, we have discussed the benefits of our “nearshore location” in Eastern Europe, and the ability to take advantage of our scalable resources. In this article, we will discuss the benefits of our 24/7 virtual operations.
There is a natural time differential of 7 hours between our onshore (Chicago) and offshore (Belgrade) locations. This development model translates into a virtual 24/7 kind of operation for our projects. Leveraging our distributed resources in both locations, we are able to provide clients with maximum visibility into our software development lifecycle. We also ensure that team members, regardless of location, have overlapped work timings for day-to-day communication. We utilize video conferencing, instant messaging, web portals, and other online collaboration tools to maximize internal productivity. This enables fast and efficient client communication.
]]>Microsoft has confirmed that this is a problem in the Microsoft products and published resolution for this problem on their support site:
http://support.microsoft.com/default.aspx?scid=kb;en-us;940791
]]>If you receive this error when you run Workflow infrastructure configuration wizard:
The request failed with HTTP status 405: Method Not Allowed.
Then you should change the Application pool for your workflow (which is by default MicrosoftDynamicsAXWorkflow50) to enable 32 bit applications:

Another problem appeared when I tried to debug the code I wrote. During debugging process it worked worse than in the previous situation. Using the debugger, the focus is always kept on the debug script and none of the focuses can be reached, which means that none of the reports can be printed.
The main problem was printing reports from different forms. We needed the possibility to join one printing report from one form to another printing report from a different one. There is a small delay between the moment when options for printing are chosen and the moment of printing the report, especially if the screen is chosen for report destination. In that case, the second window already gets a focus on the print button when the first report starts to be printed. Focus on the second window is lost so the printing and processes added to that window through triggers would not be done completely.
In such situations, the only way I found to be efficient is good knowledge about processes we are working with. We need to count every possible situation which can happen during the process we need to implement, which is in most situations pretty complicated and sometimes impossible.
]]>After you register, a new window will open with a download service within it which will start downloading the files from the Microsoft Server. It supports resumed downloads, so you can safely start it and walk away from it. If your download gets interrupted, it will restart where it left off. The total download size is 684.48Mb and it contains the complete MS Office 2010 Package on your PC. This includes Word, OneNote, InfoPath, PowerPoint, Access, SharePoint Workspace, Outlook, Publisher, Communicator & Excel. There are two activation options for the 2010 Microsoft Office products. The MAK key described above is one activation method. Another activation option for an IT administrator is to set up a Key Management Server (KMS). Just choose the version (Microsoft recommends 32-bit which runs great on both 32-bit and 64-bit versions of Windows) and pick your software language to download the Beta software. Downloading the Office Professional Plus 2010 Beta can take an hour or more. The exact time will depend on your provider, bandwidth, and traffic.
Once the download is complete, launch the downloaded file and follow the set up instructions.
After you have installed Microsoft Office Professional Plus 2010 Beta, please follow these steps:
That’s it!
]]>The most common situation is that you need to pick-up some user information from MOSS and show / manipulate it on an InfoPath form. There are a few possible ways to make it work, with or without coding. The most powerful thing is by using web services provided by MOSS.
To be able to use web services in InfoPath, you should create a new Data Connection (Tools-> Data Connection). When the wizard starts, define what you would like to do with the data: submit or receive. Select Web services as a source of data and define the web service’s location. For getting user profile information (email, phone number, preferred name, etc) use MOSS services located at http://MOSSServerName/_vti_bin/UserProfileService.asmx.
Moving forward, you can take the profile data for any current or other MOSS user. For users currently logged on, you should be able to pick-up some profile info when the form is loading. For non-current users, you have a lot different cases and you can pick data on the field value changed or drop down list value selected or something else.
If you need to handle some of the available events, you should have VSTA installed (Visual Studio Tools for Applications). If you do not have it, you will not be able to create event handlers at all. To enable it, find Microsoft Office in list of Add/Remove programs. Select Change option and add find those tools for InfoPath. Select the option to install it.
Now you can create event handlers by selecting a control, right click on it, then Programming and selecting the desired event. The most interesting case is if you have a drop down list with a few names and you would like to send an email to the selected one. Before we continue, just to note that the drop down list item has a Value and a Display Name. This can give us the possibility to hide non user-friendly data. So, if you decide to get email defined in MOSS for selected user, assign the Account Name as Value for each item in the drop down. Display value can be as you wish…
When VSTA is running, add reference to UserProfileService and name it. Code in the event handler should look like:
XPathNavigator XPathNav = MainDataSource.CreateNavigator();
ServiceReferenceName.UserProfileService profile = new ServiceReferenceName.UserProfileService();
profile.UseDefaultCredentials = true;
profile.PropertyData[] userProperties = null;
try {
userProperties = profile.GetUserProfileByName(SelectedDDLValue);
}
catch { }
if (userProperties == null || userProperties.Length == 0) {
return;
}
for (int i = 0; i < userProperties.Length; i++) {
XPathNavigator node = null;
case “workemail”:
node = XPathNav.SelectSingleNode(“/my:emailField/my:userEmail”, NamespaceManager);
break;
default:
continue;
}
ServiceReferenceName.ValueData[] values = userProps[i].Values;
if (values.Length > 0) {
if (node != null && string.IsNullOrEmpty(node.Value)) {
node.SetValue(values[0].Value.ToString());
}…
The email field can be hidden or visible, it depends on what information you would like to share with the user.
Understanding How Microsoft Dynamics GP Works With Microsoft SQL Server Continued
]]>