(Please see the version history below for the latest changes)
Image: Main window of Zeta Helpdesk, showing the current tasks tab
Introduction
Some time ago, early in 2005, our rather small (7 person) company felt that it was in the need to somehow collect, document and hopfully bill the support requests we got for our many applications and websites we have created for our customers.
Of course, I did some research about free/inexpensive applications. I found nothing suitable (probably every programmer behaves that way when searching for apps he could develop by himself). Then I search some more and still found nothing.
Now the idea was born: Develop my own application to fit the requirements we had and have. I wanted to reach the following goals:
- Start rather simple to quickly have a working version that meets our absolute minimum requirements and therefore enable my co-workers to quickly use the application.
- Keep the application in constant development, adding features as I have the time and as we know what still is needed.
- Make the application freely available to everyone, no limitations, let everyone use it for whatever reason he wants to, including commerical use, redistribution or reusing the source.
- Keep the feature-list as generic as possible, to enable a large audience to use it, but also adjust it to fit into our company's infrastructure.
- Use the newest .NET version and Visual Studio .NET 2005 so that I can learn the new features on a real project.
- Call it "Zeta Helpdesk" (or "ZetaHelpdesk", depending on the context)
I will constantly enhance this article, as I implement new features and build new releases of the application. See the version history for changes.
The Application's Scope
The version you will find in this article is a snapshot version. Please do keep this in mind all the time! It is not tested in-deep, and the setup process (especially setting up the database) could be a kind difficult.
In short, the following items apply, potentially having negative effects:
- The application is not tested like a commerical application (although I do my best to constantly enhance the quality)
- The application is not "finished" but constantly enhanced (I do my best to avoid any breaking changes between versions)
- There may be highly paid system-engineers that write hundreds of pages of specification documents and whitepapers to specify what features a "helpdesk system" needs to have in order to be a real helpdesk system. This version is not. Instead I call it "helpdesk", because for us it is a helpdesk system. The features it contains and that I will add in the future reflect our practical needs, rather than theoretical documents.
Nonetheless we use the application daily by ourself and the application is in a very stable state for our requirements. So you should be able to successfully install and use the application.
I encourage everyone that is looking for a lightweight helpdesk system to use this application. I try to do my best to reply to any support calls you write to the comments section at the bottom of the article as fast as I can.
Image: Main window of Zeta Helpdesk, showing the tickets tab
What I call a "Helpdesk System"
As said before, my core definition of a helpdesk system is a practical view (my practical view), not a theoretical:
- Document incoming support-requests that could arrive e.g. by phone or e-mail.
- Have a "ticket" to collect a single support-request.
- Have one or multiple "events" to each ticket to document the ticket-progress (incoming, steps to solve the request, etc.).
The application introduced here does have more than these features (and will add in the future), but this is my core definition.
The Application Features
The Zeta Helpdesk application consists of the following blocks of functionality:
- Customers
Each customer has contact data associated and can have zero or multiple persons associated as child items.
- Persons
A person is a child item of a customer.
- Tickets
A ticket is a single incoming support-request.
- Events
An event is a single step in the ticket-progress (e.g. incoming request, steps to solve the request).
- Projects
A Project is some kind of longer running "ticket". The presence of projects in Zeta Helpdesk results from the fact that I needed the ability to somehow document smaller projects we do for various customers.
- Task
A project contains one or multiple tasks that represents a single item inside a project, e.g. a billable milestone for a project.
- Reports
A report can be used to display various kind of information either graphically or as a list or something similar. E.g. to display all billable tickets for a given month.
- Miscellaneous
Like searching, printing, etc.
The first three items are currently implemented and working. Not all in-deep, but rather good working. From the "Miscellaneous" item, the printing functionality is working, the search functionality is the next thing I'm going to implement.
Image: Ticket edit window of Zeta Helpdesk
Searching for Tickets
(Added 2005-10-20). The dialog for searching for tickets now works in a first, very simple, version:
Image: Search dialog for tickets
The Code
In the first version of this I article, please excuse that I don't write much about the code. I'm going to enhance this section as the application evolves and code enances. Nevertheless I'm convinced that the code is rather stable and "good".
The Zeta Helpdesk application itself is developed with the newest Visual Studio .NET 2005, which is the release candidate (RC) from september 2005. The compiled version in the attachment of this article therefore requires the "dotnetfx.exe" that comes with the Visual Studio .NET 2005 RC.
The Database Access Code
In all of my .NET 1.1 applications I wrote until now, I used my own developed wrappers to access the ADO.NET classes. I really tried to give the database-related classes, wizards, wrappers, typed DataSets, etc. of Visual Studio .NET 2005 a chance. But after several tries, I again went back to my own, well-tested and proofen classes.
I really do hate all this database-related stuff that ships with Visual Studio .NET 2005. Probably I'll give it another try some day, but currently I do not have the time for experiments.
Image: Ticket event edit window of Zeta Helpdesk
Miscellaneous
If you were ever in the need for a Windows Forms TimeSpanPicker
control (I searched for one without success some time ago), the application contains a library with a TimeSpanPicker control a co-worker of mine (Stephan Ruhland) developed some month ago.
No source for this control is included yet, but if you really need the source, just use Lutz Roeder's .NET Reflector to view it for now (or maybe asking Stephan to release it would help, too).
Base Library
Due to requests in the comments section below, I now published the base library that the Zeta Helpdesk uses as a separate article. Please look there if you want to use the base library in your own projects.
Installation
The application itself currently has no installation routine (i.e. no "setup.exe"). Instead, please perform the following steps to get a running version:
- Ensure that your system meets the requirements:
- Microsoft .NET Framework 2.0 (RC)
- Optionally: Visual Studio .NET 2005
- SQL Server 2000, MSDE 2000, SQL Server 2005 or SQL Server 2005 Express (I am developing on a SQL Server 2000 instance)
- Download the "ZetaHelpDeskSql.zip" script and execute it with the Microsoft SQL Server Query Analyzer on a running instance of SQL Server. If you do not have access to Server Query Analyzer (e.g. because you have MSDE or SQL Server 2005 Express or simply because you are lazy) please refer to the following subsection.
- Download and extract the "ZetaHelpDeskSource.zip" file.
- Adjust the "ZetaHelpDesk.Main.exe.config" configuration file to point to the correct SQL Server instance and to the folder where to put attachments. Also, you can configure logging stuff. If you are planing to compile your own version, simply adjust the "App.config" file instead. (I will add more detailed configuration instructions in an update of this article).
- Optionally, compile your own version with Visual Studio .NET 2005 or simply use the precompiled executable.
- Configure Zeta Helpdesk users: Currently, you must manually create the users inside the database, since the GUI for editing a user is still missing. To do this, user SQL Server Enterprise Manager and manually add one or more users to the "Users" table. If you enter the values of you Windows user account into the fields "SamName" and "DomainName", the login to the Zeta Helpdesk system occurs automatically, showing no extra login dialog box.
Database Installation (enhanced method)
Because I got a response from Sven that he has no access to SQL Server Query Analyzer, I enhanced the application with a new dialog to setup up the database directly through Zeta Helpdesk.
Image: Executing a SQL query from within Zeta Helpdesk
To use the integrated method, open the "Execute SQL query" dialog by clicking the "Tools" main menu and then the "Execute SQL query" menu item. Open the "ZetaHelpDesk.sql" script and execute it.
When you first start the Zeta Helpdesk (being unconfigured) it is likely that it brings you an exception window. This window has a drop down menu (the button on the lower left side) that opens a configuration menu:
Image: Exception window with drop down menu
Use the "Execute SQL query" menu item to show the dialog mentioned above.
Updating/Error reporting
To simplify your live when it comes to report errors to me (the author of the software) and to get updates of the software, I added the following three functions/items:
- Check for Updates
You now can use the "Check for updates" menu item int the "Help" main menu to check for updated versions of the application on our servers. The update checking is done through a standard WebService call (currently no proxy configurable - I will add this in the future). The update includes no source files, only executables. For source files, still please check this CodeProject article.
Image: Updating the Zeta Helpdesk application
- The UpdateConverter classAn internal class where I keep track of changes now checks for the internal upgrade state and whenever you download a new upgrade that does modifications to the database you will see a message box at the startup of the application that asks you to confirm the upgrade of the database. Therefore you should never need to manually add tables again, as the structure changes.
Image: Updating the database structure
- Send logfiles to the authorI added the ability to send me the logfiles that the Zeta Helpdesk application produces (unless you turned it of in the ".config"-file). This is again done through a standard WebService running on our servers. Usually you would call this function when an error occurs and you want to tell me the context by enabling me to look at your logfiles.
Privacy notice: The logfile may (or may not) contain data that you categorize as "private". If you have any concerns, please do not use this function. (Of course I will never use the logfiles for anything else but fixing errors!)
Conclusion
In this article I introduced a first version of my helpdesk system "Zeta Helpdesk".
It was and is a lot of fun to develop this application. I hope that this is the helpdesk tool you searched for all of your life. Or that one day it will become your system of choice! Currently it is under heavy/medium development; i.e. I will add and adjust/refactor features from time to time making it a more "round" application. Of course I will quickly fix any occuring bugs. Just write them in the comments section below.
Also, please notify me of any suggestions, tips, questions, bugs, enhancments or whatever you want to give me feedback about! Thank you!
Please remember: Your feedback drives my development efforts and directions.
License
I don't give much on all this license stuff. But if you do, it would be nice if you follow these terms:
Use the software and source code for whatever you want; e.g. install it, compile it, enhance it, take parts of the source into your own projects. If you plan to sell your enhanced version, I would of course be glad to get a small percentage of the money you make or that you just mention my name. But that is all up to you, of course.
This applies to all source code and binaries that you can download from this article on the CodeProject website.
History
- 2005-11-28: To greatly improve the user experience regarding updates and fixes, I added the ability to manually check for updates and to automatically download and install the updates if there is an update available. I also added the ability to send the logfiles that the application generates to me for further inspection. See the Updating section above.
- 2005-11-28:
When you have problems creating the database or get database errors, please see the comments of computerguru92382.
In addition, I added a form to directly report an error to me. Whenever an exception occurs, the exception message box now has a menu entry (through the lower left button) to directly send me error-information. This is done through a standard WebService that is running on our servers.
Image: Menu item to report an error
- 2005-11-08:
Added drop-down-menu to the exception window to enable first time starters to still configure application settings and database settings. Thank you, David!
- 2005-10-29:
Recompiled with .NET Framework 2.0 RTM (the final version). You can download the .NET Framework 2.0 Redistributable (most likely this one) from the Microsoft download page.
- 2005-10-24:Added link to the base library. See above for details.
- 2005-10-20:
Added dialog for searching for tickets. See above for details. Please note that I also added a new stored procedure named "SearchSimpleForTickets". Please use the updated SQL script to add it to your database.
- 2005-10-07:
Added missing SQL-scripts and enhanced source to hopefully fix the mentioned bugs. Thanks to Sean Goldin and berndke.
- 2005-10-08:
Added dialog box to setup up the database directly from within Zeta Helpdesk.
- 2005-10-07:
Initial release.