Database model which provides management of custom fields and methods and apparatus therfor

Information

  • Patent Grant
  • 11610053
  • Patent Number
    11,610,053
  • Date Filed
    Thursday, February 25, 2021
    3 years ago
  • Date Issued
    Tuesday, March 21, 2023
    a year ago
Abstract
A data model for managing custom fields for tasks in projects. The custom fields can be defined and shared across an organization, and are always unique. Each type of custom field is an object that is subclass of a generic object. Other objects define attributes of the custom fields and assign values to the attributes. The data model allows the custom fields to be preserved and managed across multiple projects and users.
Description
BACKGROUND

The use of databases to track activity is well known. For example, spreadsheets and other databases have been used for many years to keep track of the status of projects, and specific tasks within the project. More recently, specific software programs and services, referred to as project management or work tracking “tools” herein, have been provided which are focused on project management. Examples of such products and services are ASANA™, SMARTSHEET™, TRELLO™ and WRIKE™.


Each of these tools provides the ability for a user to customize behavior of the tool, to some extent, to fit the specific needs of a user. For example, users may have the need to track different types of data and the need to describe the different data in a way the user can understand. Typically, the tools define projects that have various specific tasks. The tasks are described by field values. Each field may have specific characteristics specified by it data type data type.


For example, one user might want to manage the status of orders and product inventory and another user might be managing the development cycle of a software application. As a result, each tool allows the user to create custom data field names (also referred to as “labels” and “descriptors”) such as “Location”, “Quantity”, “Time”, “Release Date” or any other descriptive label that the user may wish to use. This labeling is rudimentary and very similar to labeling columns in a spreadsheet.


However, project management tools are often used as collaborative tools by a large group of users, such as employees of an organization. The organization may have many projects to manage, each project having many tasks and users. Various users may participate in various projects within the organization. Further, each project may have different characteristics. Therefore, each project may have different data fields and related descriptors. For example, the chart below shows an extremely simple example of data fields for three different projects within an organization.














Project A
Project B
Project C







DUE DATE
DUE DATE
DUE DATE


QUANTITY
LOCATION
VERSION


PRICE
VEHICLE TYPE
STATUS


DELIVERY
CUSTOMER
DEVELOPER


RESPONSIBLE PARTY

RESPONSIBLE PARTY









In the example above, the data field DUE DATE is used by all three projects, and the data field RESPONSIBLE PARTY is used by Project A and C, but not Project B. Also, each project has data fields that are unique from other projects. Further, as noted above, each project can have various users. The number of data fields required for a specific project can be very high and the resulting number of custom data fields across an organization can be even larger, sometimes in the thousands.


Of course, it is desirable to manage the use of custom data fields. For example, if one user creates accustom field for one project, it is desirable to allow other users to use that field in other projects. Conversely, if a field with the label and specific characteristics is created, it can be problematic if a different field is created with the same label and used in a different context. For example, some tool permit users to share custom fields across projects, but they don't have to be unique. Thus, two fields having very different characteristics can both be named “Priority”. For example, one field can be a dropdown list having selections “1”, “2”, or “3” indicating levels of priority and another field can be a checkbox indicating whether or not the task associated with the field is a priority. Other tools allow users to create custom data fields whereby users can have multiple data fields having the same name that have similar or different characteristics. When a user creates a data field, it is distinct from other data fields that may have the same name. On the other hand, a user can edit a data field created by another user. For example, a user may wish to delete a drop option in a data field or otherwise modify the data field. These models for customizing data fields can lead to confusion, inaccuracy, and inefficiency in project management.





BRIEF DESCRIPTION OF THE DRAWING

The invention will be described through embodiments and the attached drawing in which:



FIG. 1 is an example of a user interface displaying a task list;



FIG. 2 is an example of a user interface displaying a task detail;



FIG. 3 is a block diagram of a task object, a custom property proto object and a custom property number value object;



FIG. 4 is a block diagram of project objects, a custom property proto object and custom property project settings objects;



FIG. 5 is a block diagram of a task object, a custom property proto object and a custom property options objects;



FIG. 6 is a flowchart of a method for changing or adding custom filed objects;



FIG. 7 is a user interface displaying a disabled filed indicator;



FIG. 8 is a flowchart of a method for identifying orphaned values;



FIG. 9 is a flowchart of a method for ordering tasks in a task display;



FIG. 10 is a user interface displaying a deleted dropdown menu value; and



FIG. 11 is a computer architecture of a project management system.





DETAILED DESCRIPTION

While devices, methods, apparatuses, and computer-readable media are described herein by way of examples and embodiments, those skilled in the art recognize that devices, methods, apparatuses, and computer-readable media are not limited to the embodiments or drawings described. Rather, the intention is to cover all modifications, equivalents and alternatives falling within the spirit and scope of the appended claims. Any headings used herein are for organizational purposes only and are not meant to limit the scope of the description or the claims. As used herein, the word “may” is used in a permissive sense (i.e., meaning having the potential to) rather than the mandatory sense (i.e., meaning must). Similarly, the words “include,” “including,” and “includes” mean including, but not limited to.


The applicant has developed a data model for managing custom fields in a project management tool whereby custom fields can be defined and shared across an organization, and are always unique. If one employee creates a field for ‘Priority’, anyone else in the organization can use that field on their projects. There can't be more than one ‘Priority’ field within the organization and the attributes of the field will be preserved across projects. Custom fields can be displayed or hidden at the project list level. The data model allows users to choose to show or hide each field on a project. Further, the data model allows advanced search functions for custom fields and allows for reporting across projects. For example, a user can search across multiple projects for all tasks where the field ‘Priority’ is set to ‘High’. As another example, for numeric fields, a report can be generated across projects for specific ranges of numbers. The embodiment can also perform basic aggregations of number fields on tasks. If a user multi-selects 5 tasks, then the number field is summed or charts or other aggregations of the data care created. This works across projects and search reports.


Other field level unique features can be enabled such as unique colors for custom field drop-downs. For example, for the custom field ‘Priority’, a value of ‘High’ can be colored red, a value of ‘Medium’ can be colored yellow and a value of ‘Low’ can be colored green. Such unique features can persist across projects and various views, such as list views and calendar views. Custom fields can be aggregated with multiple projects. For example, if a task is in three projects, and each has custom fields, then the task has all those custom fields with consistent ordering. Because custom fields are shared across an organization and are unique, if a custom field is in multiple of these projects then it only appears once in the task. Also, the data model makes custom fields resistant to “field trampling”—if a user changes another user's custom field, or a task is removed from projects, then the custom field data still exists on the task in a read-only manner. A user can simply reverse these actions to make the field data editable once more. In the novel data model, custom fields can be first-class fields in the API to allow other parties to build integrations that leverage the custom fields.


The disclosed embodiment is achieved through a novel data model in which an independent object is used to represent each custom field (sometimes referred to as a custom “property” herein). The embodiment associates fields with tasks that are part of a project. For each custom field associated with a task, a unique object is created that associates the task with a value for that custom field. This is referred to as a “join object” approach. To aid understanding of the technical advantages resulting from the data model, a very brief description of the user experience is presented immediately below, followed by a more detailed description of the data model.


Custom fields allow users of a project management tool to track work across whatever information is most useful for them. If field names, descriptions, and values are customizable by a user, the user can create a field for anything of interest to the users of a project. The embodiment permits users to create custom fields for just about any data that they want to track in a structured way. The custom fields are then unique and available across a group of users, tasks and projects.


For example, FIG. 1 is a user interface, such as an interactive display on the screen of a computing device, illustrating custom fields for tasks in a project. User interface 100 includes 5 columns, Task Column 110, Stage Column 120, Priority Column 130, Time Required Column 140 and Due Date Column 150. In this example, Task column 110 and Due Date column 150 each define “out of the box” fields that are hardcoded into the software tool. However, Stage Column 120, Priority Column 130, and Time Required Column 140 define custom fields that were created by a user of the software tool. For each task, fields are defined for associated custom fields. For example, the task “Missing screen shot on product page” has a custom field of “Stage” having a value of “Phase 1”. Note that not all tasks in a project will necessarily be associated with any specific custom filed of that project. For example, in FIG. 1, the task “Product update blog post” is not associated with the custom field “Stage” or the custom field “Time Required”. As shown in FIG. 1, these fields can have null values for such unassociated tasks.


Custom fields added to a project can appear in a list view of that project, as shown in FIG. 1, or in the task details of any task. The data model allows fields to be managed at the project level and shown on all tasks in that project. A field created for one project is available to all other projects within the organization. FIG. 2 is a user interface displaying the details of the task “Broken links in help page” of FIG. 1. As an example, the interface of FIG. 2 can be produced by selecting the task form the list of FIG. 1. User interface 200 displays the task at 210, a description of the task at 212 and the values of all custom fields associated with the task at 260.


Turning to the data model, Custom Fields of the embodiment can be divided into two kinds: primitives (like strings, integers, etc. . . . ) and references (other objects in the system). All primitive and reference values are modeled as unique independent objects that associate the task with the value. Additionally, the cardinality of properties may be either scalar (single value) or list (multiple values). For example:

    • A “tracking number” field would use a primitive scalar property (single string value)
    • A “categories” field would use a primitive list property (multiple enum values)
    • An “owner” field would use a reference scalar property (single user value)
    • A “dependencies” field would use a reference list property (multiple task values)


As noted above, tasks in a project can hold user-specified custom fields which provide extra information; for example, a priority value or a number representing the time required to complete a task. This lets a user define the type of information that each task within a project can contain. A custom field is defined by metadata. This metadata is shared across an entire organization or workspace. Projects can have custom fields associated with them individually. This is conceptually akin to adding columns in a database or a spreadsheet: every task (row) in the project (table) can contain information for that field, including “blank” values, i.e. null data. Tasks have custom field values assigned to them.


The invention includes a novel schema. Objects, metadata, and classes are the basic components that are used to build object definitions in the schema. Objects are structures that define the property at the highest level. Attributes, sometimes referred to as “metadata” herein define the information that is stored in an object or in another attribute. As an example, an organization has defined a custom field for “Priority”. This field is of enum type (described below and sometimes referred to as “option” type) and can have user-defined values of Low, Medium, or High. This is the custom field metadata, and it is visible within, and shared across, the entire organization. A project can then be created in the organization, called “Bugs”, and the “Priority” custom field can be associated with that project. This will allow all tasks within the “Bugs” project to have an associated “Priority”. When a new task is created within “Bugs”, the new task will have a field named “Priority” which can take on the custom field value of one of, Low, Medium, or High.


An object definition is an association of attributes that describe the characteristics of an object that stores specific pieces of data. The kind of data that the object stores determines which attributes are needed to define the object. Defining objects and attributes this way gives the schema the ability to efficiently define many different types of objects. Object definitions are categorized into groups that are called classes. Classes act as blueprints that can be used each time a new object is created. When a new object is created, the object's class determines the attributes that are associated with the new object, including which attributes are required and which attributes are optional.


The objects of the data model are constructed in accordance with the following schema. In the embodiment, the suffix “Proto” is used to denote prototypes (definitions) of custom fields, and the suffix “Value” is used for actual instances of the values. The primary objects of the data model are described briefly immediately below.


“Proto”: Stores the metadata about a custom filed. Each different type of custom field has its own subclass of the generic Proto. For example, CustomPropertyNumberProto’ is subclassed from ‘CustomPropertyAbstractProto’, and adds properties that are specific to representing the numeric type in a custom field.


“Value”: An instance of a value of a custom field as it appears on a task (or eventually, other objects in the system that can have custom field values). This is represented as the join between a Proto and the object the custom field is set on. Part of the data in this join is the actual value the custom field takes on. Like Protos, Values are also subclassed based on the type of custom property.


“ProjectSetting”: The join between a Proto and a Project that bestows that Proto upon all of its tasks. There may also be settings specific to the Project, such as whether the custom field should appear in the task list by default, and metadata to determine the ordering of the field in the Project.


“TaskChangedStory”: Stores the metadata about a Value changing on a task. Each different type of custom property has its own subclass of the generic TaskChangedStory. For example, ‘TaskCustomPropertyNumberChangedStory’ is subclassed from


‘TaskCustomPropertyAbstractChangedStory’, and contains properties for the old/new data specific to the numeric type. Each subtype should contain two properties: old_dataname, new_dataname, where dataname is the custom fieldd name for data in the Value object.


“ProtoSubmission”: Stores information on create and edit submissions for custom field protos. Keeps track of the submission status (pending, success, or failure) to keep the edit/create field dialog open on the client until changes propagate. The successful ProtoSubmissions associated with a given proto represents the change history for that proto. All custom field types use the same ProtoSubmission class.


Each Custom Field object of the embodiment has the following fields:













Field
Description







id
1234. Globally unique ID of the custom field.


created_at
′2012-02-22T02:06:58.147Z′. The time at which



this custom field was created.


name
′Priority′. The name of the custom field.


type
′text″enum″number′. The type of the custom field.



Must be one of the given values.


enum_options
[ { id: 789, name: ′Low′, enabled: ′true′, color:



'blue' }, . . . ]. Only relevant for custom fields of



type ‘Enum’. This is described in more detail



below.


precision
Only relevant for custom fields of type ‘Number’.



This field dictates the number of places after the



decimal to round to, i.e. 0 is integer values, 1



rounds to the nearest tenth, and so on.









For each custom field associated with a task, an object is created that associates the task with a value for that custom field. There is a new type of object for each type of property, e.g., CustomPropertyTextValue, CustomPropertyEnumValue, CustomPropertyReferenceValue, “CustomPropertyNumberValue” etc. . . . “Object” refers to the object the property is set on, “property” refers to the CustomPropertyAbstractProto the value is set for and “value’ refers to the actual value of the property. As an alternative to the model described herein in detail, for each property set on a Task, there can be a row in the database just like a normal property (object_id, property_id, value, etc.). For scalars these would automatically be sent from server to client for any projection on an object. Given a projection, a primitive property by ID is set. As another alternative, Join Objects can be used for reference properties, and Property Rows for primitive properties. As yet another alternative, Join objects can be used for reference properties, and a JSON Blob for primitive properties. As illustrated in FIG. 3, a custom property value object 310 assigns a value for a particular proto 320 to a task. In this example, the CustomPropertyNumberValue object assigns the value “1” for “Number of Reports” to the task 330 “Cannot Login.”


As illustrated in FIG. 4, a single custom field (“proto”) can be associated with multiple projects. CustomPropertySetting objects 440 associate a proto to a project. In this example, the CustomPropertyNumberProto “Number of Reports” object 420 is associated with both the Project “Android Bugs” object 450 and the Project “iOS Bugs” object 450 through respective CustomPropertySetting objects 440.


Since custom fields can be defined for many types, and these types have different data and behaviors, there can be fields that are relevant to a particular type but not relevant to other types. For instance, the enum_options object noted above is only relevant for the enum type and defines the set of choices that the enum object could represent. As illustrated in FIG. 5, EnumProto object 520 has multiple options, represented as EnumOption objects 550, in this example EnumOption objects named P1, P2, and P3. These objects have a name and proto reference, along with other metadata (rank for ordering, color for display . . . ). EnumValue object 510, object 123 in this example, associates a particular option to task object 530. In this example option 11 of P2 is associated with the task “Cannot Login”. This model allows for dynamic renaming options.


In the embodiment, custom fields are of one of three types; text, number, and enum. Number fields can have an arbitrary precision associated therewith. For example, a precision of 2 would round its value to the second (hundredths) place, i.e., 1.2345 would round to 1.23. On tasks, the custom field value will have a number_value property to represent this field. Enum fields represent a selection from a list of options. On the metadata, they will contain all the options in an array. Each option has 4 properties:

    • id—the id of this enum option. Note that this is the id of the option—the Custom Field itself has a separate id.
    • name—the name of the option, e.g. “Choice #1”
    • enabled—whether this field is enabled. Disabled fields are not available to choose from when disabled, and are visually hidden in the Asana application, but they remain in the metadata for Custom Field values which were set to the option before the option was disabled.
    • color—a color associated with this choice.


On the task's custom field value, the enum will have an enum_value property which will be the same as one of the choices from the list defined in the custom field metadata.


Custom fields can be accessible via an API through several endpoints at the top level (e.g. /custom_fields and/custom_field_settings) and through calls on workspaces, projects, and tasks resources. The API also provides a way to fetch both the metadata and data which define each custom field, so that a client application may render the proper UI, such as those shown in FIGS. 1 and 2, to display or edit the values. Example API calls are set forth below.


Get the metadata for a custom field of type ‘text’


# Request


curl -H “Authorization: Bearer <personal_access_token>” \


https://app.asana.com/api/1.0/custom_fields/124578


# Response


HTTP/1.1 200


{


“data”: [

    • {
      • “id”: 134679,
        • “created_at”: “2016-07-11T14:29:23.249Z”,
        • “name”: “Owner”,
        • “type”: “text”
        • }
      • ]
    • }


Get the metadata for a custom field of type ‘number’


# Request


curl -H “Authorization: Bearer <personal_access_token>” \


https://app.asana.com/api/1.0/custom_fields/124578


# Response


HTTP/1.1 200


{

    • “data”: [
      • {
        • “id”: 938271,
        • “created_at”: “2016-07-11T14:29:23.249Z”,
        • “name”: “Price”,
        • “type”: “number”,
        • “precision”: 2
      • }
    • ]


}


Get the metadata for a custom field when that field is of type ‘enum’.



















# Request




curl -H ″Authorization: Bearer <personal_access_token>″ \




 https://app.asana.com/api/1.0/custom_fields/124578




 # Response




 HTTP/1.1 200




 {




  ″data″: [




   {




    ″id″: 124578,




    ″created_at″: ″2016-07-11T14:29:23.249Z″,




    ″name″: ″Priority″,




    ″type″: ″enum″,




    ″enum_options″: [




     {




      ″id″: 789,




      ″name″: ″Low″,




      ″enabled″: true,




      ″color″: ″blue″




     },




     {




      ″id″: 208,




      ″name″: ″Medium″,




      ″enabled″: false,




      ″color″: ″yellow″




     },




     {




      ″id″: 439,




      ″name″: ″High″




      ″enabled″: true,




      ″color″: ″red″




     }




    ]




   }




  ]




 }










Return a List of all Custom Fields in a Workspace


As custom fields are shared across a workspace or organization, the workspace can be queried for its list of defined custom fields. Like other collection queries, the fields can be returned as a compact record. The compact record for custom fields can include type as well as id and name.


# Request


curl -H “Authorization: Bearer <personal_access_token>” \


https://app.asana.com/api/1.0/workspaces/14916/custom_fields


# Response


HTTP/1.1 200


{


“data”: [

    • {
      • “id”: 124578,
      • “name”: “Priority”,
      • “type”: “enum”
    • },
    • {
      • “id”: 134679,
      • “name”: “Owner”,
      • “type”: “text”


},

    • “˜ . . . ”
    • ]
    • }


The returned information can describe the custom field metadata—the field's name, its type, and any additional information about the custom field as is appropriate.


As noted above, custom fields are associated with one or more projects. A mapping between a custom field and a Project is handled with a CustomPropertyProject Setting object as discussed above with respect to FIG. 4. This object can contain a reference for each of the custom field and the Project, as well as additional information about the per-Project status of that particular custom field. For example, the metadata is_important can specify if the custom field will appear in the task list of FIG. 1. A Project can also be modified to add a custom field with endpoints. For example, /projects/addCustomFieldSettings and projects/removeCustomFieldSettings can be used to associate and dissociate the custom field and Project. The top-level id of each entry in the custom_fields array is the id of the custom field metadata, as it is the compact representation of this metadata. This can be used to refer to the full metadata by making a request to the/custom_fields/{custom_fields_id} endpoint as described above.


The data model allows the validation of custom filed names across projects when creating or editing custom fields. A custom field name should not be identical to other custom fields in the organization or any reserved names. For example, assume that a user creating a new custom filed want to name the field “Priority.” As the user enters the letters “p”, “r”, “i’ . . . , the user interface will display all custom filed names having that sequence of letters and allow the user to select one of those existing custom fields or edit the names to create a new custom field. Semantic analysis and AI can be used to flag or prevent semantically similar custom fields.


The novel data model described herein, which allows custom fields to be shared across projects results in better operation of a computing system executing project management operations. However, the model also raises some technical issues that need to be dealt with. Resolutions to those issues are described below.


As shown in FIG. 7, when information that is contained in a custom field value loses a logical association with its metadata definition, the value becomes disabled. For example, if the custom field metadata is removed from a Project, or a Task with a custom field is moved to a different Project which does not have the custom field metadata associated with it, a logical association can be lost. In the embodiment, the value remains on the Task, and the custom field metadata can still be found and examined. Moving the Task back under a Project with that Custom Field applied to it or applying the custom field metadata to the current Project will return the Custom Field value to an enabled state. In this scenario, the Custom Field will be re-enabled and editable again. Tasks that are associated with multiple Projects do not become disabled, so long as at least one of the Projects is still associated with the custom field metadata. In other words, Tasks with multiple Projects will retain logically associated to the set of custom field metadata represented by all of their Projects. The API can enforce the same operations on disabled custom field values as on enabled values.


Access to custom fields can be controlled based on user or group permissions. When read access is allowed, Custom field information is returned as described above. When read access is not allowed, no custom_fields property will be returned on Tasks, no custom_field_settings property will be returned on Projects, and requests to the /custom_field_settings and/custom_fields will return an error such as HTTP code 403 (forbidden). When write access is not allowed, all requests that would modify Custom Fields (for example POST to/project/addCustomFieldSettings or writes to the custom_fields property on Tasks) will return and error such as HTTP code 403 (forbidden).



FIG. 6 illustrates a method for managing changes to the data model. At step 610, a request to add or change a custom field is received from a user. At step 620, a CustomPropertyProtoSubmission object is created with the default status of “pending” status and the domain id of the user. At step 630, a CustomPropertyProtoMutations.createOrEdit mutation command is submitted with the id of the newly created submission status object created in step 620. At step 640, the request is validated on the server and the associated submission status is updated to either “error” or “success”. If the status is updated to success the custom field object is created and/or updated. Calling the mutation first in step 630 ensures that all requested changes will have finished propagating before the loading indicator is closed. This also allows the validation logic to be executed on the server, instead of performing the checks on the client which likely will not have all Project information. Querying for the success objects on a given proto allows tracking of the revision history for custom fields.


The validation logic can be configured as is appropriate for the application. As an example, the system can check if the name for this field match other fields, if the name for this field matches any first-class fields, or any special terms that are forbidden, (such as “Name”, “Description”, etc). Matching can include syntactical processing such as ignoring white-space.


The data model also creates the possibility of “orphaned values” that should be addressed. For example, assume that there are two custom fields, “Priority” and “Points”, on a project “A”, and three tasks in that project. If those three tasks have data in them for the two custom fields and if a user removes a task from the project, then it no longer inherits those custom fields. But it is desirable to not lose the data already on those tasks. This problem can occur, for example, when a task is moved to another project, when a task is moved to be a subtask of another task, when a custom filed is removed from project that conferred, or when a project that conferred a custom task is deleted. The embodiment “orphans” the values. In other words, the values are maintained in the data model for the tasks, and the UI is signaled that these fields are no longer inherited by the project. A bubble, or other indicator 710, can be displayed to the user as shown in FIG. 7.



FIG. 8 illustrates a method for determining orphaned values. In step 810, the values the task at issue are loaded. In step 820, two queries are determined. The first query is to find custom field values on the task and the second query is to find custom field Protos on the projects that task. In step 830, the two queries are combined, to associate “values which are bestowed by projects in the task” and “values which are orphaned on the task”.


Given a list of tasks, a user may want to know the custom properties protos available to those tasks. To derive the properties available to a task, the system will need to determine (1) All of the protos bestowed on this task by its projects, ordered by the ProjectSetting's rank and (2) All of the values set on a task, since these can be orphaned. Therefore, a consistent ordering algorithm is desirable to order the display of protos in the UI. With such an algorithm, custom fields will be displayed in a consistent order regardless of the various queries used to produce a task list or other display of task information.



FIG. 9 illustrates an ordering algorithm. In this example, there are two tasks, A and B, contained in to projects, 1 and 2. Note that each task custom field can be ordered within a project based on metadata as described above. At step 910 protos in task A, project 1 are ordered by rank. At step 920, protos in task A, project 2 are ordered by rank. At step 930, protos in task B, project 1 are ordered by rank. At step 940, protos in task B, project 2 are ordered by rank. At step 960, orphaned protos in task A are determined and orphaned protos in task B are determined. In other words, values that are set on a task but having protos the are no longer inherited by projects are determined.


Another problem that arises when managing tasks across projects is the situation when there are multiple existing tasks with a dropdown field and a user edits the dropdown field to remove one of the dropdown field values. For example, assume there are two existing tasks having the custom field “Primary Sales Team” which is a dropdown field having the possible selected values of “New Business”, “SE”, “Manager”, and “Sales Ops”. If one of the tasks has the value of “New Business” associated with the filed “Customer Type” and a user modifies the custom field “Customer Type” to remove the “New Business” value selection, this should be handled in a way that does not lose data but which indicates the newly changed drop down selections.


In the embodiment, the removed field value is archived to preserve the data associated with the task. Specifically, if a dropdown option is archived, the attribute is_archived is set to “true” on the corresponding CustomPropertyEnumOption object. This allows the value to be reserved but handled differently. For example, when showing dropdown options on the UI, all unarchived options on that dropdown can be displayed. If thevalue currently set on the task is an archived option, it can be displayed differently in the UI. For example, FIG. 10 shows a UI displaying the task “An old task” having the archived value of “New Business” which is indicated with a strike through at 1010. When editing dropdown options, a user can “revive” an archived option by adding a new option with the same name. This automatically makes it so all tasks that previously had this option as a value still have that same option as a value.


As noted above, dropdown options are attached to objects in the data model. This yields some very significant user technical advantages. Modifying options causes data on tasks to be continually updated. If a user sets multiple tasks to use option “Red” on dropdown “Color”, and updates the dropdown, then all of those tasks will update accordingly. For example, if a user renames option “Red” to “Rojo”, then the tasks set to “Red” will change to “Rojo”. If a user adds an option color to the option, then all associated tasks will reflect that new color. Reordering options does not “trample” data on existing tasks. For example, there is a dropdown with “Red”, “Green”, “Blue” and a user reorders the options to “Green”, “Red”, “Blue”, existing data on tasks will not change.


“Stories” are a record of changes to the task. Stories can be displayed with a task to show a user how the task has evolved over time and who has interacted with the task. For example, a story can show that Bob created the task, assigned it to Charlie and set the due date as July 15, all on July 1, Alice changed the due date of the task to July 30 on July 7, and Charlie marked the task as complete on July 30.


Suppose a user, Sue, sets a value “hello” for a custom field “Text Field” on a task. And then a second user, Bob, changes that value to “goodbye” on the same task. In this case, the embodiment can show two “shuffle stories” on the task:


1. Sue set Test Field to “hello”.January 9


2. Bob changed Test Field from “hello” to “goodbye”0.3:25 pm


However, if Sue sets the value “hello” and then immediately realizes she was mistaken and changes it to “goodbye”, the embodiment will consolidate these two stories together. When a user sets a custom field, the embodiment does the following. It looks backwards in time from most recent story on a task. If a story by a different user is found first, a new story is created. If a story of the same custom field by the same user is found first, and it was created within the last 24 hours (or any other appropriate time period), the story is updated. Otherwise a new story is created.


As noted above, because fields are preserved across projects, users can search for tasks by custom fields across multiple projects. For example, a user could search for “Tasks assigned to me, where Priority is P1” to find all of their high priority tasks. In the embodiment, this is implemented by adding custom field data, including the field ID and value, to ElasticSearch indexes, or any other type of search index. Elasticsearch is an open source search engine based on Lucene. The embodiment transforms a user-readable query (like “Priority is P1”) to an ElasticSearch query containing the proto ID and option ID (like “{proto_id: 12345, value: 789}”). For exampleThis works across field types, e.g. a user can search by number fields with “Tasks followed by me, where Cost is greater than 1000”. A user can also use custom fields to filter searches and sort project lists by sorting by custom fields under the “view” menu in the list view (see FIG. 1) of any project.



FIG. 11 illustrates an example of a computer architecture that can be used to accomplish the functions disclosed above. The architecture includes server 1120 which can be a web server running Apache or any other server application and which can include one or more computing devices. Client devices 1130, which can include a web client running a browser and which can include one or more computing devices, communicate with server 1130 over a network, such as the Internet. Each device can be a personal computer, a mobile phone or any other computing device(s). Each device can have a processor for executing computer readable instructions and memory for storing computer reabdable instructions in a non-transient manner. Client devices 130 can execute a viewer application, such as a web browser, or a native application to exchange data with server 1120. The various functions noted above can be accomplished on server 1120 or client devices 1130 as appropriate for the specific application. The embodiment take the form of computer executable instructions recorded on non-transient media. Client devices 1130 can be associated with one or more users.


Having described and illustrated the principles of our invention with reference to the described embodiments, it will be recognized that the described embodiment can be modified in arrangement and detail without departing from such principles. It should be understood that the programs, processes, or methods described herein are not related or limited to any particular type of computing environment, unless indicated otherwise. Various types of general purpose or specialized computing environments may be used with or perform operations in accordance with the teachings described herein. Elements of the described embodiment shown in software may be implemented in hardware and vice versa.


In view of the many possible embodiments to which the principles of our invention may be applied, we claim as our invention all such embodiments as may come within the scope and spirit of the following claims and equivalents thereto.

Claims
  • 1. A system configured to manage custom data fields used to define characteristics of tasks, the system comprising: one or more physical processors configured by computer-readable instructions to: define a task object for a task within a project management environment, the project management environment being configured to facilitate interaction by users with the project management environment, the project management environment including tasks assigned to, created by, and/or managed by individual users within the project management environment, the task object including a unique task ID for the task;define a Proto class object specifying metadata for a custom field, the metadata specifying a definition of the custom field, the Proto class object having a unique proto ID;define a Value class object based on a join between the task object and the Proto class object, the Value class object representing the join between the Proto class object and the task object by virtue of the custom field taking on a value for the task in the Value class object in accordance with the definition of the custom field specified by the metadata, wherein the value of the custom field is specified in the Value class object in addition to both the unique task ID so that the value of the custom field stored in the Value class object is assigned to the task, and the unique proto ID so that the value stored in the Value class object is associated with the custom field as defined by the metadata of the Proto class object; andpresent the value for the custom field for the task in a user interface of the project management environment by accessing the Value class object by virtue of the value of the custom field stored in the Value class object being assigned to the task and associated with the custom field as defined b the metadata of the Proto class object.
  • 2. The system of claim 1, wherein the one or more physical processors are further configured by the computer-readable instructions to: define a project object representing a project; anddefine a project setting object including project metadata specifying specific settings, the project setting object representing a join between the project object and the Proto class object.
  • 3. The system of claim 2, wherein the Prato class object is a custom field option proto specifying that a given custom field has selectable value options.
  • 4. The system of claim 1, wherein the Value class object is expressed in a form of a JavaScript Object Notation (JSON) blob.
  • 5. The system of claim 1, wherein the Value class object is expressed in a form of a join object.
  • 6. The system of claim 1, wherein the metadata indicates one or more of a tracking number, a category, an owner, or dependencies.
  • 7. The system of claim 1, wherein the task object has a single property that contains values of all custom fields associated with the task.
  • 8. The system of claim 1, wherein when the task no longer inherits a given custom field because of editing, values for the given custom field in the task are maintained in association with the task.
  • 9. The system of claim 1, wherein the one or more physical processors are further configured by the computer-readable instructions to receive edits to remove a specific selectable value option from a custom field option proto, and set an archive attribute to preserve the specific selectable value option.
  • 10. The system of claim 9, wherein the specific selectable value option is displayed differently in the user interface to indicate that is has been removed.
  • 11. A method to manage custom data fields used to define characteristics of tasks, the method comprising: defining a task object for a task within a project management environment, the project management environment being configured to facilitate interaction by users with the project management environment, the project management environment including tasks assigned to, created by, and/or managed by individual users within the project management environment, the task object including a unique task ID for the task;defining a Proto class object specifying metadata for a custom field, the metadata specifying a definition of the custom field, the Proto class object having a unique proto ID;defining a Value class object based on a join between the task object and the Proto class object, the Value class object representing the join between the Prato class object and the task object by virtue of the custom field taking on a value for the task in the Value class object in accordance with the definition of the custom field specified by the metadata, wherein the value of the custom field is specified in the Value class object in addition to both the unique task ID so that the value of the custom field stored in the Value class object is assigned to the task, and the unique proto ID so that the value stored in the Value class object is associated with the custom field as defined by the metadata of the Proto class object; andpresenting the value for the custom field for the task in a user interface of the project management environment by accessing the Value class object by virtue of the value of the custom field stored in the Value class object being assigned to the task and associated with the custom field as defined by the metadata of the Proto class object.
  • 12. The method of claim 11, further comprising: defining a project object representing a project; anddefining a project setting object including project metadata specifying specific settings, the project setting object representing a join between the project object and the Proto class object.
  • 13. The method of claim 12, wherein the Prato class object is a custom field option proto specifying that a given custom field has selectable value options.
  • 14. The method of claim 11, wherein the Value class object is expressed in a form of a JavaScript Object Notation (JSON) blob.
  • 15. The method of claim 11, wherein the Value class object is expressed in a form of a join object.
  • 16. The method of claim 11, wherein the metadata indicates one or more of a tracking number, a category, an owner, or dependencies.
  • 17. The method of claim 11, wherein the task object has a single property that contains values of all custom fields associated with the task.
  • 18. The method of claim 11, wherein when the task no longer inherits a given custom field because of editing, values for the given custom field in the task are maintained in association with the task.
  • 19. The method of claim 11, further comprising receiving edits to remove a specific selectable value option from a custom field option proto, and setting an archive attribute to preserve the specific selectable value option.
  • 20. The method of claim 19, wherein the specific selectable value option is displayed differently in the user interface to indicate that is has been removed.
US Referenced Citations (470)
Number Name Date Kind
5233687 Henderson, Jr. Aug 1993 A
5524077 Faaland Jun 1996 A
5530861 Diamant Jun 1996 A
5608898 Turpin Mar 1997 A
5611076 Durflinger Mar 1997 A
5623404 Collins Apr 1997 A
5721770 Kohler Feb 1998 A
5983277 Heile Nov 1999 A
6024093 Cron Feb 2000 A
6256651 Tuli Jul 2001 B1
6292830 Taylor Sep 2001 B1
6332147 Moran Dec 2001 B1
6385639 Togawa May 2002 B1
6621505 Beauchamp Sep 2003 B1
6629081 Cornelius Sep 2003 B1
6769013 Frees Jul 2004 B2
6859523 Jilk Feb 2005 B1
7020697 Goodman Mar 2006 B1
7039596 Lu May 2006 B1
7086062 Faour Aug 2006 B1
7349920 Feinberg Mar 2008 B1
7418482 Lusher Aug 2008 B1
7428723 Greene Sep 2008 B2
7640511 Keel Dec 2009 B1
7676542 Moser Mar 2010 B2
7779039 Weissman Aug 2010 B2
7801886 Gabriel Sep 2010 B1
7805327 Schulz Sep 2010 B1
RE41848 Daniell Oct 2010 E
7917855 Satish Mar 2011 B1
7996744 Ojala Aug 2011 B2
7996774 Sidenur Aug 2011 B1
8214747 Yankovich Jul 2012 B1
8314809 Grabowski Nov 2012 B1
8499300 Zimberg Jul 2013 B2
8522240 Merwarth Aug 2013 B1
8527287 Bhatia Sep 2013 B1
8554832 Moskovitz Oct 2013 B1
8572477 Moskovitz Oct 2013 B1
8627199 Handley Jan 2014 B1
8639552 Chen Jan 2014 B1
8700537 Deshpande Apr 2014 B1
8768751 Jakowski Jul 2014 B2
8831879 Stamm Sep 2014 B2
8843832 Frields Sep 2014 B2
8863021 Bee Oct 2014 B1
9009096 Pinckney Apr 2015 B2
9024752 Tumayan May 2015 B2
9143839 Reisman Sep 2015 B2
9152668 Moskovitz Oct 2015 B1
9201952 Chau Dec 2015 B1
9208262 Bechtel Dec 2015 B2
9251484 Cantor Feb 2016 B2
9350560 Hupfer May 2016 B2
9383917 Mouton Jul 2016 B2
9405532 Sullivan Aug 2016 B1
9405810 Smith Aug 2016 B2
9454623 Kaptsan Sep 2016 B1
9514424 Kleinbart Dec 2016 B2
9600136 Yang Mar 2017 B1
9674361 Ristock Jun 2017 B2
9712576 Gill Jul 2017 B1
9785445 Mitsui Oct 2017 B2
9830398 Schneider Nov 2017 B2
9842312 Rosati Dec 2017 B1
9949681 Badenes Apr 2018 B2
9953282 Shaouy Apr 2018 B2
9959420 Kiang May 2018 B2
9978040 Lee May 2018 B2
9990636 Lewis Jun 2018 B1
10001911 Breedvelt-Schouten Jun 2018 B2
10003693 Wolthuis Jun 2018 B2
10083412 Suntinger Sep 2018 B2
10157355 Johnson Dec 2018 B2
10192181 Katkar Jan 2019 B2
10235156 Johnson Mar 2019 B2
10264067 Subramani Apr 2019 B2
10308992 Chauvin Jun 2019 B2
10373084 Kurjanowicz Aug 2019 B2
10373090 Holm Aug 2019 B2
10382501 Malatesha Aug 2019 B2
10455011 Kendall Oct 2019 B2
10496943 De Dec 2019 B2
10594788 Larabie-Belanger Mar 2020 B2
10606859 Smith Mar 2020 B2
10613735 Karpe Apr 2020 B1
10616151 Cameron Apr 2020 B1
10623359 Rosenstein Apr 2020 B1
10671692 Koopman Jun 2020 B2
10684870 Sabo Jun 2020 B1
10706484 Murnock Jul 2020 B1
10785046 Raghavan Sep 2020 B1
10810222 Koch Oct 2020 B2
10846105 Granot Nov 2020 B2
10846297 Smith Nov 2020 B2
10922104 Sabo Feb 2021 B2
10956845 Sabo Mar 2021 B1
10970299 Smith Apr 2021 B2
10977434 Pelz Apr 2021 B2
10983685 Karpe Apr 2021 B2
11082281 Justin Aug 2021 B2
11095468 Pandey Aug 2021 B1
11113667 Jiang Sep 2021 B1
11138021 Rosenstein Oct 2021 B1
11140174 Patel Oct 2021 B2
11204683 Sabo Dec 2021 B1
11212242 Cameron Dec 2021 B2
11263228 Koch Mar 2022 B2
11288081 Sabo Mar 2022 B2
11290296 Raghavan Mar 2022 B2
11327645 Karpe May 2022 B2
11341444 Sabo May 2022 B2
11341445 Cheng May 2022 B1
20020065798 Bostleman May 2002 A1
20020082889 Oliver Jun 2002 A1
20020143594 Kroeger Oct 2002 A1
20030028595 Vogt Feb 2003 A1
20030028616 Aoki Feb 2003 A1
20030036934 Ouchi Feb 2003 A1
20030041317 Sokolov Feb 2003 A1
20030097406 Stafford May 2003 A1
20030097410 Atkins May 2003 A1
20030126001 Northcutt Jul 2003 A1
20030200223 Hack Oct 2003 A1
20030225598 Yu Dec 2003 A1
20030233265 Lee Dec 2003 A1
20030233268 Taqbeem Dec 2003 A1
20040083448 Karsten Apr 2004 A1
20040093290 Doss May 2004 A1
20040093351 Lee May 2004 A1
20040098291 Newburn May 2004 A1
20040125150 Adcock Jul 2004 A1
20040162833 Jones Aug 2004 A1
20040187089 Schulz Sep 2004 A1
20040207249 Baumgartner Oct 2004 A1
20040230447 Schwerin-Wenzel Nov 2004 A1
20040268451 Robbin Dec 2004 A1
20050210394 Crandall Sep 2005 A1
20050216111 Ooshima Sep 2005 A1
20050222971 Cary Oct 2005 A1
20060028917 Wigginton Feb 2006 A1
20060047454 Tamaki Mar 2006 A1
20060085245 Takatsuka Apr 2006 A1
20060095859 Booking May 2006 A1
20060136441 Fujisaki Jun 2006 A1
20060143270 Wodtke Jun 2006 A1
20060167736 Weiss Jul 2006 A1
20060190391 Cullen Aug 2006 A1
20060200264 Kodama Sep 2006 A1
20060218551 Berstis Sep 2006 A1
20060224430 Butt Oct 2006 A1
20060277487 Poulsen Dec 2006 A1
20070016646 Tendjoukian Jan 2007 A1
20070025567 Fehr Feb 2007 A1
20070038494 Kreitzberg Feb 2007 A1
20070041542 Schramm Feb 2007 A1
20070050225 Leslie Mar 2007 A1
20070073575 Yomogida Mar 2007 A1
20070143169 Grant Jun 2007 A1
20070147178 Masuda Jun 2007 A1
20070150327 Dromgold Jun 2007 A1
20070232278 May Oct 2007 A1
20070255674 Mahoney Nov 2007 A1
20070255715 Li Nov 2007 A1
20070260499 Greef Nov 2007 A1
20070288283 Fitzpatrick Dec 2007 A1
20070294344 Mohan Dec 2007 A1
20080033777 Shukoor Feb 2008 A1
20080046471 Moore Feb 2008 A1
20080079730 Zhang Apr 2008 A1
20080082389 Gura Apr 2008 A1
20080082956 Gura Apr 2008 A1
20080091782 Jakobson Apr 2008 A1
20080120129 Seubert May 2008 A1
20080126930 Scott May 2008 A1
20080134069 Horvitz Jun 2008 A1
20080155547 Weber Jun 2008 A1
20080158023 Chung Jul 2008 A1
20080167937 Coughlin Jul 2008 A1
20080175104 Grieb Jul 2008 A1
20080195964 Randell Aug 2008 A1
20080221946 Balon Sep 2008 A1
20080222566 Daughtrey Sep 2008 A1
20080244582 Brown Oct 2008 A1
20080268876 Gelfand Oct 2008 A1
20080270198 Graves Oct 2008 A1
20080281665 Opaluch Nov 2008 A1
20080313004 Ryan Dec 2008 A1
20090048986 Anderson Feb 2009 A1
20090055796 Springborn Feb 2009 A1
20090076878 Woerner Mar 2009 A1
20090089133 Johnson Apr 2009 A1
20090094623 Chakra Apr 2009 A1
20090113310 Appleyard Apr 2009 A1
20090133027 Gunning May 2009 A1
20090167553 Hong Jul 2009 A1
20090187454 Khasin Jul 2009 A1
20090199192 Laithwaite Aug 2009 A1
20090204463 Burnett Aug 2009 A1
20090204471 Elenbaas Aug 2009 A1
20090234699 Steinglass Sep 2009 A1
20090241053 Augustine Sep 2009 A1
20090260010 Burkhart Oct 2009 A1
20090287523 Lau Nov 2009 A1
20090296908 Lee Dec 2009 A1
20090299803 Lakritz Dec 2009 A1
20090307319 Dholakia Dec 2009 A1
20100005087 Basco Jan 2010 A1
20100070888 Watabe Mar 2010 A1
20100088137 Weiss Apr 2010 A1
20100106627 O'Sullivan Apr 2010 A1
20100114786 Aboujaoude May 2010 A1
20100115523 Kuschel May 2010 A1
20100122334 Stanzione May 2010 A1
20100131860 Dehaan May 2010 A1
20100145801 Chekuri Jun 2010 A1
20100169146 Hoyne Jul 2010 A1
20100169802 Goldstein Jul 2010 A1
20100180212 Gingras Jul 2010 A1
20100223575 Leukart Sep 2010 A1
20100269049 Fearon Oct 2010 A1
20100299171 Lau Nov 2010 A1
20100312605 Mitchell Dec 2010 A1
20100313151 Wei Dec 2010 A1
20110015961 Chan Jan 2011 A1
20110022662 Barber-Mingo Jan 2011 A1
20110054968 Galaviz Mar 2011 A1
20110055177 Chakra Mar 2011 A1
20110060720 Devereux Mar 2011 A1
20110071878 Gingras Mar 2011 A1
20110071893 Malhotra Mar 2011 A1
20110072372 Fritzley Mar 2011 A1
20110093538 Weir Apr 2011 A1
20110093619 Nelson Apr 2011 A1
20110113365 Kimmerly May 2011 A1
20110154216 Aritsuka Jun 2011 A1
20110161128 Barney Jun 2011 A1
20110184768 Norton Jul 2011 A1
20110270644 Roncolato Nov 2011 A1
20110302521 Jiang Dec 2011 A1
20110307100 Schmidtke Dec 2011 A1
20110307772 Lloyd Dec 2011 A1
20120030194 Jain Feb 2012 A1
20120035942 Graupner Feb 2012 A1
20120066030 Limpert Mar 2012 A1
20120066411 Jeide Mar 2012 A1
20120072251 Mircean Mar 2012 A1
20120079449 Sanderson Mar 2012 A1
20120110087 Culver May 2012 A1
20120117499 Mori May 2012 A1
20120123835 Chu May 2012 A1
20120131191 May May 2012 A1
20120158946 Shafiee Jun 2012 A1
20120192086 Ghods Jul 2012 A1
20120221963 Motoyama Aug 2012 A1
20120239451 Caligor Sep 2012 A1
20120254218 Ali Oct 2012 A1
20120266068 Ryman Oct 2012 A1
20120278388 Kleinbart Nov 2012 A1
20120296993 Heyman Nov 2012 A1
20120304187 Maresh Nov 2012 A1
20120317108 Okazaki Dec 2012 A1
20130007332 Teh Jan 2013 A1
20130013560 Goldberg Jan 2013 A1
20130014023 Lee Jan 2013 A1
20130018688 Nudd Jan 2013 A1
20130021629 Kurilin Jan 2013 A1
20130066944 Laredo Mar 2013 A1
20130067375 Kim Mar 2013 A1
20130067549 Caldwell Mar 2013 A1
20130073328 Ehrler Mar 2013 A1
20130103412 Nudd Apr 2013 A1
20130124638 Barreto May 2013 A1
20130151421 Van Der Ploeg Jun 2013 A1
20130151604 Ranade Jun 2013 A1
20130173486 Peters Jul 2013 A1
20130179208 Chung Jul 2013 A1
20130179799 Savage Jul 2013 A1
20130215116 Siddique Aug 2013 A1
20130227007 Savage Aug 2013 A1
20130246110 Nakhayi Ashtiani Sep 2013 A1
20130246399 Schneider Sep 2013 A1
20130275229 Moganti Oct 2013 A1
20130279685 Kohler Oct 2013 A1
20130317871 Kulkarni Nov 2013 A1
20130321467 Tappen Dec 2013 A1
20130339099 Aidroos Dec 2013 A1
20130339831 Gulanikar Dec 2013 A1
20140007005 Libin Jan 2014 A1
20140012603 Scanlon Jan 2014 A1
20140025767 De Kezel Jan 2014 A1
20140036639 Taber Feb 2014 A1
20140040780 Artzt Feb 2014 A1
20140040905 Tadanobu Feb 2014 A1
20140058801 Deodhar Feb 2014 A1
20140059910 Norton Mar 2014 A1
20140074536 Meushar Mar 2014 A1
20140081685 Thacker Mar 2014 A1
20140089719 Daum Mar 2014 A1
20140101310 Savage Apr 2014 A1
20140156539 Brunet Jun 2014 A1
20140165001 Shapiro Jun 2014 A1
20140172478 Vadasz Jun 2014 A1
20140189017 Prakash Jul 2014 A1
20140200944 Henriksen Jul 2014 A1
20140208325 Chen Jul 2014 A1
20140215344 Ligman Jul 2014 A1
20140229609 Wong Aug 2014 A1
20140236663 Smith Aug 2014 A1
20140244334 De Aug 2014 A1
20140257894 Melahn Sep 2014 A1
20140279294 Field-Darragh Sep 2014 A1
20140288987 Liu Sep 2014 A1
20140310047 De Oct 2014 A1
20140310051 Meng Oct 2014 A1
20140350997 Holm Nov 2014 A1
20140364987 Shikano Dec 2014 A1
20150006448 Gupta Jan 2015 A1
20150007058 Wooten Jan 2015 A1
20150012330 Sugiura Jan 2015 A1
20150052437 Crawford Feb 2015 A1
20150058053 De Feb 2015 A1
20150113540 Rabinovici Apr 2015 A1
20150134393 De May 2015 A1
20150153906 Liao Jun 2015 A1
20150213411 Swanson Jul 2015 A1
20150215256 Ghafourifar Jul 2015 A1
20150262111 Yu Sep 2015 A1
20150312375 Valey Oct 2015 A1
20150317595 De Nov 2015 A1
20150339006 Chaland Nov 2015 A1
20150363092 Morton Dec 2015 A1
20150363733 Brown Dec 2015 A1
20150379472 Gilmour Dec 2015 A1
20160012368 O'Connell Jan 2016 A1
20160034844 Kofman Feb 2016 A1
20160048408 Madhu Feb 2016 A1
20160048786 Fukuda Feb 2016 A1
20160063192 Johnson Mar 2016 A1
20160063449 Duggan Mar 2016 A1
20160072750 Kass Mar 2016 A1
20160092045 Lamas Mar 2016 A1
20160110670 Chatterjee Apr 2016 A1
20160124775 Ashtiani May 2016 A1
20160140474 Vekker May 2016 A1
20160140501 Figlin May 2016 A1
20160147773 Smith May 2016 A1
20160147846 Smith May 2016 A1
20160148157 Walia May 2016 A1
20160180277 Skiba Jun 2016 A1
20160180298 McClement Jun 2016 A1
20160182311 Borna Jun 2016 A1
20160188145 Vida Jun 2016 A1
20160216854 McClellan Jul 2016 A1
20160224939 Chen Aug 2016 A1
20160234391 Wolthuis Aug 2016 A1
20160275436 Kurjanowicz Sep 2016 A1
20160313934 Isherwood Oct 2016 A1
20160328217 Hagerty Nov 2016 A1
20160342927 Reznik Nov 2016 A1
20170004213 Cunico Jan 2017 A1
20170009387 Ge Jan 2017 A1
20170017364 Kekki Jan 2017 A1
20170017924 Kashiwagi Jan 2017 A1
20170039503 Jones Feb 2017 A1
20170061341 Haas Mar 2017 A1
20170068933 Norton Mar 2017 A1
20170093874 Uthe Mar 2017 A1
20170099296 Fisher Apr 2017 A1
20170103369 Thompson Apr 2017 A1
20170116552 Deodhar Apr 2017 A1
20170132200 Noland May 2017 A1
20170153799 Hoyer Jun 2017 A1
20170154024 Subramanya Jun 2017 A1
20170177671 Allgaier Jun 2017 A1
20170185592 Frei Jun 2017 A1
20170192642 Fishman Jul 2017 A1
20170206217 Deshpande Jul 2017 A1
20170249577 Nishikawa Aug 2017 A1
20170316367 Candito Nov 2017 A1
20170317898 Candito Nov 2017 A1
20170323233 Bencke Nov 2017 A1
20170323267 Baek Nov 2017 A1
20170323350 Laderer Nov 2017 A1
20170344754 Kumar Nov 2017 A1
20170346861 Pearl Nov 2017 A1
20170351385 Ertmann Dec 2017 A1
20180032524 Byron Feb 2018 A1
20180052943 Hui Feb 2018 A1
20180053127 Boileau Feb 2018 A1
20180059910 Wooten Mar 2018 A1
20180060785 Carnevale Mar 2018 A1
20180060818 Ishiyama Mar 2018 A1
20180063063 Yan Mar 2018 A1
20180068271 Abebe Mar 2018 A1
20180075387 Kulkarni Mar 2018 A1
20180088754 Psenka Mar 2018 A1
20180089625 Rosati Mar 2018 A1
20180095938 Monte Apr 2018 A1
20180102989 Borsutsky Apr 2018 A1
20180131649 Ma May 2018 A1
20180157477 Johnson Jun 2018 A1
20180165610 Dumant Jun 2018 A1
20180173386 Adika Jun 2018 A1
20180189706 Newhouse Jul 2018 A1
20180189736 Guo Jul 2018 A1
20180225795 Napoli Aug 2018 A1
20180247352 Rogers Aug 2018 A1
20180260081 Beaudoin Sep 2018 A1
20180262620 Wolthuis Sep 2018 A1
20180285471 Hao Oct 2018 A1
20180316636 Kamat Nov 2018 A1
20180331842 Faulkner Nov 2018 A1
20180357049 Epstein Dec 2018 A1
20180367477 Hariram Dec 2018 A1
20180367483 Rodriguez Dec 2018 A1
20180373804 Zhang Dec 2018 A1
20190005048 Crivello Jan 2019 A1
20190014070 Mertvetsov Jan 2019 A1
20190018552 Bloy Jan 2019 A1
20190034057 Rudchenko Jan 2019 A1
20190068390 Gross Feb 2019 A1
20190079909 Purandare Mar 2019 A1
20190080289 Kreitler Mar 2019 A1
20190095839 Itabayashi Mar 2019 A1
20190095846 Gupta Mar 2019 A1
20190102700 Babu Apr 2019 A1
20190138583 Silk May 2019 A1
20190138589 Udell May 2019 A1
20190138961 Santiago May 2019 A1
20190139004 Vukovic May 2019 A1
20190147386 Balakrishna May 2019 A1
20190187987 Fauchère et al. Jun 2019 A1
20190213509 Burleson Jul 2019 A1
20190265821 Pearl Aug 2019 A1
20190340296 Cunico Nov 2019 A1
20190340574 Ekambaram Nov 2019 A1
20190347094 Sullivan Nov 2019 A1
20190347126 Bhandari Nov 2019 A1
20190370320 Kalra Dec 2019 A1
20200019907 Notani Jan 2020 A1
20200059539 Wang Feb 2020 A1
20200065736 Relangi Feb 2020 A1
20200162315 Siddiqi May 2020 A1
20200192538 Karpe Jun 2020 A1
20200192908 Smith Jun 2020 A1
20200193556 Jin Jun 2020 A1
20200218551 Sabo Jul 2020 A1
20200228474 Cameron Jul 2020 A1
20200233879 Papanicolaou Jul 2020 A1
20200244611 Rosenstein Jul 2020 A1
20200328906 Raghavan Oct 2020 A1
20200344253 Kurup Oct 2020 A1
20210004380 Koch Jan 2021 A1
20210004381 Smith Jan 2021 A1
20210097466 Sabo Apr 2021 A1
20210103451 Sabo Apr 2021 A1
20210110347 Khalil Apr 2021 A1
20210136012 Barbitta May 2021 A1
20210182475 Pelz Jun 2021 A1
20210216562 Smith Jul 2021 A1
20210232282 Karpe Jul 2021 A1
20210320891 Rosenstein Oct 2021 A1
20210342786 Jiang Nov 2021 A1
20210382734 Rosenstein Dec 2021 A1
20220019320 Sabo Jan 2022 A1
20220058548 Garg Feb 2022 A1
20220075792 Koch Mar 2022 A1
20220078142 Cameron Mar 2022 A1
20220158859 Raghavan May 2022 A1
Foreign Referenced Citations (6)
Number Date Country
101305350 Nov 2008 CN
101563671 Oct 2009 CN
102378975 May 2015 CN
2015036817 Mar 2015 WO
2015123751 Aug 2015 WO
2020006634 Jan 2020 WO
Non-Patent Literature Citations (49)
Entry
Devon Watts and Nick Fassler, “Now rolling out in beta: Track anything in Asana, with custom fields”, publisher: Asana, published: Jul. 12, 2016, pp. 1-7 (Year: 2016).
Dawei Li, “Deepcham: Collaborative Edge-Mediated Adaptive Deep Learning for Mobile Object Recognition”, 2016, IEEE/ACM, pp. 64-76. (Year: 2016).
Asset, F., Cassius, T. S., & Maria, T. S. (2018). Confrontation between techniques of time measurement. Journal of Manufacturing Technology Management, 29(5), 789-810. (Year: 2018).
(Tiburca, Andrew) Best Team Calendar Applications for 2018—Toggl https://toggl.com/blog/best-team-calendar-applications-for-2018 (Year: 2017).
Lauren Labrecque, “Fostering Consumer-Brand Relationships in Social Media Environments: The Role of Parasocial Interaction”, 2014, Journal of Interactive Markeing, 28 (2014), pp. 134-148 (Year: 2014).
Macro, computer science, Wikipedia, archives org Feb. 11, 2020 http://web.archive.org/web/20200211082902/https://en.wikipedia.org/wiki/Macro_(computer_science) (Year: 2020).
Paul Minors, How to automate your tasks, youtube excerpts, Oct. 18, 2019 https://www.youtube.com/watch?v=IwF9XyUQrzw (Year: 2019).
Mauricio Aizawa, Zapier, How to Automate Asana Tasks creation using Evernote, youtube excerpts, Mar. 16, 2018 https://www.youtube.com/watch?v=BjDQ4Gny4WI (Year: 2018).
“U.S. Appl. No. 14/584,750, Examiner Interview Summary dated Feb. 25, 2016”, 3 pgs.
“U.S. Appl. No. 14/584,750, Non Final Office Action dated Aug. 28, 2015”, 21 pgs.
“U.S. Appl. No. 14/584,750, Notice of Allowance dated Mar. 28, 2016”, 8 pgs.
“U.S. Appl. No. 14/584,750, Response filed Feb. 29, 2015 to Non Final Office Action dated Aug. 28, 2015”, 16 pgs.
“U.S. Appl. No. 14/584,850, Final Office Action dated Sep. 1, 2017”, 31 pgs.
“U.S. Appl. No. 14/584,850, Non Final Office Action dated Jan. 10, 2017”, 9 pgs.
“U.S. Appl. No. 14/584,850, Response filed Apr. 10, 17 to Non Final Office Action dated Jan. 10, 2017”, 13 pgs.
“How to Asana: Inviting teammates to Asana.” YouTube, Asana, Mar. 21, 2017, https://www.youtube.com/watch?v=TLOruY1KyxU (Year: 2017), 13 pages.
“Rules of Data Conversion from Document to Relational Databases”, published: 2014, publisher: Future-processing, pp. 1-8 (Year: 2014).
Asana Demo and Product Tour, you tube excerpt, Dec. 7, 2017 https://www.youtube.com/watch?v=IMAFWVLGFyw (Year: 2017) (16 pages).
Asana integrations, Asana tutorial, youtube, excerpt, Nov. 16, 2016 https://www.youtube.com/watch?v=hBiQ7DJNinE (Year: 2016) (21 pages).
Asana Workload and Portfolios,youtube,excerpt, Aug. 1, 2019 https://www.youtube.com/watch?v=7XkNcfFDG6M (Year: 2019) (20 pages).
Asana YouTube channel, list of all product videos, Nov 19, 2014-Aug. 19, 2019 https://www.youtube.com/user/AsanaTeam/videos?disable_polymer=1 (Year: 2019) (5 pages).
Asana, Task dependencies, archives org, Aug. 25, 2017 https://web.archive.org/web/20170825002141/https://asana.com/guide/help/tasks/dependencies (Year: 2017) (5 pages).
Asana,Manage your team capacity with Workload, youtube, excerpt, Aug. 1, 2019 https://www.youtube.com/watch?v=2ufXyZDzZnA&list=PLJFG93oi0wJAi UwyOhIGWHdtJzJrzyIBv (Year: 2019) (1 page).
Biggs, “GateGuru Relaunches With New Ways to Streamline Your Travel Experience”, Techcrunch, (Apr. 26, 2013), 3 pgs.
Castaneda Samuel, Introduction Manual—Asana, Sep. 25, 2017 https://static1.squarespace.com/static/586d532ae58c6232db243a65/t/5c210c10f950b7fc7a8e3274/1545669658049/Asana+Manual.pdf (Year: 2017) (20 pages).
Command and control, Wikipedia, archives org, Mar. 16, 2018 https://web.archive.org/web/20180316193655/https://en.wikipedia.org/wiki/Command_and_control (Year: 2018), 6 pages.
Creating Tables with Fields from 2 Different Tables, published: 2009, publisher: StackOverflow, pp. 1-2. (Year: 2009).
Critical chain project management, Wikipedia, archives org, Dec. 17, 2016 https://web.archive.org/web/20161217090326/https://en.wikipedia.org/wiki/Critical_chain_project_management (Year: 2016) 5 pages.
Critical Path Method, Wikipedia, archives org, Sep. 19, 2017 https://web.archive.org/web/20170919223814/https://en.wikipedia.org/wiki/Critical_path_method (Year: 2017) 6 pages.
Fruhlinger, Joshua. “The Best To-Do ListApps for Feeling Productive; With the right app, feeling productive can be just as gratifying as actually getting things done” Wall Street Journal (Online); New York, N.Y. [New York, N.Y]Nov. 8, 2013 (Year: 2013) 4 pages.
Helen Mongan-Rallis & Terrie Shannon, “Synchronous Chat,” Aug. 2016, Dept. of Education, Univ. of MN Duluth, web.archive.org/web/20160825183503/https://www.d.umn.edu/hrallis/professional/presentations/cotfsp06/indiv_tools/sync_chat.htm (Year: 2016) (2 pages).
How to Asana Asana time tracking, youtube, excerpt, May 24, 2017 https://www.youtube.com/watch?v=z91qlex-TLc (Year: 2017) (1 page).
How to Asana, Asana project management, youtube, excerpt, Mar. 7, 2017 https://www.youtube.com/watch?v=qqANMTvVpE (Year: 2017) (28 pages).
How to Asana, Creating your first Asana project, youtube, excerpt, Jan. 31, 2017 https://www.youtube.com/watch?v=L04WmcUdsLo (Year: 2017) (1 page).
How to Asana, Getting Asana into your workflow, youtube, excerpt, Jul. 17, 2017 https://www.youtube.com/watch?v=7YLrNMdv3o (Year: 2017) (24 pages).
How to Asana, Planning with Asana calendar, youtube excerpt, Feb. 14, 2017 https://www.youtube.com/watch?v=w8t6KYiVPyc (Year: 2017) (19 pages).
How to Asana, Using Asana for task management, youtube, excerpt, Feb. 7, 2017 https://www.youtube.com/watch?v=vwvbgiejhQ (Year: 2017) (8 pages).
How to Asana, Visualizing work with Asana kanban boards, youtube, excerpt, Feb. 21, 2017 https://www.youtube.com/watch?v=jmZaZGydfPY (Year: 2017) (41 pages).
How to Asana, Workflow management, youtube, excerpt, May 30, 2017 https://www.youtube.com/watch?v=rk8nPWmXsRo (Year: 2017) (9 pages).
How to use Advanced Search in Asana, Asana tutorial, May 25, 2016 https://www.youtube.com/watch?v=5VyJ3toPfQM (Year: 2016) (28 pages).
Justin Rosenstein, Unveiling the Future of Asana, Mar. 28, 2018 https://www.youtube.com/watch?v=nRI?d_WM4Bc (Year: 2018) (2 pages).
Prioritize My Tasks in Asana, Asana tutorial, youtube, excerpt, May 25, 2016 https://www.youtube.com/watch?v=UbCnMvw01nl (Year: 2016) (3 pages).
Project views, Asana tutorial, youtube, excerpt May 25, 2016 https://www.youtube.com/watch?v=FYjA8ZH3ceQ (Year: 2016) (5 pages).
Using Asana Premium, Asana tutorial, youtube, excerpt, Sep. 10, 2016 https://www.youtube.com/watch?v=vMgLtDDmyeo (Year: 2016) (4 pages).
Where does Asana fit in, archives org, Jul. 8, 2017 https://web.archive.org/web/20170708150928/https://asana.com/guide/resources/infosheets/where-does-asana-fit (Year: 2017) (5 pages).
Wix.Com, How to Use Wix Code with Marketing Tools to Create Custom Events, Oct. 18, 2018, YouTube, https://www.youtube.com/watch?v=MTBVykOYGvO&feature=emb_title, 2 pages.
www.asana.com (as retrieved from https://web.archive.Org/web/20160101054536/https://asana.com/press and https://web.archive.org/web/20160101054527/https://asana.com/product) (Year: 2016) 15 pages.
www.cogmotive.com/blog/author/alan Alan Byrne: “Creating a company Shared Calendar in Office 365”; pp. 1-17; Sep. 10, 2013.
Hartmann, “TimeProjectscheduling with resource capacities and requests varying with time: a case study,” 2013, Flexible services and manufacturing journal, vol. 25, No. 1, pp. 74-93 (Year: 2013).
Related Publications (1)
Number Date Country
20210182475 A1 Jun 2021 US
Continuations (1)
Number Date Country
Parent 15646310 Jul 2017 US
Child 17184964 US