Categorieën
Geen categorie

Aenova’s Timn Enterprise en SOAP

Inleiding

Recentelijk heb ik ervaring opgedaan met de SOAP interface van het Timn Enterprise product van Aenova. Omdat er nogal wat mensen in Nederland gebruik maken van dit product leek het me wel leuk om de opgedane kennis te delen.

Er zijn daarbij vooraf een aantal zaken die je moet weten:

  • De koppeling “lijkt” op SOAP. De interface kan geen WSDL produceren dus je kunt geen stubs laten genereren op basis van een WSDL (die dus niet bestaat).
  • Aenova heeft zelf een document getiteld “TimEnterprise SOAP & SCV” die je kan helpen bij de eerste kleine stapjes. Voor de rest moet je echt een consultant van hun inhuren.
  • Als er al error-logging is dan vindt je die in de beheersconsole niet onder SOAP-log, maar onder ‘server-log’.
  • Er is op de SOAP-interface zelf geen foutmeldingen te krijgen. Je krijgt bij een import-actie een record-id terug. Een leeg record-id betekent dat er een foutmelding in de server-log staat. Waar die staat is dan weer vers twee. Omdat volgens de XML standaard er geen relatie is tussen de volgorde waarin je records verstuurt, versus de geretourneerde resultaten, heb je hier dus feitelijk niks aan. Tenzij je natuurlijk zelf ook een interface in elkaar flanst.
  • Het is erg raadzaam om de normale Java client beschikbaar te hebben (komen we later op) en dat je de rechten hebt om export-definities te maken.

Van start

Nu je dit weet kunnen we van start. Mijn eerste stapjes betekende een script maken dat vanaf Linux (in dit geval een absolute aanrader om te gebruiken) vragen te kunnen stellen aan de Tim server.

Op de Tim server dien je de SOAP interface “aan” te zetten. Je moet daarbij een userid en wachtwoord instellen die je later nodig hebt.

Mijn script zag er als volgt uit:

#!/bin/bash
wget --debug --http-user=timnsoap --http-password=aenova --post-file=$1 -O - http://servernaam:10980/impexp/ | xmllint --format - | less

Voor de duidelijkheid: het script bestaat uit 2 regels. Dus van “wget” tot “less” is 1 regel!

Als je het aanroept vertel je op de commandline welk xml bestand je wilt verzenden, op basis waarvan Tim je vervolgens een antwoord zal geven.

Voorbeeld 1

Een voorbeeld van zo’n XML bestand is het volgende voorbeeld.

Stel dat je een overzicht wil van de mensen die een aanvraag voor een bepaald type verlof hebben ingediend. Als je met behulp van bovenstaand scriptje het volgende bestand naar de Tim server stuurt (pas wel even het email-adres aan dat er in staat), krijg je het antwoord daarop retour (als alles goed gaat).

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<export soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns="impexp.timn.aenova.nl">
<data>
<Aanvraag>
<filter><Persoon><EmailAdres>username@domain.tld</EmailAdres></Persoon></filter>
<Persoon><EmailAdres></EmailAdres></Persoon>
<Periode><Start/><Eind/></Periode>
<Roostercategorie><Naam/><Aanwezigheid/><Status/></Roostercategorie>
</Aanvraag>
</data>
</export>
</soapenv:Body>
</soapenv:Envelope>

Tot zover de export van gegevens. Je kunt ook zaken importeren, maar realiseer je dus wel dat de feedback die je krijgt minimaal is. Geen error-strings retour voor ons sterfelijke zielen :-).

Voorbeeld 2

In het volgende voorbeeld krijgen we uit een andere applicatie een bepaald tijdsbeslag wat we vervolgens bij Tim willen invoeren. Dus wie heeft wanneer wat en hoe lang gedaan?

In XML ziet dat er dan als volgt uit:

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<import soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns="impexp.timn.aenova.nl">
<data>
<Tijdregistratie>
<Persoon><EmailAdres>gebruiker@domein.nl</EmailAdres></Persoon>
<Product><Code>6200</Code></Product>
<Datum>31-10-2012</Datum>
<Duur>7:30</Duur>
</Tijdregistratie>
</data>
</import>
</soapenv:Body>
</soapenv:Envelope>

Waar vind je de veldnamen?

Maar hoe kom je er nu achter welke velden er allemaal bestaan?

Eigenlijk is dat nog best eenvoudig (als je het weet). Je gaat namelijk naar de normale  Tim Java-applicatie, en kiest dan Bestand->Import/Export->Import/Export definities (let op de gebruikersrechten!).

In dit scherm is het mogelijk een nieuwe definitie te definiëren. Men kiest een tabel en vervolgens het veld of eventueel het subveld. Als de set met gewenste gegevens naar wens is kan men een export van de gegevens maken. De eerste regel van deze export bevat vervolgens een overzicht van de diverse velden die in de gegevensset staan. Deze kan dan weer als basis dienen voor een SOAP im- of export.

Unieke keys

Als je een bestand steeds opnieuw inleest, bijvoorbeeld met een combinatie van gebruikersnaam, datum, productcode en aantal uur, dan zullen er steeds records worden toegevoegd. Om aan te geven dat een bepaalde combinatie van velden leidt tot een unieke key voorzie je het betreffende veld van de tag “@”, dus bijvoorbeeld <product “@”>.

Afsluitend

Met de kennis die we nu hebben kunnen we zelf aan de slag om uit Tim te halen wat iemands beschikbaarheid is zodat we daar in het project planningspakket rekening mee kunnen houden. Omgekeerd kunnen we de in ons bug-management systeem ingevoerde uren automatisch importeren in Tim zodat iemand slechts éénmalig zijn uren hoeft te registeren.

Categorieën
LibrePlan

We are almost done!

Miciele has been very bussy with our LibrePlan-Jira connector and we are currently finalizing  our work into a patch. My guess is that we will send in our patch today or tomorrow. So it’s time to show you all the latest developments.

In project window General data: “Sync with jira” button disabled. This can happen if “Jira  activated” is unchecked in jira-connector configuration.

In project window General data: where to sart sync with jira (“Sync with jira” button enabled).

 

When you first start your sync, an auto-complete list box to select the Jira label you want to sync with will appear:

 

 

 

 

 

After sync: the synchronized label is displayed. If you now click the “Sync with Jira” button no pop up screen(to select label) will be shown, instead sync will start for the displayed (already synchronized) label.


If there is something to report, a Synchronization info dialog will appear. It  shows the failure or success info of the sync operation. This can be info like (no Jira worklog found for  a specific issue, or an error if a resource is missing from the LibrePlan configuration. We decided some time ago not to auto-create resources because there is not enough info available to do that automagically.

 

 

 

 

 

The WBS(tasks) window: The “hours” colum is disabled (because they come from Jira) and the “code” column contains clickable(!) links to the Jira issues.

 

And now the really fun part starts! This next 2 screens are so cool (imho).

The Project planning window, zoomed on “Week”.  What you see is the sum of the worklogs. But you also see a progress estimation, based on the Jira estimated time per issue and the worklogs available. So it looks like we are a little ahead of our initial planning. This makes a projectmanager always happy 🙂


If we open the project and look at the individual task progress we see the following screen, scheduling zoomed on a “day” level. As you can see the task in the middel needs some attention because the worklogs have past our initial planning and the progress is only halfway there. This issue needs a project manager’s attention quick!


We have decided to make a timesheet based on a jira-connector timesheet template. The next picture shows the list of available timesheets.


This one shows the timesheet details. The only difference with a ‘default’ timesheet is the extra ‘summary’ column. It shows the comment field of a Jira worklog entry.


The last picture shows a timesheet lines list.

So this is it. We are building the patch right now and hope you all like what we have build.

Kind regards,

Jeroen Baten

 

 

Categorieën
LibrePlan

New progress report Jira-LibrePlan connector (with timesheets!)

Hi,

It’s been some time since my last update. Miciele is still working hard to get our Jira-LibrePlan connector working.

In this post I will show some new screenshots and tell you where we are heading.

Sofar we can import Jira issues into LibrePlan as separate WBS items. (see earlier post). After setting up a sync you can not change the label in LibrePlan to prevent people from really screwing up the WBS contents:

After a sync the WBS is filled with the summaries of Jira issues:

Now we can import the worklogs from jira to generate a monthly timesheet based on the work done on these issues.

So the timesheet list looks like this:

Now, from this list, we can select a sepatate montly timesheet from someone. That one looks like this:

Thing is, when LibrePlan imports worklogs from users that are known in Jira but not yet known in LibrePlan. Off course auto-create would be nice. But it has some drawbacks. After some thinking we decided to start this release with giving an error message:

So now you know which users/resources you have to add to LibrePlan.

Are we done yet?

Actually, no. We need to cleanup stuff, document it and write some unit-tests. We plan to send our first attempt for a patch somewhere in the next week (october 1st-7th 2012).

After a succesfull merge we will continue with trying to get it connected to a product called Timn Enterprise from a Dutch company called Aenova.

Categorieën
LibrePlan

LibrePlan Jira connector progress

The importing of Jira issues into orderlines is working nicely. Off course it is entirely possible to tag a Jira issue with more than one label and thus have the same issue appear in more than one project in LibrePlan, but we blame that on the stupidity of the user 🙂

We are now working on building a monthly timesheet filled with Jira worklogs. We link the Jira userid with the id of the resource in LibrePlan. Off course it is possible that the resources does not yet exist. Off course we could auto-create it, but actually we can’ t because, even if we know the username from Jira, who will tell us what part is the firstname and what part is the lastname? So we decided to build it as follows: if a resource exist all is fine (duh), otherwise we will display an error message. It is a non-fatal error, so all correct worklogs will be stored, or replaced if they already exist.

If this seems to work fine we will supply the patch after making some unit-tests and documentation. After that we will go ahead with some more wishes we have. One of them is sending the timsheets to our timesheetprogram from Aenova using Soap. Somehow there are still hills to climb there.

We will keep you informed. Till next time.

Categorieën
LibrePlan

LibrePlan-Jira project progress report

Hello all,

Intro

(skip this if you are not interested 🙂

Let’s start with a very small introduction: I work at the st. Antonius hospital in the Netherlands as head of the internal software development department. We build internal software and work on a lot of different projects. What I needed was a good project management tool so I looked at a couple and decided to go ahead with LibrePlan. I developed a training manual, trained some of my people how to sue it and now we plan projects in LibrePlan.

We also use Jira for our bugtracking and a dutch program called Timn Enterprise for our worksheets.

Functional design

The connection should work like this:

  1. We use labels in Jira to tag issues that belong to the same project.
  2. I want to be able to start a new project in LibrePlan and have it import all the issues with the same label into the Work Breakdown Structure (WBS) so I can plan the work and assign resources to it.
  3. I want to have my people who work on an issue to enter worklogs in Jira and use that information to get an indication of the project progress in LibrePlan.
  4. I want the worklogs in Jira to be send to Timn to prepopulate the worksheets and I want the approved holdays out of Timn into LibrepLan as resource unavailability.

I thought it would be cool of we could connect the three programs (Jira, LibrePlan and Timn). One of my guys is good in Java so I asked him to start on this venture since he was in between other projects.

First steps

At first Miciele build a configuration option into LibrePlan to enter Jira url and login credentials and a test button so you could see it the connection was succesfull.

I wrote about this before on Facebook:

  1. Configuring the connection: http://i760.photobucket.com/albums/xx242/kwoot/jiraconnector.png
  2. The ability to enter a label in the general data tab of a project: http://www.facebook.com/photo.php?fbid=4162614776565&
  3. A simple import of some tickets into a project:  http://www.facebook.com/photo.php?fbid=4162612936519&set=o.270582536333485&type=1&relevant_count=1

Now it was time to really build something.

Progress

It has been some weeks now that Miciele Ghiorghis has been working on the connection between Jira and LibrePlan and it is time for some new screenshots:

We found out that Jira has great REST and SOAP interfaces, but can not give (yet) us a list of all labels used so we could build a nice autocomplete inputbox. After some debate and a supportticket at JIra we decided to build a simple PHP script that does a simple SQL statement (“select distinct label from label”). At the moment our wish is a feature request so we kindly ask you people to vote for it! 🙂 https://jira.atlassian.com/browse/JRA-29409

Using the PHP script we have a nice autocomplete form to enter the label.

Currently it looks like this:

We moved the Jira sync button to a better place on the same page:

We will put the chosen label into the external code field, just not yet 🙂

There are 2 changes in the WBS screen below.

  1. The amount of hours is read-only because we will start with a simle one-way sync. So if you want to update the hours you can do that in Jira.
  2. The “Code” column not only shows the Jira issue-id, but you can click on it and jump straight to Jira! (pretty cool we think)

Next steps

Next we will import the Jira worklogs to get a progress indication in LibrePlan.

If that all works we will finalize the first phase and submit a patch to the LibrePlan community for inclusion in the code.

Phase 2

Our phase 2 will revolve around making the connection to our time registration application Timn enterprise using SOAP. That is, if we get support on this from the supplier. We’ll see.

Goodbye, and until the next update! 🙂