Working with Deliverables
The other day I had a request from an internal customer that wanted to create deliverables for a large number of tasks that already existed in their project plan. They wanted to be able to simply flag each task as a deliverable and have it published. They did not want to do all the steps involved with creating a deliverable.
They also wanted to tightly couple the task name and dates with the deliverable name and dates. Currently, if a deliverable is linked to a task, when the task’s dates change, the dates for the deliverable do not. This is by design to allow the project manager to intentionally make the change to the deliverable dates since these dates are commonly published to a large audience. In this case, the user wanted the deliverable dates to change with the task dates with minimum user intervention.
To get started, I created a flag enterprise custom field. The custom field that I created was "Pub Deliverable" and it is a task custom field. I added the field to the Gantt Chart view in Project Professional:
Next, I wrote the following VBA macro:
Sub Create_Flagged_Tasks_As_Deliverables()
Dim t As Task
Dim fPub As String
For Each t In ActiveProject.Tasks
' This gets the flag value from the Enterpise Custom Field
fPub = t.GetField(FieldNameToFieldConstant("Pub Deliverable"))
If fPub = "Yes" Then
' If the task has this deliverable GUID, then there is no deliverable
If t.DeliverableGuid = "00000000-0000-0000-0000-000000000000" Then
DeliverableCreate t.Name, t.Start, t.Finish, t.Guid
Else
DeliverableUpdate t.DeliverableGuid, t.Name, t.Start, t.Finish
End If
Else
If t.DeliverableGuid <> "00000000-0000-0000-0000-000000000000" Then
DeliverableDelete (t.DeliverableGuid)
End If
End If
Next t
End Sub
This macro loops through all the tasks. If the flag field "Pub Deliverable" is set to yes, then it either creates or updated the deliverable. If it is set to no and there is a deliverable associated with the task, the deliverable is deleted.
Before you can run this code, you will need to publish and create a workspace for your project. To run it, follow these steps:
1. Open your Project Plan
2. Press Alt+F11 – This will open the VBA Editor
3. Double click on ThisProject Object:
4. Copy the VBA code into the Object
5. Run it by clicking on the Play button:
With this solution, the user can simply flag each task that they want published as a deliverable and run the macro. If you want to have this code executed regularly without user intervention, you might want to consider placing this code in an event handler (VBA Event Handler Example).
Chris Boyd
Comments
Anonymous
February 24, 2007
Deliverables is a new feature that shipped in Project Professional 2007. Deliverables provides the abilityAnonymous
August 26, 2010
I understand deliverables have dates and these are interesting to monitor. At some point of time a deliverable are delivered hence status change from open to closed. (Not just assuming that the end date has passed and thus deliverable has been delivered) Is there a status field somewhere or where is my misunderstandingAnonymous
March 27, 2015
Hello Chris, Thanks for the helpful post! Are you aware of any way to automatically attach a document to a deliverable if the URL is provided by a user prompt? Thanks, Luis