About a month ago, I started asking the community what kinds of enhancements that they would like to see as I started working on planning for MarcEdit 7.1.x and 3.1.x — and one of the comments, related to task and task management, seemed like such a good idea that I decided to go ahead and implement it early.
Essentially, here’s the problem. Users make use of a lot of tasks in MarcEdit. Well, let me step back. If you haven’t used MarcEdit or are only familiar with it generally, you might not know what I’m talking about when I talk about a task.
MarcEdit Tasks
MarcEdit tasks were developed back in MarcEdit 6.x as a way to simplify automation for users. Over the course of the lifespan of this project, I’ve implemented 4 different models (including tasks) for automating MarcEdit and MarcEdit functions. These models included:
- COM automation
COM automation is a method of creating objects that can be consumed by other programs in Windows. Originally, I created these objects to be consumed by vbscript and PERL scripts. In fact, originally, MarcEdit was essentially just a handful of libraries exposed through a COM object and a simple PASCAL interface. The interface has long-since been replaced, but the COM objects continue to be available. - Script Wizard
The script wizard is a lite-weight tool that will generate skeleton vbscripts and PERL scripts that can utilize MarcEdit’s COM objects to perform actions. My thought was, if I created a wizard, every cataloger would want to learn how to code and start writing their own scripts. In reality, very few people wanted to learn how to code, and few people made use of this tool. This tool is still available in MarcEdit, but I think I’m likely its heaviest consumer. - Macros
For a brief time in MarcEdit 6.x, I embedded a full feature Macro language into MarcEdit. Again, I thought, if I put this in the tool, everyone would want to learn how to program. When I removed it a couple years later, I only had one person notice it was gone….for one script which I helped them redo using the Task process. This functionality is no longer in MarcEdit. - Tasks
When I approached the community, I asked specifically what kind of automate functionality would be the most useful. By a large margin, the most commonly requested feature was a macro recorder — something that would work a lot like Connexion. Now, I couldn’t (wouldn’t) build exactly the same thing — but what I could do was create a process that would allow users to capture information via the UI, and have the tool translate that into actionable code. Essentially, this is what Tasks are, and these are really popular within the application.
Task Management
In MarcEdit 7.0.x and 3.0.x, I’ve spent a lot of time updating how tasks work within MarcEdit. I’ve focused on three specific areas:
- Performance
- Testing
- Management
Task Performance
When tasks were originally created, I essentially bolted them onto the MarcEdit GUI. I did this because it allowed me to create them really quickly, and do so without causing a significant amount of disruption in the application. Essentially, Tasks in MarcEdit 6 worked like this:
- User would start a task
- MarcEdit would reach each task action and then open hidden windows and essentially “sendkeys” to those windows and run the action through the hidden UI window
- Rinse and Repeat
This worked great — because the tasks worked exactly the same as the UI. They were also inefficient when they got larger (over 10-12 items) because each task had to save and load the file into the Editor. For large files or files with large sets of tasks, this represented a significant amount of IO operations.
In MarcEdit 7/3 — this process was changed. Tasks no longer interact with the UI, but run through a task broker that evaluates that task and file and uses one of 3 different methods to process the data. This means files are loaded only once (minimizing IO) and tasks process very quickly. For example, a task with ~900 items use to take ~10 hours to run in MarcEdit 6 when processing a 300 MB file. In MarcEdit 7, this same task now takes about 10 minutes to complete. That’s a big improvement.
Testing
MarcEdit 6 never provided the ability to debug a task. In MarcEdit 7, a debugger was added to the Task Editor. When users create a task, they can now run the task through a debugger and see the results of each action in real time.
Management
Extensive changes in Task management occurred in MarcEdit 7/3. These occurred in the task editor where the ability to comment lines of tasks, copy task elements for pasting into new tasks, printing, item moving, deleting, etc. were all improved. At the Task list level, management items related to direct edits, renaming, movement were all added.
Task Groups
So, folks make use of tasks — which is great. The downside is that this means that the task interface is starting to become unwieldy. I had a number of users tell me that they’ve created so many tasks, that when they open the task menu, the menu list is becoming too large. Ideally, they’d like to be able to create task groups so that they can shorting the list, and group like tasks together. It’s a great idea — so I started looking at how this might be accomplished within the application. This work culminated in the most recent update — where task groups and group management was added to the application.
Available options
Task groups are defined and managed within the Task Management window.
Without any task groups defined, tasks are displayed item by item in the currently available task menu entry in the MarcEditor:
Groups now allow users to group a set of tasks together. From the Manage task window, users can:
- Create new task groups
- Assign items to a task group
- Rename a task group
- Delete a task group
- Unassign items from a task group
As of today, working with groups is still a little clunky because you have do it through the selection menus. You cannot drag and drop items into groups, etc….not yet. So, let’s say I wanted to create a group and assign items to it. Well, here are the steps.
- Create a new Task group
When selected, this will open the following dialog:
Enter the name of the task group. Keep in mind, the pipe (|) character is reserved. If you use this value, it will replace it with {pipe}. Also, if you enter an ampersand “&” when the menu is created, the character following the ampersand “&” will be accessible via the ALT+ keyboard keystrokes. So, if I created the group: Task Group &1. When the menu was created, I could open this menu group via the ALT+1 keystroke combination. I’ll enter this for the sample. When a task group has been created, the window will change to add a default group. These are items not associated with any group.
To assign items to this new group — I need to select the task items I want to assign, and then select Assign Tasks from the Manage Existing Tasks action. This will generate the following screen:
When the groups dropdown shows up, the Task List control loses focus. When that happens, the selected items will no longer be visible. That’s ok — they are still selected. Simply select the group you want to assign those items to, and then click the Assign Group link. When done, your selected items will move into the group:
Now, when you close this window, and open the MarcEditor, you will see that these items are now grouped within their own task group.
This is the process that users will need to use for each task group assignment. Yes, a little clunky, but hopefully, you’ll only have to setup the groups once.
Once items are in groups — if you share your tasks via the network — all users will have grouped views. If you export the tasks, groups are exported with them (though, I may change this in the future). Right now, this is kindof version 1.0 of this type of task management, and I’m definitely interested in hearing from users as they work with these.
Questions — let me know.
–tr