By
© Copyright 2003
This example program is provided as is with no warranties or
Please provide feedback and share ideas for improving the program to jgiudice@rcn.com
Please Note: This is
an evolving program and I will be updating it regularly
As of
The purpose of this project
has been to explore what type of application functionality can be implemented
using the current implementations of Groove Web Services. This example also
explores and develops some ideas I have on how to make a more effective user
interface for interacting with team members using the Groove technologies.
Frankly, I wanted to build an alternative user interface that works better for
me.
Building a collaborative
application using Groove Web Services (GWS) is very similar to build any other
windows application. The application user interface and logic is the same as
any other application. The use of Groove technology to store information and
share it requires some small changes to your programming approach.
First, you need to understand
that the information you are working with and sharing can be updated, added to,
or deleted by other users while you are still working with it. The good news is
that Groove makes it easy to build multi-user applications. The bad news is you
have to handle situations where other users are changing information that you
may be working with. It is straightforward to do this, but it does require some
planning in your projects.
The other consideration is
that currently GWS supports all interactions with information items in
Discussions threads, shared calendars, and shared files. This will mean that
you will want to focus your application areas on things that can be represented
in one of these forms. That can cover a lot, if you are creative.
When the program first
starts, I check to see if Groove is already running. This is needed since GWS
will throw exceptions if Groove is not already running. The approach here is to
see if there is a currently running process named Groove.
Friend Function GrooveIsRunning()
As Boolean
'This will test to see if Groove is running
Dim allProcesses(), thisProcess As Process
allProcesses = System.Diagnostics.Process.GetProcesses
GrooveIsRunning = False
For Each thisProcess In
allProcesses
'Find a process named Groove
If thisProcess.ProcessName
= "Groove" Then
Return True
End If
Next
End Function
Then I start the main user
interface form frmGWSAccounts. This code gets all of
the accounts that are currently installed on the local PC. Then for the first
account it gets all of the spaces in that account. When a user clicks on a
space in the tree view, it will show all the tools that GWS will recognize.
Currently this is limited to 2.5 spaces and the Files, Discussion and Calendar
tools.
Here is a top level view of the user interface.

When you double click on a discussion item, it brings up my alternative discussion viewer:

This reads in the contents of
a discussion view and on left it shows you the thread subjects. On the right it
shows you all of the thread discussion and the replies to that item. This way
you can get the full sense of the give and take in a discussion thread. Also,
the view is displayed as and HTML page and is printable. Just right mouse click
on the view.
The support GWS today
provides for threaded discussions is pretty extensive. However a few of
features in Groove’s UI do not translate through GWS. First all discussion
items come across as text. My experience to date is this has not been an issue
or problem in real discussions. Very few people use formatting of discussion
entries where that would be an issue. The next problem is that entries that
have links to other items in the Groove shared space lose those links. The last
issue is that GWS does not support attachments on discussion items. That last
one is a frustration but it turns out the there are only a few times that
people are using attachments and when that is an issue, I just open up the
discussion in the Groove UI directly.
This is gotten to be the most useful way for me to work with LOTS of spaces. I will describe this more in an update later this week.

Note – The Shared Files Explorer form/viewer is not yet working. I know I have a bunch of work to do here. My goal is to have that done next week.
To get the online/offline
status for your contacts is a little tricky. When you first get all of the
known contacts, their awareness status will show them as offline. To get the
correct status you need to subscribe to the contact events for that account. This
will give you updated information on the awareness status changes for your
known contacts. The application needs to keep tack of the contacts and their
current online/offline status.
Awareness Changes – The user selects one of their accounts and the program will start a subscription
to the contact events for this account. This is done in the event handler for tvAccounts_AfterSelect. This will start the program watching
for any changes to the contact status. It also releases any existing
subscription to updates of the contact status for any previous account being
watched.
After the subscription is
started, the program then goes through and gets all the known contacts for this
account. This is done on a background thread so the rest of the UI can proceed
while contacts information is being gathered. The known contact information is
stored in a hash table. The program uses the contact URI as the key for entries
in the hash table, since these are unique in Groove. This hash table of
contacts is updated each time there is a contact event change. Currently the
program polls Groove for any contact changes every 750 milliseconds. This is
done in Time1_Tick event handler. Any changes are processed and the hash table
is updated to reflect the changed state. From this cache, the program can then
get an accurate reading of the online/offline status for each member of a
space.
Change Log
|
Version |
Date |
Changes |
|
0.1.2.1 |
|
·
Improved how
the dashboard handles spaces with tools that have a problem in GWS ·
Fixed how to
correctly handle the online – offline awareness status for members of the
space. |