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_IDnumber (primary key)
PropertyNamevarchar
PropertyTypenumber

Table2 (pn_project_space_meta_value):

Project_IDnumber (foreign key)
Property_IDnumber (foreign key)
PropertyValuevarchar

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_IDnumber (foreign key)
Combo_Labelvarchar
Combo_Valuevarchar

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