Sunday, October 22, 2006

Before the alpha release

Long time, no see. I've been a bit busy with life, so there haven't been any releases as of latetly.

I've been working on the Visual Designer for Sinergia. I had been waiting for a web visual designer from the WF team but there is no sign it will be coming anytime soon. So now I'm working on a Windows Application Sinergia Workflow designer, based on Lab 10, of the Beta 2 Hands On Labs. The idea is to be able to design and save as xoml the workflow, and upload it to the Sinergia installation, associating Case Types with a custom workflow, enabling customization support at the data structure and process levels.

I'm also working on a Sinergia activities library to make it easier to customize the workflow process.

Another feature coming is case attachments support, which is under construction.

If you'd like to see any other feature included in Sinergia email me here.

Monday, September 11, 2006

Sinergia Expressions

Sinergia Help Desk has been designed to support customization at the data level. Part of this customization support involves the capacity to determine group, and field properties, dinamically. For example whether a custom field is required in a certain workflow state, or when the case is edited by some user in a specific role, like say "Administrator".

Sinergia supports expressions to calculate group, and field properties dinamically. The properties that can be defined using expressions are: Required, Read Only, Visible, and Default Value.

Sinergia Help Desk

This "expressions" are in fact expected to be C# code, plus a set of additional keywords targeted to simplify the expressions development. For example the [STATUS] identifier references (as the name implies), the state the case is in. Other expressions are [TODAY], and [NOW], which are usefull to define default values.

The expressions run in a context that has available the Session , User, and CaseData objects, which in my opinion allow for very powerfull expressions.

If I wanted to define a field as required always I can just put true, in the required expr textfield (is case sensitive remeber that).

If I wanted to check on the subject, to define the visible property, I could reference it using: [CASE].Subject, and if I want to make sure some word appears on the subject I could do something like this: [CASE].Subject.IndexOf("Whatever") != -1

Each expression textfield has a tick image button to validate the expression defined.

Sinergia C# Help Desk To try this feature you should go to the Administer Case Types, Administrator menu option, and edit one line of the grid with the edit icon (the one like a notebook).

You can download the latest bits, or you can try this in the demo here.

Tuesday, September 05, 2006

Sinergia online demo

In a time limited trial experience, I'm hosting a demo version of Sinergia at

Before you try it, I'd like to clarify two things. The first, the host server may be down at times. If you want to make use of it and it's down, you may contact me and I'll bring it up. The second, the Administration features, are meant to be used in an intranet scenario, where the response times, are much better than these.

Having said this, I hope you enjoy it. As usual, feedback is welcomed.

Sinergia 0.3.6 released

The weekly drop of Sinergia is out, and running. I'm very excited about some of the new features that ship with this version, in particular the new expressions support.

The release notes are:

1- Sinergia Expressions Support in Case Type definitions. Now it is possible to define expressions for calculating visible, read only, required, and default value field properties. This is just the title, I expect to post an article on the subject soon.
2- Integrated create new user wizard, to the login page.

I know that some of you are having issues to setup the product, If you experience any problem don't hesitate to contact me.

Tuesday, August 29, 2006

Sinergia 0.3.4 released

This version is a weekly update over the former one, the 0.3.2.

I've been working on improving the Case Type administration features. As a consequence now it's possible to edit Case Types. The Generate Files menu option has been removed from the Case Types Administration page, now the Make Default is responsible for doing the file generation thing.

There are issues associated with running the webapp with a low priviliged identity, since it intends to create files on the App_Code folder, it requires write permissions over this directory, which don't exist by default.

I've also activated the Create new user link, in the login page. Users created by this means have no roles, and can only open cases, and confirm proposed solutions.

As usual, you may download the latest version from here.

Tuesday, August 22, 2006

Sinergia 0.3.2 released, featuring Custom Enumerations

There's a new release of the pre alpha version of Sinergia. The main new feature is Custom Enumerations Support. In the following section I will introduce the Custom Enumerations concept in the Sinergia product.

Custom Enumerations

In the previous post, we saw the way to customize the data contained in the Case form (aka Case Types). Custom Enumerations is the support that allows Case Type's custom fields to take values from lists.

For each field defined in the Case Type creation, a control type must be specified. The default value is 'Short Text', another possible value is 'Enumeration Select'. Selecting the latter allows binding the control to an existing Custom Enumeration.

Sinergia Custom Enumerations Case Enumerations can be defined with the new admin menu option Administer Enumerations.

The data source of a Custom Enumeration can be one of three:
1 - Manually entered values. Value;Label rows, separated by end of line character.
2 - SQL Query over a database. Connection and SQL statement must be defined.
3 - Web Service invocation. In this case the url of the WSDL, the service and operation must be configured.

Once it's defined is possible to preview the list of values generated by the specified Enumeration. This can be achieved with the preview button.

The current version support only parameterless sql queries, and web service invocations.

You may download it from here.

Friday, August 04, 2006

Help Desk Case data structure customization

The latest release of the Sinergia project includes support for case customization. This can be achieved with the product Case Type management feature.

The Sinergia application allows for partial customization of the Case data. There are some header fields that are static, while there's a region for custom data.

Sinergia help desk custom data region Since the 20060801 release this feature can be accesed by the administrator role, in the "Administer Case Types" menu option, of the administrator profile.

Sinergia help desk The mechanics for creating a new Case Type, in the current version, are the following :
  1. First you create a new Case Type, by defining groups, and fields, with the help of a tree view control, in a GUI like the shown in the picture below.
  2. Then you explicitly generate the files for the created case type.
  3. Finally you set it as the default case type, to enable Case creation, with the newly defined custom data.
Sinergia Help desk case type definition
Currently not all control types are supported, but they will.

Saturday, July 29, 2006

Source file available for the pre alpha release

I decided to add a zip with the sources of the .net solution to the release's files, for those wanting to compile and run, without a cvs client out there.

With the following software installed, you should have no problem compiling and running the solution. The software would be:

* Visual Studio 2005 [Express]
* SQL Server 2000, or 2005
*Microsoft Pre-Release Software Microsoft .NET Framework 3.0 - June 2006 CTP
* Enterprise Library for .NET Framework 2.0 - January 2006

You can download it from here

Monday, July 24, 2006

Pre alpha release updated, again

This time the update changes are these:

1 - Delay activity InitializeTimeoutDuration handler modified to take this answer into account. The result of this is that now the Postponed state sleeps the time it's supposed to. (thnxs tom lake).
2 - Modified WCF configuration (establishSecurityContext="false") to avoid a very annoying behaviour, which was that after ten WCF invocations everything stopped working.

Any feedback?

Sunday, July 23, 2006

Pre alpha release updated

I've updated the release with a new version, with the following features:

1 - Modifications in the case management tray, among them no panel vertical scroll bar now.
2 - Enhanced filter options in the case tray.
3 - Note group in the Case Form, allowing to add and view previous notes in the case form. This is really a first step, IMHO adding notes to the case should be a workflow event, to give the possiblity to add email notifications on new notes.
4 - History group in the Case Form, list the history of events the case's gone through.

Among the known issues with this version are:
1 - Problems with the delay time, the postponed state sleeps. The delay time is supposed to be initialized in the InitializeTimeoutDuration workflow delay activity handler, the code runs ok, but the sleep time is not the expected.
2 - When running with SQL Express sometimes database connection is refused, but if I wait some seconds and try again the same operation it works.

I've also added screenshots of the case creation, updates, and confirmation scenarios, you can check them out here.

As usual you can download it from here.

Monday, July 17, 2006

Sinergia pre alpha release

After struggling with windows workflow foundation a bit, and deciding that correlation is not really necessary at this time, the first release of the Sinergia project is born :)

This preview release's objectives were to provide a proof of concept of the defined architecture and to test, and really get a grip of the different technologies involved (ASP.NET 2.0, WWF, WCF).

The released package is meant to be a functional, not very ambitious, help desk or case management product, allowing case creation, query and update, integrated with a workflow engine backend.

To install the package you must have winfx ctp june 06 release installed, plus SQL Server (Express will do).

Right now case metadata management is without a front end, but you can still toy around with the defined case type (TicketManagement), try changing the existent fields and group, and generate files again, from the Case Types management menu option. Also check out the state machine defined, and feel free to customize it.

The Ticket Management state machine Workflow developed is hosted in a Windows Service, so in a way the release is a good example of integrating state machine workflow with an front end with WCF.

Sinergia's website communicates with the workflow's host service using WCF defined endpoints. This was the most painless thing to implement in the whole project, maybe along with login.

The application uses three databases, corresponding to: workflow persistence and tracking services, membership, and Sinergia's own database. Of course everything can go to the same database, but by default they are three different databases.

Download available here

Monday, June 19, 2006

.NET 4 Beginners, How to structure a .NET 2.0 Solution

You have to design and implement a software app using .net 2.0 Visual Studio 2005, how do you structure the Projects in the Solution?

The basics

First of all you divide the solution in different projects, corresponding to the layers, modules, or components, defined in the design. Sometimes beginners tend to stack everything into one solution and then modularize the code by means of folders within the project, well, this is not the way to go.

The .net platform comes with the notion of projects, one solution has many projects, and projects can be of different types. For example Class Library Projects can be referenced by other projects, allowing modularization, encapsulation and reuse of code and functionality. Projects generate .exe, or .dll files, which are units of deployment, security and reuse.

Going one step further

Once you start dividing everything into a different project, the next thing that happens is, if the solution is big enough, that you start scrolling up and down to navigate a sea of projects, when you usually work with a couple of them at a time.
Visual Studio 2005 comes with this very useful feature which is to be able to add folders to one solution, grouping Projects and even folders in your own logical hierarchy. It's a simplification and an evolution of the former VS2k3 Enterprise Template concept. It's pretty handy.

Add folder to VS2005 solution
Now you can group projects following some criteria.

Define a good hierarchy

What is a good criteria to group projects? I'd say one that is intuitive enough for someone else to understand without asking too many questions, and that helps you do your job.
This point is particulary important when you need to standarize the way different groups work in a software factory.
You may be familiar with the following diagram, from the Microsoft's PAG group, from the "Designing Applications and Services"'s article.

I always liked this article, eventhough some say it's a bit outdated now, but it's good foundation and guidance.
Based on this article's guidelines about what are the layers and players in a three layered information system, you can choose to structure the solution aligned with it.

Besides that is good to separate the different concerns in the solution in with different folders, like: setup, testing, database..

The result of all that may look something like this:

Visual Studio 2005 .NET 2.0 C# Solution

Wednesday, May 31, 2006

Strategies for handling Business Entity data input, and storage

I'm working in a front to back prototype of the Sinergia Project and I must make a decision on the way the main entity (the ticket/case/claim, from now on the case)is going to be populated and persisted.

The problem

Data corresponding to the case has to be gathered from the UI, processed, and stored in the database. The data structure of this entity is unknown or at least partially known, since some fields are fixed, but depending on something I'm calling the case type which has metadata on the case, other fields may appear.

The alternatives

The way I see it possible options can be grouped in the following categories:
  1. Structured, strong typed, code generation based. Based on the case metadata residing in the case type I generate code, corresponding to: Business Entity datatype class, Database table create script (and execute it), and ASP.NET user control. Generation could take place right after metadata is declared/created.
  2. Unstructured, loosely typed, totally dynamic.. The case metadata is interpreted at runtime to create dynamically ASP.NET controls for the whole entity, load the entered data into an xml instance, and insert the xml into one table in the database, which has a text column to store the xml.
  3. Semistructured. This one is a mix of the former two. Based on the metadata code is generated for the ASP.NET user control, while the business entity common data is stored in properties, the non common data is stored in an xml type property (so the same class is used for all types of cases), and one text column is added to the Cases table in the database to store all the non common case fields.

After doing some thinking I started to implement the third, semistructured option. I guess the rationale for it would be something of the following form:

 Weight  Criteria  Structured  Semi Structured  Unstructured
10  Productivity 1 3 3
10  Performance 3 2 1
7 Maintainability 1 2 3
Totals 47 64 61

Monday, May 29, 2006


Sinergia is a free help desk framework licensed under the GPL license, and hosted on SourceForge.

This blog is where I plan to post news and comment on the design and development of the Sinergia Project.

I'd really like to get some feedback on the design decisions that will be discussed here, so please if you have any questions, ask them, I will gladly answer them.