Cireson Time Tracker app


Anyone familiar with System Center Service Manager will recognise that the above image is taken from the Incident Form. The Resolution tab has an area that allows analysts to record time worked on an Incident.

Strangely, this feature is only included for Incidents. If you want to record analyst time like this for the other Work Item classes, it is impossible.

Or is it?

This is the definition for the Billable Time relationship:

      <RelationshipType ID="System.WorkItemHasBillableTime" Accessibility="Public" Abstract="false" Base="System!System.Membership">
          <Source ID="BillableTime" MinCardinality="0" MaxCardinality="2147483647" Type="System.WorkItem" />
          <Target ID="AppliesToWorkItem" MinCardinality="0" MaxCardinality="2147483647" Type="System.WorkItem.BillableTime" />

This is defined in the Management Pack “System.WorkItem.Library” and the Source type is “System.WorkItem”. Therefore, Billable time is valid for and can be added to any Work Item class.

Take a look at this, the Problem form:


Looks familiar, but how was this done? Easy – import the Cireson Time Tracker app.

What does this app do?

Well, it adds a “Time Worked” console task for most Work Item classes:


This task allows Analysts to immediately enter Time Worked via a view or directly from a form for supported classes:


The app also includes optional default form customisation Management Packs for supported classes:

The supported Work Item classes are:

Release Record
Review Activity
Service Request
Change Request
Manual Activity

If you have not customised these forms, simply import our custom form and you are all done. We supply the snk used to seal these and the original .xml versions so you can extend the forms as needed. Each imported Management Pack adds the Time Worked tab as shown above.

If you have already customised one or more of these forms, this is not a problem as you can very easily add the Time Tracker control to your existing form customisations by adding a new Tab and adding the control to that tab, for example:

    <AddControl Parent="tabControl" Assembly="PresentationFramework, Version=, Culture=neutral, PublicKeyToken=31bf3856ad364e35" Type="System.Windows.Controls.TabItem" Left="401" Top="21" Right="0" Bottom="0" Row="0" Column="0" />
          <PropertyChange Object="TabItem_1" Property="Header">
            <NewValue>[Time Worked]</NewValue>
          <AddControl Parent="Grid_1" Assembly="Cireson.TimeTracker, Version=, Culture=neutral, PublicKeyToken=98ba2176e2a9efbc" Type="Cireson.TimeTracker.Controls.TimeTrackerFormControl" Left="20" Top="20" Right="20" Bottom="20" Row="0" Column="0" />

Or course, you can add the Time Tracker anywhere you like (that doesn’t cause any console strangeness!).

The only other thing you need to do is to make sure that the Type Projection that your existing custom form targets includes the required components with the correctly named aliases:

  <Component Path="$Target/Path[Relationship='WI!System.WorkItemHasBillableTime']$" Alias="BillableTime">
            <Component Path="$Target/Path[Relationship='WI!System.WorkItem.BillableTimeHasWorkingUser']$" Alias="WorkingUser"/>

Simple, another great app from Cireson!

To learn more, click “Cireson” on the header area above or visit

Posted in App, Cireson | Tagged , | 5 Comments