05 April, 2009 / Using TargetProcess SOAP API in Ruby Application


It is quite easy to access TargetProcess SOAP API via Ruby.

Install soap4r

First thing you need to install soap4r. SOAP4R is a Ruby library for accessing Web Services via SOAP.

gem install soap4r --include-dependencies

Generate Classes From WSDL

For example, you want to use ProjectService API. You have to generate some classes using wsdl2ruby.

[path_to_wdsl2ruby]wsdl2ruby.rb --wsdl [targetprocess_url]/Services/ProjectService.asmx?WSDL --type client

Real command may look like:

/Library/Ruby/Gems/1.8/gems/soap4r-1.5.8/bin/wsdl2ruby.rb --wsdl http://localhost/targetprocess2/Services/ProjectService.asmx?WSDL --type client

This command will generate 4 classes. You may rename them if you want, in this example we use them as is.



TargetProcess uses WSE, so it is required to provide correct authentication. First, create the following class in wsse_authentication.rb file in lib folder. Specify correct login and password. You may use System User credentials (login into TargetProcess and navigate to Admin section to set them).

require 'soap/header/simplehandler'

class WsseAuthHeader < SOAP::Header::SimpleHandler
  NAMESPACE = 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd'
  USERNAME  = 'admin'
  PASSWORD  = 'admin_password'

  def initialize()
    super(XSD::QName.new(NAMESPACE, 'Security'))

  def on_simple_outbound
    {"UsernameToken" => {"Username" => USERNAME, "Password" => PASSWORD}}


Let's assume you have DashboardController in your application and want to show specific project name. Here is the code that will extract project name via web services.

require "defaultDriver.rb"
require 'wsse_authentication.rb'

class DashboardController < ApplicationController
def index
driver = ProjectServiceSoap.new

#Add authentication
driver.headerhandler << WsseAuthHeader.new()
    # Print project name
project = driver.getByID(:id => 2)
@project_name = project.getByIDResult.name

Labels: , , ,

01 April, 2009 / TargetProcess Announced v.2.14 Release With Full Waterfall Support


We are extremely happy to announce the full Waterfall support in TargetProcess. No wonder it has the reputation of being the most flexible agile project management software on the market! New v.2.14 (special edition) will include features like:

Gantt Charts On All Levels

You will at least see nice and accurate Gantt charts in project, release and even iteration scope. Now you may define and manage Critical Path painlessly. Do you know your real iteration end date? With Critical Path you can predict it with 105% probability with minimal effort.

Extensive Dependencies Management

Dependencies management on tasks level is a really complex thing for any project. Now with TargetProcess you may pretty easy define all dependent tasks. Why stop there? TargetProcess is smart enough to generate potentially dependent tasks for you.

Add task in waterfall process

Waterfall Life-cycle Process Support

As you already know, TargetProcess has unique concept of Process. You may tune it to support your development process. Now it is possible with Waterfall as well! You may define all important project phases like Requirements, Design, Implementation, Verification, Maintenance.

Also you may enable such valuable practices as Big Design Up Front, Requirements Freeze and Fixed Budget. User interface adopted for the current project phase. For example, during Implementation phase you can't add defects and run test cases. During Requirements phase you can't commit code into repository. This forces development team to strictly follow Waterfall process which is definitely the very right road to the project success.

Micro-management Support

Micro-management is a very important thing in software development projects. You just can't spent time procrastinating or learning new technologies. Developers should focus on code only, every minute is important! Software development is hard and complex adaptive system in its core; you should do your best to complete project on time and under budget.

Now with TargetProcess you may estimate tasks down to minutes! That powers another extremely valuable metric – individual velocity. You can control everything and that is just great!

TargetProcess development teams hopes you'll enjoy new innovative functionality that we are providing with this special Waterfall-edition release. Please leave your comments!

Labels: , ,

26 March, 2009 / ASP.NET 2.0 AJAX, Safari and Scroll Offset Tricks


Couple days ago, I faced odd bug with DragDropManager at Microsoft.Web.Preview.dll. It doesn’t work correctly if the page is scrolled down in Chrome and Safari browsers. Google did not help. Debugging did not help as well (DragDropManager file is really huge). The last way was to use reflector tool to dig into sources.

The first odd thing was classes hierarchy. Two classes were the most interesting to me: Sys.Preview.UI.IEDragDropManager and Sys.Preview.UI.GenericDragDropManager.

And the following declarations:

Sys.Preview.UI.IEDragDropManager.registerClass('Sys.Preview.UI.IEDragDropManager', Sys.Component); Sys.Preview.UI.GenericDragDropManager.registerClass('Sys.Preview.UI.GenericDragDropManager', Sys.Preview.UI.IEDragDropManager);

The fuzzy thing is that GenericDragDropManager derives IEDragDropManager . It sounds like abstract class derives from concrete class. I truly believe such naming obscures readability. Gutting the code, I figured out that getScrollOffset method is overridden in for Safari browser (and it means for Chrome as well).

if (Sys.Browser.agent === Sys.Browser.Safari) {
    Sys.Preview.UI.GenericDragDropManager.__loadSafariCompatLayer = 
        function Sys$Preview$UI$GenericDragDropManager$__loadSafariCompatLayer(ddm) {
            ddm._getScrollOffset = ddm.getScrollOffset;

            ddm.getScrollOffset = function ddm$getScrollOffset(element, recursive) {
                return { x: 0, y: 0 };

Sounds like code owners just didn’t care about scroll offset. What to do? All what I needed to do is just to prohibit override for Safari to allow base class IEDragDropManager to handle the scroll offset for Safari.

Sys.Preview.UI.IEDragDropManager.prototype.getScrollOffset = function () {
        var left = element.scrollLeft;
        var top = element.scrollTop;
        if (recursive) {
            var parent = element.parentNode;
            while (parent != null && parent.scrollLeft != null) {
                left += parent.scrollLeft;
                top += parent.scrollTop;
                                if (parent == document.body && (left != 0 && top != 0))
                parent = parent.parentNode;
        return { x: left, y: top };

The hack:

Sys.Preview.UI.DragDropManager._getInstance().getScrollOffset = Sys.Preview.UI.IEDragDropManager.prototype.getScrollOffset

Another annoying issue is auto scroll to the top during drag operation. The hack is as trivial as just an empty handler:

Sys.Preview.UI.DragDropManager._getInstance()._autoScroll = function() { }

The full hack for both issues looks quite strange:

if (Sys.Browser.agent === Sys.Browser.Safari) { 
 Sys.Preview.UI.DragDropManager._getInstance().getScrollOffset =  
 Sys.Preview.UI.DragDropManager._getInstance()._autoScroll = function() { } 

The only excuse to ASP.NET Ajax development team is that it was RC build...

Labels: , ,

24 February, 2009 / TargetProcess v.2.13 released: Help Desk improvements


Yesterday we've released TargetProcess v.2.13. The release is fully dedicated to Help Desk improvements.

In short, we've improved Help Desk user experience and made some actions easier. Some usage patterns:


Old way

New way

Check for unprocessed requestsNavigate to requests list, sort by date. Then sort by last comment date. Filter out ideas to see just issues and questions.Navigate to Issues Queue
Reply to typical requestFind similar request using search, navigate to it, find appropriate comment, copy this comment and add to the new request.Click Attach Solution, select required solution.
Maintain conversationOpen request, try to find latest comment in the messy comments thread, edit comments to remove bad formatting and redundant informationOpen request and read clean comments thread.

Labels: , , , ,

16 February, 2009 / Developing TargetProcess v.3.0: Navigation (Tabs or Tree?)


First thing we are going to change in v.3.0 is navigation. First discussion was quite general and first solution most likely is not ideal. We rightly identified two major different areas: inside and outside of a project. Initially we wanted to separate navigation outside of a project and inside of a project, thus having two completely different menus. But what if we can unite these areas?

Indeed, there are lot of similarities. We may just create global filter by project. If you select a specific project, you will be inside the project and, for example, Help Desk will show requests from this project. But if you select All Projects value then Help Desk will contain all requests from all your projects. This approach has several nice advantages:

  1. Main menu does not change, only sub-menu is different inside and outside of a project. It gives better perception and better learning curve.
  2. Global project filter is an easy-to-adopt concept. You always know where you are.
  3. When you switch project, you will remain in the same area. For example, now you are in the backlog of project Alpha. You change project and appeared in the backlog of project Beta.

It may look like this:

Option 1. Tabs

We've received several requests to add left panel with a tree navigation. I never thought it was a good idea, but you never know till try.

Option 2. Tree

The question is do you like tabs or tree? It seems both approaches has own advantages and it is really hard to select the best one. We are looking for your opinion!

Labels: , , , ,

11 February, 2009 / New Help Desk Portal. Issues.


Let's finalize new Help Desk Portal concept. We are starting development next week, so you have a little time to provide valuable feedback :)

Issues List

Contains all issues with filtering option. State of the each issue is highly visible. It shows whether bug created from the issue and when it will be fixed. Also if someone knows solution, he may attach solution to the issue right away.

Help Desk Portal Issues List

Post Issue

When someone post an issue, Help Desk Portal checks on the fly whether similar issues already exist and display the list on the right. Moreover, it displays possible solutions (nothing special, just keyword search with results ranking). It will help to avoid issues duplication and in some cases will save people time.

Help Desk Portal Add Issue Form

Labels: , , , , ,

10 February, 2009 / New Help Desk Portal. My Requests


Continue posting mock-ups of the upcoming Help Desk Portal. Definitely there should be a place where people may see all posted ideas, issues and questions. In this list user should focus on what is going on and get quick answers to the questions like:

  • "Should I reply to something to help with problem resolution?"
  • "When will the bug for the request XXX be fixed?"
  • "Are there any interesting discussions around my ideas?"

The My Requests list has nice right column that shows exact state of the each idea and issue. Think support forgot about you and your problem? Just click nudge link :)

Help Desk Portal my requests screen

Labels: , , , , ,

09 February, 2009 / New Help Desk Portal. Ideas and Issues.


We are thinking about Issues and Ideas separation. They are quite different and needs separate lists, views, etc. based on our analysis. People have different goals when working with ideas and issues, and this should be reflected in the dHelp Desk Portal design.

What is important for person who looks at idea? And what is important for person who looks at issue?

Idea Issue
  • Discuss idea
  • Add attachments
  • When it will be implemented?
  • Is this idea important?
  • How can I vote for it?
  • Tag the idea
  • Discuss issue
  • Add attachments to the issue
  • When it will be resolved?
  • Do I need to provide more info?
  • Are there any ready solutions to my issue?

Here is what we have so far.

Issue View

help desk portal view issue

Idea View

Labels: , , , , , ,

06 February, 2009 / New Help Desk Portal. Moving Forward.


Finally, I may share ideas/stories/requests that will be implemented in the new release of Help Desk Portal.

We have selected about 20 customers' requests and improvements (all are reasonable and most of them improve usability). Here is the list that includes the most interesting requests.

  • Search by ID
  • View Help Desk Request Number (#) in Requests Lists
  • Add a "Vote" mechanism to the request detail in the help desk.
  • Filter by Project/Product
  • Better Notifications (new comment added)
  • Improve Help Desk User experience (Tag Cloud)
  • Disable state change
  • Filter by Request state (open/closed)
  • Attach file when posting a request
  • User profile management
  • Customer should see all related user stories, features and bugs created from requests in one place
  • Sorts: by last-updated, by last-comment, by votes
  • Easy customization (promoted in the latest blog post)

As you may expect, we have own ideas as well:

  • Separate ideas and issues
  • Dashboard with recent requests, top requests, etc.
  • Solutions (a part of self-service)

Some mockups should help you to get the new Help Desk portal look and feel.

Help Desk Portal Dashboard

Dashboard is a first page for the new users and it should be crystal clear what can be done in Help Desk Portal. Also it includes latest ideas and request as well as top ideas.

Ideas List

Ideas list obviously shows ideas. It is possible to filter ideas by state ad by tags, sort ideas.

This is a work and progress and your comments are welcome!

Labels: , , ,

02 February, 2009 / Developing TargetProcess v.3.0: New Help Desk Portal


Help Desk Portal is quite important application. It allows our customers to interact with us. Also it allows customers of our customers to interact with our customers (weird assertion, but it's true :). We've collected quite many requests for Help Desk Portal improvements and finally decided to push it forward.

Here is the first mockup of the home page. It is still a work in progress, so comments/changes/advices are welcome.

Ideas, Issues, Questions, Mockup

There are some ideas behind the Help Desk Portal re-design:

  • When someone has a problem, he should be able to find existing solution easily (if any). If there is no solution, it should be straightforward how to post a request
  • Ideas and Issues should be separated. They have quite different flows and expectation. If someone post an issue it should be resolved quickly. Idea can live in the backlog for years.
  • People may use search or tags to find relevant ideas and requests.

The next step may be to add more social networking into Help Desk Portal (self-service is a great thing if you can encourage other customers to provide solutions and answer the questions). However this is just an idea so far.

Labels: , , , , ,


We are developing TargetProcess agile project management software and blogging about our progress.

Subscribe to the RSS feed
Stay tuned by having the latest updates via RSS
Follow TargetProcess on Twitter
Get in touch with our team

Try TargetProcess
TargetProcess quick tour