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