This content is outdated and is no longer being maintained. It is provided as a courtesy for individuals who are still using these technologies. This page may contain URLs that were valid when originally published, but now link to sites or pages that no longer exist.
The Deliverables feature in Microsoft Office Project Professional 2007 is a simpler and improved way to manage dependencies between projects and cross-project links. Project managers can use Project Professional 2007 to manage deliverables in the following ways:
Create deliverables between projects.
Consume deliverables: that is, include deliverables of other projects as milestones in a new project plan, and control the schedule impact.
Monitor deliverables of a project to external projects.
Receive a notification when a relevant deliverable changes.
Create reports of project deliverables and status compared to project schedules.
Deliverables are stored in a custom list in the project workspace site in Microsoft Windows SharePoint Services. By default, if a deliverable is linked to a task, the deliverable dates do not change when the task dates change. The default behavior allows a project manager to maintain deliverable dates independently from task dates, which can have many small changes over the course of a project. Deliverables are commonly published to a large audience. To create or manage deliverables, you can click Manage Deliverables in the Collaborate menu to show the Deliverables pane. To help automate deliverables with VBA, see Example for Creating and Updating Deliverables.
The Project Professional 2007 object model includes new methods and properties to view, create, and consume deliverables for the current project. Project Professional in turn calls Windows SharePoint Services for deliverable lists. Project Standard 2007 does not include deliverables, because they involve multiple projects that must be published on Project Server.
Following are the new object model items for deliverables. The class members are described in Table 2, and the enumerations are described in Table 3, in Tables of VBA Object Model Changes.
The Deliverables feature was called Commitments in some pre-release builds of Project Professional 2007. Some method and enumeration names still include Commitment.
PjCommitmentTaskLinkType enumeration (members pjNoLink, pjTargetFinish, and pjTargetStart)
PjField.pjTaskBaseline[1-10]DeliverableFinish enum members
PjField.pjTaskBaseline[1-10]DeliverableStart enum members
PjField.pjTaskDeliverableName enum member
PjField.pjTaskDeliverableFinish enum member
PjField.pjTaskDeliverableGuid enum member
PjField.pjTaskDeliverableStart enum member
PjField.pjTaskDeliverableType enum member
Example for Creating and Updating Deliverables
The VBA sample macro CreateFlaggedTasksAsDeliverables shows how to create and remove deliverables based on the value of a task custom field. The example also updates existing deliverable start and finish dates to the task dates. You can modify the example to keep the original deliverable dates by simply removing the call to the DeliverableUpdate method.
You can use the sample macro within a project by using either a local task custom field or an enterprise task custom field. To make the macro available to all projects on a local computer, add the macro to a module in the GLOBAL.MPT template. To make the macro available to all enterprise projects, add the macro to the enterprise global template.
To see the macro in new projects that you create by using the enterprise global template, you must restart Project Professional.
To prepare a project to use the sample macro:
Create a local or an enterprise task custom field. For example, create a task custom field of type Flag named Pub Deliverable.
Open a project in Project Professional, and then add the Pub Deliverable field column to the Gantt Chart view.
For each task for which you want to create a deliverable, set the value of the Pub Deliverable custom field to Yes.
If you have not already saved the CreateFlaggedTasksAsDeliverables macro in GLOBAL.MPT or the enterprise global template, open the Visual Basic Editor (press ALT+F11) and add the CreateFlaggedTasksAsDeliverables macro to the project.
Save and publish the project. Be sure to create a project workspace when you publish the project. The workspace is necessary to create a list of deliverables to which other projects can subscribe.
Run the CreateFlaggedTasksAsDeliverables macro.
To create the deliverables list in the project workspace, save and publish the project again.
The CreateFlaggedTasksAsDeliverables macro loops through all the tasks. If the flag field Pub Deliverable is set to Yes, then the macro either creates or updates the deliverable. If the field is set to No and there is a deliverable associated with the task, the macro deletes the deliverable. Figure 1 shows the Pub Deliverables column in the Gantt Chart view and the red deliverable indicators on tasks after you run the macro. If you want to execute the macro regularly without user intervention, you could create an event handler, for example, on the Application.ProjectBeforePublish event.
Figure 1. Creating deliverables with VBA using a custom field
Sub CreateFlaggedTasksAsDeliverables() Dim t As Task Dim ecfName As String Dim flagValue As String Dim emptyDeliverable As String Dim errMess As String Dim fieldConstant As PjField On Error Resume Next ecfName = "Pub Deliverable" emptyDeliverable = "00000000-0000-0000-0000-000000000000" For Each t In ActiveProject.Tasks ' Get the PjField constant for the enterpise custom field. fieldConstant = FieldNameToFieldConstant(ecfName) If Err.Number = 0 Then ' Get the flag value from the enterpise custom field. flagValue = t.GetField(fieldConstant) If flagValue = "Yes" Then ' If the task has an empty deliverable GUID, ' then there is no deliverable. If t.DeliverableGuid = emptyDeliverable Then DeliverableCreate t.Name, t.Start, t.Finish, t.Guid Else DeliverableUpdate t.DeliverableGuid, t.Name, t.Start, t.Finish End If Else ' Delete any deliverable that exists. If t.DeliverableGuid <> emptyDeliverable Then DeliverableDelete (t.DeliverableGuid) End If End If Else ' Error handler errMess = "The custom field '" & ecfName & "' doesn't exist " _ & vbCrLf & "or is undefined for task " & t & ": " & t.Name _ & vbCrLf & vbCrLf & "Error:" & vbCrLf & Err.Description MsgBox errMess, vbOKOnly, "Error in Task Custom Field" Exit For End If Next t End Sub