Process enaction and tool integration via a task oriented paradigm5530861Abstract A task manager for providing personal organization, project management, and process automation capabilities. The task manager maintains a hierarchical list of tasks for an individual. For each task, notes can be kept, priorities set, and progress tracked. Also, subsets of the task hierarchy can be shared. Every task in the task manager belongs to a class, and each class includes pre-defined automatic actions and manual actions. The pre-defined automatic actions are automatically executed by the task manager when the task is being worked on. The manual actions aid in task execution because the relevant operations (that is, the manual actions) are available when the task is being worked on. The task manager communicates with agents, tools, and process engines via a message system. The agents, tools, and process engine may receive task information from the task manager and may also remotely control the task manager. Claims What is claimed is: Description A portion of the disclosure of this patent document contains material which is subject to copyright protection. The copyright owner has no objection to the facsimile reproduction by anyone of the patent disclosure, as it appears in the Patent and Trademark Office patent files or records, but otherwise reserves all copyright rights whatsoever.
TABLE 1
______________________________________
/***********************************************************
* File: ClassExecute.h
* Description:
Defines "Execute" class of tasks (for executing a
* random command via system).
Language:
C++
**********************************************************/
#ifndef
CLASSEXECUTE.sub.-- H
#define
CLASSEXECUTE.sub.-- H
#include <Str.h>
class ClassExecute : public Task {
Str .sub.-- exec.sub.-- sting;
// Sting to pass to system();
public:
ClassExecute();
virtual void CreateAction(Boolean);
virtual void StartAction();
virtual void EditAction();
virtual void ResumeAction();
virtual const Actions& ActionTable() const;
virtual Boolean WriteClassData(ostream&, const Str &,
Boolean);
// invoked to write task to
stream
virtual Boolean ReadClassData(istream&, char *attrib,
int attrib.sub.-- size, Boolean assignment.sub.-- flag-
TRUE);
// invoked to read task to
stream
const Str exec.sub.-- string() const;
void exec.sub.-- strin(const Str&);
};
inline const Str ClassExecute::exec.sub.-- string() const
return.sub.-- exec.sub.-- string;
}
inline void ClassExecute::execstring(const Str& s)
{
.sub.-- exec.sub.-- string = s;
}
#endif
/*******************************************************
* File: ClassExecute.C
* Description:
implements execute class (calls system on
* exec.sub.-- string)
* Language: C.sup.++
*************************************************/
#include <stdlib.h>
#include <Xm/Xm.h>
/* declares functions, such as TmPromptUser, which allows
interaction with users via dialog boxes.*/
#include "dialogs.h"
* defines the task base class*/
#include "Task.h"
/* declares a repository of services, such as SaveTask, for
managing tasks */
#include "TaskRepository.h"
#include "ClassExecute.h"
//
// Create an object of the Unknown class
//
Task *CreateExecuteClass()
{
return new ClassExecute;
}
//
// Class constructor
//
ClassExecute::ClassExecute()
{
.sub.-- class.sub.-- name = "Run.sub.-- Action";
}
void system.sub.-- add(Widget, void *task, char *exec+str)
{
ClassExecute *t = (ClassExecute *) task;
t.fwdarw.exec.sub.-- string(exec.sub.-- str);
}
void ClassExecute::CreateAction(Boolean interactive)
{
if (interactive)
TmPromptUser(NULL, "Command String",
"What is your execution
string: ", NULL
(XtCallbackProc) system.sub.-- add,
(caddr.sub.-- t) this);
}
void ClassExecute::StartAction()
{
system(.sub.-- exec.sub.-- string);
}
static void EditActionCB(Widget, ClassExecute *e, char *st)
{
if(str != NULL)
{
if(e.fwdarw.exec.sub.-- string() != str)
{
e.fwdarw.exec.sub.-- string(str);
task.sub.-- base.fwdarw.SaveTask(*(Task *)e);
}
}
}
void ClassExecute::EditAction()
{
TmPromptUser(NULL,"Cmmand String", "Execution
String: ",
exec.sub.-- string(),
(XtCallbackProc) EditActionCB, (caddr.sub.-- t)this);
}
void ClassExecute::ResumeAction()
{
system(.sub.-- exec.sub.-- string);
}
Boolean ClassExecute::WriteClassData(ostream& out, const
Str &sa,
Boolean /*for.sub.-- sharing*/)
{
if (sa == NULL .vertline. .vertline. sa == "Execute-string")
{
out <<"Execute-String: " << .sub.-- exec.sub.-- string
<<' n';
if(sa != NULL)return TRUE;
}
return FALSE;
}
Boolean ClassExecute::ReadClassData(istream& in, char *atttrib,
int attrib.sub.-- size, Boolean /*assignment.sub.-- flag*/)
{
if(strcmp(attrib, "Execute-String") == 0)
{
in.get(attrib, attrib.sub.-- size);
.sub.-- exec.sub.-- string = attrib;
return TRUE;
}
return FALSE;
}
void RunAction(Task &t)
{
system(((ClassExecute &) t).exec.sub.-- string());
}
const Actions& ClassExecute::ActionTable() const
{
static actions execute.sub.-- action.sub.-- table[]= {{"Rerun
Command",
RunAction},{NULL, NULL}};
static Actions ret = { FALSE, execute.sub.-- action.sub.-- table };
return ret;
}
______________________________________
Copyright HewlettPackard Company, 1991, All Rights Reserved
According to the present invention, the task actions (both predefined automatic actions and manual actions) may be task instance specific, rather than class specific. This is accomplished by having the task instances store actions in task attribute values. When a task instance is executing, the class action functions could then access the task attribute values associated with the task instance in order to determine the task action to execute. A general task class of the above type may be the only task class required in such an embodiment. In this patent document, the terms "task" and "task instance" are synonymous. 6. Templates According to the present invention, users may use templates to create tasks. A template may define a single task or a hierarchy of multiple tasks and subtasks. When creating a task, a user may create the task from scratch, or may select a pre-defined task template. Thus, the task template mechanism of the present invention facilitates the creation of new types (see Section 2.4). The templates are text files containing hierarchical descriptions of tasks and subtasks. The templates include values for many of the task attributes (described above). Other values of task attributes must be supplied by the user. When the user selects a template, the task manager reads the template and creates the tasks and subtasks described therein. Any format which describes a hierarchy of tasks and subtasks, including their attributes, may be used to implement the templates (as long as the task manager 122 is implemented in a consistent manner so that a tool can read and properly interpret the templates to send appropriate task creation commands to the task manager). One possible format for implementing the templates is shown by way of illustration in Table 2, below.
TABLE 2
______________________________________
# 1st field:
numbered by section and subsection to show
hierarchy
# 2nd field:
Task title
# 3rd field:
estimated time in days
# 4th field:
non-tracked actual time (not normally used)
# text between titles: note associated with each task
1 Inspection: DESCRIPTION
0 0
1.1 inspection kickoff meeting
.0625 0
1.2 inspection preparation
.375 0
Read all code and supplemental materials. Use checklist to
monitor for omissions and certain classes of defects. Record
amount of preparation time (from task manager or elsewhere).
1.3 inspection meeting
.375 0
______________________________________
Copyright HewlettPackard Company, 1991, All Rights Reserved
7. User Interface The task manager 122 of the present invention includes the user interface 302. FIG. 3 illustrates the user interface 302 according to a preferred embodiment of the present invention. Users may access their tasks via the user interface 302. There are a certain set of operations which are needed for task management which the task manager 122 makes available at all times. There also exists a set of operations which are specific to the type of task being viewed. These operations are available to users via the Actions menu 320 (described further below). The user interface 302 contains three primary areas: menu bar 304, status and frequent operation area 306, and task list area 308. Users perform work by using the functions in the status and frequent operation area 306 to find a desired task. The desired task is displayed in the task list area 308. The users then select and process the desired task by clicking on the task and using the functions available from the menu bar 304. The status and frequent operation area 306 includes a Time area, interrupt timer, Top, Parent, Browse, Prev View, and Next View buttons, and a Task label. The Time area displays the time which is used as the starting time for the next task. The Time area is editable. This allows a user to "set back the clock" to specify that a task began in the past, rather than now. Once a task is started or resumed, the time will change to begin tracking the current time regardless of what value it was edited to display. The Time area may be frozen by pressing the Interrupt Timer button. The frozen time is used as the start time when a task is started or resumed. In this case, the time value changes to begin tracking the current time again. The Interrupt Timer button is a toggle and thus the interrupt can be disabled. Note that, while tracking the time in the Time area, the task manager 122 updates the Actual Time and Per User Actual Time attributes. The Top, Parent, Browse, Prev View, and Next View buttons are used to navigate within the hierarchical task list. Top causes the top level list of tasks to be shown in the task list area 308. Parent causes the parent task of the task shown to be displayed. Browse (which requires a task to be selected) displays the subtasks of the selected task (this is equivalent to using a mouse to double click over the task). The "Task:" label precedes the task which is being worked on. A history of tasks which have been modified or executed recently is available via the Prev View and Next View buttons. The task list 308 contains a list of tasks. Tasks may be selected by clicking over them with the mouse. Double clicking over a task causes the task's subtasks to be displayed (this is the same as Browse). Each line in the task list 308 displays one task. For each task, the task's Title attribute is displayed in order to identify the task. To the left of the description is an area for annotations. These annotations convey information such as whether the task has subtasks and whether the task is new. The annotations also identify the task owner and indicate the task status. The annotations are displayed based on information in the task's attributes. The set of displayed attributes is selected via Display:Preferences. Via the menu bar 304, users may select functions to maintain, organize, and process their tasks. The functions offered by the menu bar 304 are grouped into the following menu categories: task menu 310, navigate menu 312, communicate menu 314, display menu 316, actions menu 318, and help 320. Help 320 provides information on using the functions offered in the other five menu categories. FIG. 4 illustrates the other five menu categories and their respective functions. These functions are described below. 7.1. Task Menu The task menu 310 contains the following functions: edit, create, delete, undelete, attributes, notes, and quit. These functions are described in the following paragraphs. The edit function is used to modify the pre-defined attributes of the selected task. When the edit function is selected, the task manager 122 displays a dialog box which displays the attributes for the selected task. The attributes may then be modified. The create function is used to create a new task. When the create function is selected, the task manager 122 displays a dialog box and allows a new task to be created. The user may create the new task by using one of the pre-defined templates. The delete function is used to delete all of the currently selected tasks. The undelete function is used to undo the last delete operation. The attributes function is used to modify and/or create user-defined attributes for the selected task. The notes function allows notes (which are stored in the Note Pages attribute) to be created and/or modified. The quit function is used to exit the task manager 310. 7.2. Navigate Menu The navigate menu 312 is used to quickly navigate through the hierarchy of tasks to find a specific task. A hierarchy of cascading menus is presented when Navigate is selected. Each menu level corresponds to a level in the task hierarchy. Tasks may be quickly located by moving through the cascading menus (rather than by using the Top, Parent, and Browse buttons in the status and frequent operation area 306 to scroll sequentially through the task list 308). 7.3. Communicate Menu The communicate menu 314 is used to share tasks among users. A share task function in the communicate menu 314 allows a user to manage the share list for a task and its descendants (that is, the share task function allows users to edit the Viewed By attribute). According to the present invention, a task is shared among users by changing the task's Viewed By attribute such that other users obtain read or read/write access. The task manager 122 physically transfers tasks to other task managers 122 if such transfer is needed to share the tasks. The mechanism for transferring tasks among task managers is described in Section 9. Note that actual ownership of the task (that is, the Ownership attribute) is managed via the Edit function in the task menu 310. 7.4. Display Menu The display menu 316 has the following functions: filter, preferences, advise next task, and new task notify. Filter is used to organize the tasks in the task list 308. When filter is selected, a dialog box is displayed which lists multiple types of filters which can be applied to the tasks in the task list 308. For example, users may select a filter such that only tasks with a certain owner or set of status values are displayed. Users may also use the filter function to control the depth of the display on the task list 308 (that is, to specify how many levels of the task hierarchy to display at one time). Preferences is used to specify which task attributes should be display as annotations in the task list area (such as owner, priority, urgent flag, actual time, and estimated time) for each task which passes the current filter. Advise Next Task is used to allow the task manager 122 to suggest to the user a list of tasks which should be executed next. The task manager 122 makes its suggestion based on task attributes and a heuristic algorithm (which is configurable by the user). Note that the heuristic algorithm is necessary since some of the task attributes (such as priority and deadline) may be conflicting. New Task Notify has two settings: enabled and disabled. If New Task Notify is enabled, then the user is notified when new tasks are sent to him. New tasks are sent to the user when someone, other than the user, changes the ownership of a task to the user. Note that the present invention includes a mechanism for physically sending tasks between task managers. This mechanism is described in Section 9. 7.5. Actions Menu As noted above, the actions menu 318 lists the manual actions which are associated with the task class of the executing task. Users may execute these manual actions by selecting them from the actions menu 318. These manual actions are specific to each task class. 7.6. Popup Menu The popup menu is not available from the menu bar 304. Rather, the popup menu is available when the user presses one of the buttons on the mouse over the task view area. The popup menu is available when the user presses the right-most mouse button. The popup menu includes the following functions: Start/Resume, Complete, Select for Move, Move Before, Move After, and Move Under. These functions are described below. Start/Resume is used to start or resume execution on the selected task. Only one task may be selected. When a task is executing, its Title attribute is put beside the Task label in the status area 306, and the task timer begins accumulating time for the task. The accumulated time is stored in the Actual Time and Per User Actual Time attributes. The log of the execution is stored in the tasktimelog. Complete is used to mark a task as complete. That is, the Status attribute is changed to Complete. Select for Move is used to mark the selected task as the one to be moved in the task hierarchy via any of the move operations below. Move Before is used to move the marked task before the currently selected task in the task hierarchy (that is, the marked task becomes an earlier sibling). Move After is used to move the previously marked task after the currently selected task in the task hierarchy. Move Under is used to move the previously marked task under the currently selected task in the task hierarchy (that is, the marked task becomes the child of the currently selected task). 8. Task Manager Message Interface According to the present invention, all task manager operations which are available from the user interface 302 are also available via messages. Thus, the task manager may be remotely controlled by nonuser entities (that is, entities which do not access the task manager via the user interface) such as the process engine 128, agents 126, and tools 124 such as report generators. The messages are transferred via the message system 202. An agent, unlike a tool, is autonomous. It does not interact with users. For example, an agent (which might be acting through a process engine) might implement the following: If any "checkin" request occurs, run the file through a metric. If the metric passes, allow the "checkin" to succeed. If it fails, create a task for the requestor to fix the file (with a completion action of automatically performing the "checkin"). A non-user entity and a user may operate with the same task manager. Alternatively, a non-user entity may operate with its own copy of the task manager. For example, a control services agent, like a defect routing script, is not associated with any one user and thus is likely to have its own task manager. FIG. 2B illustrates a connectivity architecture of the present invention, wherein an agent 126 and a user 201 are operating with different task managers 122. Note that the user 201 and a tool 124 are operating with the same task manager 122B. In FIG. 2B, the agent 126 operates with a task manager 122A. The user 201 operates with a task manager 122B. The task managers 122A, 122B communicate (that is, share tasks) via a communication network 250. Such communication is described further in Section 9. Regarding FIG. 2B, note that the agent's and user's task managers 122A and 122B may be operating on the same computer platform, or may be operating on multiple computer platforms which are connected via a communication network. The communication of tasks between the task managers 122A, 122B for both cases is essentially the same (again, this is described in Section 9). To create and send a new task to a user, a non-user entity would access its task manager (whether separate from or shared with the user) via a message over the message system 202 in order to create a new task (using the create function in the task menu 310). Then, the non-user entity would send a message to its task manager 122 over the message system 202 in order to share the new task with the user (via the share task message function corresponding to the communicate menu 314). The non-user entity may also receive task information from its task manager 122 by sending messages to its task manager 122 over the message system 202. Note that the user must share his tasks with the non-user entity (via the Viewed By attribute) if he wishes the non-user entity to have access to his tasks. The non-user entities use this task information to perform their work. For example, a project management/scheduling program may use the information in the Task Deadline and Scheduled Time attributes to generate a schedule for completing the tasks. A report generator can use the information in the Time Estimate, Actual Time, and Status attributes to generate a report containing the amount of time necessary to perform the completed tasks and the amount of time left to complete the pending tasks. Thus, the task data entered by the user into the task manager 122 is not used only by the task manager 122. Rather, the task manager 122 of the present invention allows non-user entities (such as tools, agents, and the process engine) to easily access and use the task data. The messages supported by task manager 122 are described below. There are two attribute values which control message access to task data. These attribute values are stored in the task database along with their corresponding tasks. If a task has an Access=Deny attribute value, then messages cannot access the task or any of its subtasks. If a task has an Access=Deny-Subtasks attribute value, then messages can access the task, but none of its subtasks. In the following, Request refers to a message which requests an operation of a tool (such as the task manager). The operations are generally the ones available in the user interface. Notify refers to a notification message sent by a tool to signify successful completion of an operation. Failure refers to a notification message sent by a tool to signify a failure to perform an operation. The following message returns a list of task identifications (that is, the Unique name attribute). When a task is found with the requested attributes, then the True/False flag controls whether subtasks of this task should be searched for more tasks with the requested attributes. Request TASKMGR Get-Tagged-Tasks "True"/"False" values . . . Notify TASKMGR Get-Tagged-Tasks task-ids . . . Failure TASKMGR Get-Tagged-Tasks error message The following message returns the unique name attributes of all of the task. Request TASKMGR Get-Tasks Notify TASKMGR Get-Tasks taskids . . . Failure TASKMGR Get-Tasks error message The following message returns the task hierarchy from the task root or from any other task in the hierarchy. The tree structure is conveyed by causing a task's children to be listed after the parent task-id, and surrounded by parenthesis. Request TASKMGR Get-Task-Hierarchy [task-id] Notify TASKMGR Get-Task-Hierarchy parent-task-id (child-task-ids . . . ) . . . Failure TASKMGR Get-Task-Hierarchy error message The following message returns data attributes of a task. The message lists the attributes wanted (using the same attribute names as are found in the task data files, that is, "Title", "Children", etc. or user defined attributes names) and the values are returned. Class specific data attributes may be queried as well. The -i option indicates that the requested attributes may be inherited from the parent task if not present on the requested task. Request TASKMGR Get-Task-Info [-i] task-id attributes . . . Notify TASKMGR Get-Task-Info values . . . Failure TASKMGR Get-Task-Info error message The following message returns the identification of the currently executing task. Request TASKMGR Get-Execute-Task Notify TASKMGR Get-Execute-Task task-id.vertline."none" The following message returns the identification of the currently selected task. Request TASKMGR Get-Selected-Task Notify TASKMGR Get-Selected-Task task-id Failure TASKMGR Get-Selected-Task error message The following message allows the data attributes for a task to be set to new values. Both pre-defined attributes and user-defined attributes may be set. Request TASKMGR Set-Task-Info task-id {attribute":" value/n}+ Notify TASKMGR Set-Task-Info Failure TASKMGR Set-Task-Info error message The following message causes a new task to begin executing. Request TASKMGR Set-Execute-Task task-id Notify TASKMGR Set-Execute-Task Failure TASKMGR Set-Execute-Task error message The following message adds a note to an existing task. If a note with the given title already exists, the new note is appended to the existing one. Use of "FILE" causes the contents to be taken from the given filename. Request TASKMGR Add-Note task-id note-title/n{"FILE" filename}.vertline.{"TEXT" note-text} Notify TASKMGR Add-Note Failure TASKMGR Add-Note error message The following message returns the name of the user running the task manager. Request TASKMGR Who-Am-I Notify TASKMGR Who-Am-I username The following message creates a new task. Once created, Set-TaskInfo can be used to initialize the other task data attributes. Request TASKMGR Create-Task class-name parent-id title Notify TASKMGR Create-Task task-id Failure TASKMGR Create-Task error-message The following message causes a task to be selected in the task display area. Request TASKMGR Select-Task task-id Notify TASKMGR Select-Task Failure TASKMGR Select-Task error-message The following message causes an Edit->Task Data . . . user interface dialog box to be popped up for the given task. Request TASKMGR Edit-Task task-id Notify TASKMGR Edit-Task The following message returns all of the execution durations intersecting the intervals given. The start-time and end-time are textual descriptions of a time, and are parsed to determine a time.sub.-- t equivalent. Request TASKMGR Get-Time-Data start-time/n end-time Notify TASKMGR Get-Time-Data [start end task.sub.-- id/n]* Failure TASKMGR Get-Time-Data error-message The following message can be used to replace a range of executions with a new set of executions. The actual times on tasks reflect the new execution times. Request TASKMGR Replace-Time-Data start-time.sub.-- t/n [start end task.sub.-- id/n]* Notify TASKMGR Replace-Time-Data Failure TASKMGR Replace-Time-Data error-message The following message can be used to reset the export bit on a set of user defined attributes associated with a task. Request TASKMGR Unexport-Attributes task-id attribute-names . . . Notify TASKMGR Unexport-Attributes Failure TASKMGR Unexport-Attributes error-message The following message sets the export bit for a set of user defined attributes for a task. Exporting causes the attribute value to be visible to all people sharing the task. An attribute need not exist for it to be exported. Request TASKMGR Export-Attributes task-id attribute-names . . . Notify TASKMGR Export-Attributes Failure TASKMGR Export-Attributes error-message The following message can be used to delete a set of user defined attributes for a task. Both exported and non-exported tasks may be deleted. Request TASKMGR Delete-Attributes task-id attributes-names . . . Notify TASKMGR Delete-Attributes Failure TASKMGR Delete-Attributes error-message 9. Task Sharing As noted above, the task manager 122 of the present invention provides a task sharing mechanism for transferring task data between task managers 122. The task managers 122 may be operating on the same computer platform. Alternatively, the task managers 122 may be operating on different computer platforms. The task sharing mechanism of the present invention is described in this section. The task sharing mechanism of the present invention allows tasks to be shared among individuals using the task manager 122, and also among individuals not using the task manager 122. This is accomplished by using electronic mail (email) messages. Task manager users can send tasks to non-task manager users. The task manager sends the tasks as email messages to non-task manager users. The non-task manager users would not be able to update the tasks unless they started using task manager. Note that, since email messages are used to transfer tasks among users, the task sharing mechanism of the present invention may support wide area sharing that is not limited to a local area network. The task sharing mechanism of the present invention allows a set of users to share a task. The users may have either read-only or read-write access to the task. While the task is being shared, the task's data is synchronized among those sharing the task. To manage simultaneous updates to the task by more than one user at a time, a locking scheme is used. The locking scheme is not visible to the users, except when exclusive access cannot be obtained. Note that, in this section, the terms "individuals"and "users" refer to both human operators and the agents 126. The task sharing mechanism of the present invention employs the "Network File System" (NFS). NFS is well known to those skilled in the art, and is described in many publicly available documents. To simplify locking over a wide area network, the task manager 122 places some restrictions on read-write access. Specifically, the task manager 122 divides all users sharing a task into locales. Two users are in the same locale if they are communicating via NFS to an agreed upon lock repository and thus reside on a single local area network (LAN). Within a locale, all users with read-write access to a shared task can lock that task using the lockf(2) system call, which is a well known NFS system call. The lockf(2) system call uses the NFS lock daemon in a local area network. Only the users with read-write access to a shared task within one locale at a time are allowed to lock the task. The one locale wherein user read-write access is allowed is the locale in which the owner of the task resides. All users with read-write access outside the owner's locale are not allowed to exercise their read-write access until ownership is moved to a user in their locale. All communication of task data between individuals is done using structured email messages with a sendmail alias per machine (this is a standard alias not requiring customization on each machine) to receive the data and update the user's task database. Referring to FIG. 2B, task managers 122A, 122B are connected via a network 250. Such connectivity is shown in greater detail in FIG. 5. FIG. 5 shows two machines (that is, computer platforms) 502A, 502B connected via a network 250 (either a local area network or a wide area network). The machines 502A, 502B are connected to the network 250 using SMTP (Simple Mail Transport Protocol) 510, 514. The machine 502A has a user Gary operating on a task manager 122A. The task manager 122A has a task database 506A. The machine 502B has users John and TWT operating on task managers 122B and 122C, respectively. The task managers 122B and 122C have task databases 506B and 506C, respectively. The machines 502A, 502B have task-receivers 508A, 508B. For the system shown in FIG. 5, the generic sendmail alias is as follows: task-manager: "!/usr/bin/task-receiver" The task-receiver in the sendmail alias refers to a setuid root program which has the ability to write to an "inbox" for each local task manager process, and to connect with each local task manager process to instruct it to go read its "inbox". Thus, there is a task-receiver 508A, 508B operating on each of the machines 502A, 502B. The task manager moves data from its "inbox" to the task database 506. When user UA on system SA shares a task with user UB on system SB, user UA's task manager 122 specifies "UB@SB" as the person to share the task with. If both users UA and UB are on the same machine (such that UB is known as a local alias on system SA), then user UA's task manager 122 does not have to specify the machine. Rather, user UA's task manager 122 would look up user UB's alias and determine that it was UB@SB and send mail to "task-manager@SB" with the destination field specifying the receiver of the task. For example, consider a scenario where user TWT wants to share a task with user John. In this scenario, the source and destination are on the same machine 502B. Note that the following explanation also applies when the source and destination are on different machines (except that email messages would have to be routed across the network 250). As described above, to share a task, user TWT would use the Share Task function in the Communicate menu 314 of his task manager 122C. The task manager 122C first places the task in a structured email message. The task manager 122C would then send the email message from its task database 506C, at <twt@hpfcjrd>, to John at <john@hpfcjrd>. "john" is an alias which exists on hpfcjrd, so the task manager 122C forwards the email message to "john". Specifically, the task manager 122C looks up the user "john" and finds that it is an alias for "john@hpfcjrd". The task manager 122C rewrites the address as "taskmanager@hpfcjrd" and adds "Destination:john@hpfcjrd" to the task description and then sends the email message to the task-receiver 508B. The task-receiver 508B on hpfcjrd sees the destination and checks to see if John runs a task manager 122 (by looking for a task list directory in John's home directory or some other specified location). If John runs a task manager 122, then the task-receiver 508B delivers the email message to John's task manager's inbox and notifies John's task manager 122B (via a socket). John's task manager incorporates the new data into the database. If New Task Notify is enabled in the Display menu 316 of the task manager 122B, then the task manager 122B would inform John of the new task. If John does not run a task manager 122, then the taskreceiver 508B sends the email message intact to "john" on the local machine. The English part (that is, task title and notes) would be given first. Then a bar (that is, a separator) and the semantic data would be included afterwords. Table 3 illustrates the structure of the email message. Note that the task attributes are embedded in the email message. Note also that, by using email messages as in Table 3 to share tasks, semantic information of the tasks is preserved.
TABLE 3
______________________________________
Message-Id:<9004042019.AA122.03
@hpfcjrd.sde,hp.com>
To:task-manager@hpfcjrd.sde.hp.com
Subject:task delegation
Date:Wed, 04 Apr 90 14:19:11 MDT
From:Tim <twt@hpfcjrd.sde.hp.com>
FROM twt@hpfcjrd.sde.hp.clm
DESTINATION john@hpfcjrd.sde.hp.com
BEGIN-UPDATE
BEGIN-TASK
BEGIN-TASKDATA
Class:Unknown
Name:33779hpfcgt-gary
Version:13
Time-Estimate:3
Initial-Actual-Time:0
Per-User-Time-Total:gary 10800
Per-User-Time-Total-jenings 0
Parents:33716hpfcgt-gary
Title:fix XeInitialize core dump in XmPutResource
when using color object
Owner:gary
Creator:gary
Creation-Time:1991-03-19 09:23:23 MST
Accepted:True
Status:Completed
Last-Status-Change:1991-03-27 13:44:25 MST
Priority:70
Urgent:False
Viewed-By:gary@hpfcgt.sde.hp.com True myLocale
Viewed-By:diamant@hpfcjrd.sde.hp.com True
myLocale
Viewed-By:gerety@hpfccg.sde.hp.com True myLocale
Viewed-By:twt@hpfcjrd.sde.hp.com True myLocale
END-TASKDATA
END-TASK
END-UPDATE
______________________________________
Copyright HewlettPackard Company, 1991, All Rights Reserved
As shown in Table 3, only non-empty fields are included in the structured email message. The format shown in Table 3 is the same that is used in a file-based database. Sendmail automatically performs queuing when a machine or network is unavailable. Even if a destination task manager 122 is not running, the alias can still process the email and update the destination task database 506. If a task being shared has subtasks, the subtasks are included in the email message. The task-manager splits the message into individual tasks and stores each separately. The task manager 122 is responsible for notifying the user and allowing the user to examine the tasks. 10. Task Manager Scenario The structure and operation of the task manager 122 are further described below by considering two scenarios. In the first scenario, the task manager 122 is not operating with the process engine 128. In the second scenario, the task manager 122 is operating with the process engine 128. 10.1. With Task Manager Without Process Engine The first scenario involves developing computer software. Specifically, the first scenario focuses on how a software developer would use the task manager 122 in order to facilitate the debugging of computer software. John, the software developer, arrives at his office and logs in. The screen displays the user interface 302 of his task manager 122. John scrolls through the task list 308 and selects a "Read Electronic Mail" task (by using the Start/Resume function in the Popup Menu). The ResumeAction () associated with the "Read Electronic Mail" task automatically invokes John's mailer program. John uses the mailer program to read his electronic mail. While reading his electronic mail, John finds out that he has been requested to make a presentation at a conference. John exits the mailer program and returns to the user interface 302. John then uses the Create function in the Task Menu 310 to create a new task. John may enter the new task from scratch or may use an existing template. Note that, by using a template, many of the task attributes will be automatically filled in. Which attributes are automatically filled in depends on the subject matter of the template. The new task is a request to John's manager for permission to present at the conference. The deadline for responding to the conference committee is one week from today so John sets the Deadline attribute to be the same as the deadline for responding to the conference committee. Then, John shares this task with his manager by using the Share Task function in the Communicate menu 314 and changes the owner of the task to be his manager. John then scrolls down the task list 308 and finds a "Defects" task. John uses the mouse to double click on this task in order to display the subtasks of the "Defects" task (John could have displayed these subtasks in many other ways, such as using the Navigate Menu 312). Each subtask of the "Defects" task represents a defect (that is, a bug) in the computer program which John needs to investigate and resolve. Each subtask of the "Defects" task has six sub-subtasks. The six sub-subtasks are listed as follows: "Examine Defect and Determine whether to fix", "Reproduce and Isolate Defect", "Modify Code", "Run unit tests", "Check in changed code", and "Resolve defect at next integration build." Each of these sub-subtasks must be marked as complete (in their Status attributes) before the Defeat subtask can be marked as complete. John double-clicks on the first subtask of the "Defects" task for processing. The menu list 308 then displays the six sub-subtasks of the selected subtask. John selects the "Examine Defect and Determine whether to fix" sub-subtask as his current activity. The task manager 122 automatically executes a StartAction() (or ResumeAction()) that is associated with the "Examine Defect and Determine whether to fix" sub-subtask. In this particular case, StartAction() invokes a reporting utility (that is, a tool 124) which displays a defect report. The defect report contains information regarding the defect. The defect report indicates that the problem is an abort which occurs when the program is run in a certain sequence. The sequence is documented in the defect report. Note that the task manager 122 had been keeping track of the time that John spent while processing the "Examine Defect and Determine whether to fix" sub-subtask. The task manager 122 automatically uses this information to update the Actual Time and Per User Actual Time attributes. John next selects the "Reproduce and Isolate Defect" sub-subtask as his current activity. The task manager 122 automatically executes a StartAction()(or ResumeAction()) that is associated with the "Reproduce and Isolate Defect" sub-subtask. In this particular case, StartAction() invokes a debugger. Alternatively, StartAction() may ask John whether he wants the debugger to be invoked, and if so, what executable to bring it up with. In any case, the debugger is invoked and John proceeds to follow the instructions in the defect report. Using the debugger, John reproduces the defect and examines the state of the application when it aborted. He immediately realizes that there is an uninitialized pointer. John next selects the "Modify Code" sub-subtask as his current activity. The task manager 122 automatically executes a StartAction() (or ResumeAction()) that is associated with the "Modify Code" sub-subtask. In this particular case, StartAction() invokes John's editor. Using the editor, John modifies the code. Now John wants to compile and test the program. To compile the program, John accesses the Actions menu 318. The Actions menu 318 has a "Compile" option, because (in this scenario) the subtask defined "compile" as a manual action to be inherited by all descendants. John selects "Compile" in the Actions menu 318 to compile the program. To test the newly compiled program, John selects the "Reproduce and Isolate Defect" sub-subtask again. Using the debugger, John confirms that the new program works correctly. John selects "Update Defect" from the actions menu 318 so he can add a description of the defect fix to the defect report. In this scenario, the subtask defined "Update Defect" as a manual action to be inherited by all descendants. Next, John selects the "Run unit tests" sub-subtask as his current activity. The task manager 122 automatically executes a StartAction() (or ResumeAction()) that is associated with the "Run unit tests" sub-subtask. In this particular case, StartAction() is defined such that the unit tests are automatically run on the new code (the particular unit tests to run are automatically determined by the task manager from the file which was edited). Next, John selects the "Check in Changed Code" sub-subtask as his current activity. The task manager 122 automatically executes a StartAction()(or ResumeAction()) that is associated with the "Check in Changed Code" sub-subtask. In this particular case, StartAction() is defined such that the code is automatically checked into the version control system. Later, once a full system build has occurred and John has verified that the fix did not adversely affect anything else, John selects the "Resolve defect at next integration build" sub-subtask as his current activity. The task manager 122 automatically executes a StartAction() (or ResumeAction()) that is associated with the "Resolve defect at next integration build" sub-subtask. In this particular case, StartAction() invokes an update utility. The update utility displays the defect in question and a resolve dialog box. The task manager fills in some information (such as which files were modified and the time spent fixing the defect) and John fills in the remaining required information and resolves the defect. This automatically completes his sub-subtask and the task manager 122 updates the status of the other sub-subtasks as well as the parent subtask. John looks at his task list 308 and sees that the task he shared with his manager has been completed (John can determine this by looking at the annotations). John uses the Notes function in the Task menu 310 to view the notes attached to the task. John sees that his manager approved the request. Now, John is free to reply to the original request and confirm his attendance. Thus, John again selects "Read Electronic Mail" as his task and his mailer comes up. He uses the mailer to send a message to the conference committee. John also creates a new task to schedule his conference attendance. A subtask of this new task may be an encapsulation of a form-filling package to generate a travel request. Later, John generates his objectives report for his manager. John runs a reporting program on his task manager. The reporting program extracts tasks from John's task database based on task attributes which John has identified to the reporting program. The reporting program generates a report which has a results section. The results section contains actual times and remaining times for each task. 10.2. Task Manager With Process Engine A rule-based device (which is also called an inference engine) operates according to rules. For example, a rule may be as follows: "If X happens, do Y." The rule-based device, in executing this rule, would determine whether X happened. If X happened, then the rule-based device would do Y. As shown in FIG. 2A, the rules (or process specifications) are stored in a process specification database 206. Such rule-based devices are well known in the art. The process engine 128 may be implemented as a rule-based device. The combination of the task manager 122 with the process engine 128 enables automatic process generation. Considering the software debugging environment from the first scenario, for example, note that whenever the user discovers a new defect (while testing the software program in the debugger, for example), the user must manually create a new task for the defect (by using the Create function in the Task menu 310). However, if the process engine 128 is used, then the process engine 128 could monitor an external defect tracking system. When a new defect is submitted, the process engine 128 could automatically create a new task for the defect. The process engine 128 would do this as described in Section 8, wherein the process engine 128 would be operating like a collection of agents 126 (since several independent rule sets may be active). Thus, in this case, the rule would be "If a new defect is reported, create a new task for the defect." Another example where dynamic task generation would be useful would be to assist John (from the first scenario) in implementing a complex process in use in his lab. For instance, suppose the process requires that every time a piece of code changes, the relevant documentation must also be updated. According to the first scenario, John must find the correct task template in each case (for modifying code in the code development phase, for instance) and then execute the tasks as specified in the template. The problem here is that there may be several choices for task templates for the same task depending on the portion of the software lifecycle. The burden is on John to correctly set up the components of his process (that is, select the correct templates). Once the process is set up, the task manager 122 will help John manage, execute, and complete the process. However, the process engine 128 would help John set up the process. A primary benefit of using the process engine 128 will be an easily modifiable, declarative process description. Without the process engine, 128, computer-assisted processes can be defined, but they must be hard-coded into encapsulations. Also, any data management services required for managing the task state would have to be reinvented by each encapsulation (for instance, if historical information about tasks were required for making a decision). Note, however, that the task manager 122 need not be modified to operate with the process engine 128. Rather, the process engine 128 communicates with the task manager 122 in the same manner that agents 126 communicate with the task manager 122. Thus, the task manager message interface, as described above, provides sufficient flexibility for the task manager 122 to operate with external entities. The agents 126 and the process engine 128, as described herein, represent only some of the external entities with which the task manager 122 may operate. While various embodiments of the present invention have been described above, it should be understood that they have been presented by way of example only, and not limitation. Thus, the breadth and scope of the present invention should not be limited by any of the above-described exemplary embodiments, but should be defined only in accordance with the following claims and their equivalents.
|
Same subclass Same class Consider this |
||||||||||
