Additional Project Meta-data
Overview:
Add additional properties to Project.net projects to capture missing information about the projects, such as project charter or project initiative. Ideally, customers would be able to define what company-specific meta-data to collect.
Customer issue or problem:
When managing a portfolio of projects, customers use a variety of information to help group and classify projects, such as project risk or what area of the company is funding the project. They use this information organize projects when deciding which projects to approve or when monitoring projects. Currently, Project.net’s list of project properties is too limited and there is no way to expand the list.
Description:
Here is a complete list of project properties for Project.net. Existing project properties are shown in normal font; new or altered properties are shown in italics.
| Property | Description | Type | Size |
| GENERAL | |||
| Support code | System-assigned project identifier | Read-only integer | No change |
| Project Name | User-defined project name | String | No change |
| Brief Description | Project description | String | No change |
| Project ID | User-defined project identifier | String | 0 – 25? characters |
| Business Owner | What business, if any, owns the project | System-supplied drop-down menu of qualified businesses | No change |
| Subproject of | Parent project, if any | System-supplied drop-down menu of qualified projects | No change |
| Project Sponsor | A person or entity, generally a high-level champion | String | No change |
| Project Manager | Person’s name | String | 0 – 25? characters |
| Program Manager | Person’s name | String | 0 – 25? characters |
| Initiative | A project may be part of a larger undertaking, called an initiative. For example, creating in-store displays and newspaper ads may be two separate projects, both related to a Christmas sales initiative. This property allows customers to filter for all projects related to a particular initiative. | String | 0 – 25? characters |
| Functional Area: | General area of the company to which the project is associated | Drop-down menu of pre-defined areas | Administration, Manufacturing, Marketing, R&D, Sales, Services |
| Priority | Numeric indicator of the priority of a project | Integer | 0-?? |
| Risk Rating | Numeric indicator of the riskiness of a project | Integer | 0-?? |
| Project Charter | Textual description of the purpose & direction for the project | String (text box) | 0-?? characters |
| PROJECT STATUS | |||
| Start Date: | Planned start date | Date (manually entered by the user or optionally extracted from the workplan) | No change |
| End Date: | Planned end date | Date (manually entered by the user or optionally extracted from the workplan) | No change |
| Project Completion | Project completion calculation method | Percentage (manually entered by the user or optionally extracted from the workplan) | No change |
| Overall Status: | Indicator of the current status of a project | Drop-down menu of pre-defined status | Not started, In Process, On Hold, Completed, Proposed, In Planning |
| Overall color code | Indicator of the overall health of a project | Radio buttons with pre-defined values | Green, Yellow, Red |
| Overall improvement code | Indicator whether a project is improving or declining. | Drop-down menu of pre-defined status | Improving, No Change, Worsening |
| Financial status color code | ndicator whether a project is within budget. | Radio buttons with pre-defined values | Green, Yellow, Red, None |
| Financial status improvement code | Indicator whether a project’s finances are improving or declining. | Drop-down menu of pre-defined status | Improving, No Change, Worsening |
| Schedule status color code | Indicator whether a project is on schedule. | Radio buttons with pre-defined values | Green, Yellow, Red, None |
| Schedule status improvement code | Indicator whether a project’s schedule is improving or declining. | Drop-down menu of pre-defined status | Improving, No Change, Worsening |
| Resource status color code | Indicator whether a project has the resources it needs | Radio buttons with pre-defined values | Green, Yellow, Red, None |
| Resource status improvement code | Indicator whether a project’s resource needs are being met. | Drop-down menu of pre-defined status | Improving, No Change, Worsening |
| Current Status description | Narrative of the current state of a project. | String | No change |
| FINANCIAL | |||
| Default currency | Denomination of the currency used in the project | Pre-defined drop-down of currency denominations | No change |
| Type of expense | Whether the cost of this project is considered a capital or current expense. | Drop-down menu of pre-defined expense classifications | Capital Expense, Current Expense, Deductible Expense |
| Budgeted total cost | Amount budgeted to complete the project | Currency | No change |
| Current estimated total cost | Estimated cost of the project | Currency | No change |
| Actual Cost To Date | Amount spent to date | Currency | No change |
| Estimated ROI | Rate of Return | Percent | 0 – 999% |
| Cost Center | Which account is paying for this project | String | No change |
| MISCELLANEOUS |
Features
Must Have
- Fields to capture the properties shown in blue in the table above.
- Note, the properties above are organized in related groups
- The option to extract the Planning Start and End Dates automatically from the project work plan, if any, in addition to the current method of setting the dates manually.
Desired
- Customer-defined fields (it is OK if adding these fields requires a user with application administration capabilities)
- "Estimated ROI" is currently defined as a currency amount. It should be a percentage.
Implementation
Additional properties are accessed via special class - MetaData.java. It has the following methods:
public String getProperty(String propertyName) throws NoSuchPropertyException; public String getPropertyType(String propertyName) throws NoSuchPropertyException; public void setProperty(String propertyName, String propertyValue) throws NoSuchPropertyException; public List getPropertyNames();
This class uses the following db tables:
Table1 (pn_project_space_meta_prop):
| Property_ID | number (primary key) |
| PropertyName | varchar |
| PropertyType | number |
Table2 (pn_project_space_meta_value):
| Project_ID | number (foreign key) |
| Property_ID | number (foreign key) |
| PropertyValue | varchar |
The PropertyName is an internal name, it is used to get/set properties via MetaData class. You can think of it like it is a ProjectSpace's field name; this name will not appear in the UI.
Table3 (pn_project_space_meta_value):
| Property_ID | number (foreign key) |
| Combo_Label | varchar |
| Combo_Value | varchar |
For this table we are going to store all the values of the combos that the project properties has. So we can start changing the purpose of this combos and theirs values whenever we want it with a script that we have develop for every customer request.
The script is the following one and is under the SVN structure under db/tools and it is called: change_combo_project_space_values.sql. Inside of this script we can change the tokens of all the pages that are being involved if we change those combos meanings and also we can change the values inside all the combos.
There are also helper methods to convert the property values to/from strings to the objects corresponding to their types (numbers, etc.) and to introduce the new properties.
Using such scheme, the addition of new properties is very easy - the new properties can be introduced without recompiling the application. The ProjectSpace class is kept cleaner (this can be very convenient as additional properties are not needed for all Pnet users). We can use lazy initialization of the MetaData class, thus there will be no performance overhead when the additional properties are not used.
Attachments
- projectScript.sql (2.6 kB) -
This script is going to be used to change the combo values.
, added by tincholiguori on 08/25/08 16:42:50.
