brain dust

The Absolute.

Wednesday, October 12, 2005

Wake me when September Ends

My title tells it all. Its October now, my big project push is now over. Towards the end I was pulling close to 120 hours per week, and did not see my family very often (hated that part). We have completed the first round of our major development. When ended up with a very stable web based framework, and 23 "applets" to go under it. Today I'll discuss the Organizer, which is the most complex as well as the most powerful part of the system:

The Organizer is a virtual folder system. In the Organizer you can create public or private folders. Public folders also allow you to control who can read, edit and manage a folder. In your folder you can place anything that has to do with the system: Agents, Extensions, Call Queues, whatever you want. This allows you to act on objects in concert. It also allows you to use the Object Picker (which is a subset of the Organizer) to select either an item, items or folders from your Organizer to use elswhere in the system.

The data structure is made up of two main tables: Folders and Folder_Contents. The reason we did it this way instead of a never ending, forward only self referencing table is that contents have no rights applied to them. The system has a rights structure, which the organizer uses. A folder in the organizer is also an object, and therefore can also be selected for use, which means that you are acting on all items within that folder.

It's completely abstract. Objects only exist in this sense as references. They always exist concretely in their respective data structure (Agents for example has a Agents table that describes everything you need to know about an Agent). By moving an Agent into a folder you are only making a reference to that Agent in the folder. You can also make copies of references, so an Agent can exist in n number of folders.

The Object Picker is a modal window setup. There is also an Object Picker Launcher, which is a user control that you can simply drag and drop onto a page and configure (at runtime since it is a user control, later I will convert this to a custom control) and when the page renders everything you need to allow a user to find something in the Organizer is there. It even has a multi or single mode, different actions to do once the user finalizes their selection and an interface to fire an event when the window closes, which also provides an interface to what the user selected (Object Description, Object Type, Object ID).

As you can see, the Organizer and the Object Picker become ultimately powerful. It allows you to create a virtual workspace, apply rights and have access to your Organizer as well as other's public folders from anywhere else in the system. It is my favorite, but also the most complex.