Skip Headers

Agile Product Lifecycle Management Web Services Guide Release 9.3.3 E39310-01 |
| Contents

Previous | Next |

# 11 Working with Projects

You can use the project management features of Agile Product Portfolio Management (PPM) to define a project and its associated elements such as activity schedules, deliverables, and discussions. These capabilities enable you to determine the availability of the required resources, assigning resources to tasks, identifying bottlenecks, and responding to over- and under-allocated resource conditions. You can also create and reuse project templates.

The Projects object is used to schedule and execute projects. Each project, in addition to schedule information, contains attachments, discussions and actions items, resources and roles, and history and content of related activities. For management visibility, data is rolled up to higher levels by rules and parent-child relationships.

The Agile Project web service provides support for creating, loading, and working with Projects. It handles the Projects object in its entirety, including programs, phases, tasks, and gates.

## 11.1 Differences in the Behavior of Projects Objects

The project web service helps implement several interface commonly used by other Agile PLM objects and also provides the following functionality that separates Projects objects from other objects.

- The Projects object is a container of other underlying objects, such as Phases, Tasks, and Gates. The underlying objects are related to the parent object, usually the Projects, through the Schedule table.

- Projects have baselines that allow you to track changes in the schedule. Therefore, the project web service provides operations that let you create, get, or remove a baseline.

- Projects can be archived. If you archive the root Projects, the entire Projects tree is soft-deleted from the system.

- Projects can be locked or unlocked.

## 11.2 Working with Project Baselines

Projects baselines allow you to compare actual progress with your original plans. When you create a baseline, a snapshot of your Projects' schedule is preserved. The original estimates contained in the baseline are permanent reference points against which you can compare the updated task structure, schedule, and actual dates.

### 11.2.1 Creating Baselines

You can create baselines only for the root Projects object.

Example: Creating a baseline

    CreateBaselineRequestType createBaselineRequestType =
    new CreateBaselineRequestType();
    AgileCreateBaselineRequestType[] agileCreateBaselineRequestType =
        new AgileCreateBaselineRequestType[1];
    agileCreateBaselineRequestType[0] = new AgileCreateBaselineRequestType();
    agileCreateBaselineRequestType[0].setProjectIdentifier("PGM00014"); //Project Identifier
    agileCreateBaselineRequestType[0].setDescription("My New Baseline"); //Name of the baseline to be  created
    createBaselineRequestType.setRequests(agileCreateBaselineRequestType);

### 11.2.2 Getting Baselines

You can save multiple baselines, and retrieve them later for comparison.

Example: Getting Baselines

    GetBaselinesRequestType getBaselinesRequestType =
    new GetBaselinesRequestType();
    AgileGetBaselinesRequestType[] agileGetBaselinesRequestType =
        new AgileGetBaselinesRequestType[1];
    agileGetBaselinesRequestType[0] = new AgileGetBaselinesRequestType();
    agileGetBaselinesRequestType[0].setProjectIdentifier("PGM00014");
    getBaselinesRequestType.setRequests(agileGetBaselinesRequestType);

### 11.2.3 Removing Baselines

You can removes the list of baselines associated with the project.

Example: Removing Baselines

    RemoveBaselineRequestType removeBaselinesRequestType =
    new RemoveBaselineRequestType();
    AgileRemoveBaselineRequestType[] agileRemoveBaselineRequestType =
        new AgileRemoveBaselineRequestType[1];
    agileRemoveBaselineRequestType[0] = new AgileRemoveBaselineRequestType();
    agileRemoveBaselineRequestType[0].setProjectIdentifier("PGM00014"); //Project Identifier
    agileRemoveBaselineRequestType[0].setVersion(3); //Baseline version number
    removeBaselinesRequestType.setRequests(agileRemoveBaselineRequestType);

Once a Projects' schedule is defined, you can reschedule it using the reschedule operation. This operation takes a couple of parameters, the IProgram.RESCHEDULE constant and the new value for that schedule option. Here is the list of IProgram.RESCHEDULE constants you can use:

- STARTDATE - This moves the scheduled start date to the specified date.

- ENDDATE - This moves the scheduled end date to the specified date.

- BACKWARDDAYS - This moves the schedule backward by the specified number of days.

- FORWARDDAYS - This moves the schedule forward by the specified number of days.

Example: Rescheduling projects

    RescheduleRequestType rescheduleRequestType =
    new RescheduleRequestType();
    AgileRescheduleRequestType[] agileRescheduleRequestType =
        new AgileRescheduleRequestType[1];
    agileRescheduleRequestType[0] = new AgileRescheduleRequestType();
    agileRescheduleRequestType[0].setProjectIdentifier("PGM00014");
    RescheduleType rescheduleType = new RescheduleType();
    rescheduleType.setForwardDays(5);
    //            rescheduleType.setBackwardDays(5); //Number of days you want to forward the schedule
    //            Calendar startDate = Calendar.getInstance();
    //            startDate.setTime(new Date(2011, 01, 01));
    //            Calendar endDate = (Calendar)startDate.clone();
    //            endDate.add(Calendar.DAY_OF_YEAR, +5);
    //            rescheduleType.setStartDate(startDate); //Setting the start date of the activity
    //            rescheduleType.setEndDate(endDate); //Setting the end date of the activity
    agileRescheduleRequestType[0].setRescheduleType(rescheduleType);
    rescheduleRequestType.setRequests(agileRescheduleRequestType);

## 11.3 Substituting Project Resources

A resource's availability can frequently change due to overloading, reassignments, vacation, and illness. You can substitute an existing resource for another resource. The current resource's role is assigned to the substituted resource, but only for that Projects. To substitute Projects resources, use the substituteResource operation.

When you substitute resources, you can specify users as well as user groups. You can also specify whether the resource assignment applies to the Projects' children.

Example: Substituting projects resources

    SubstituteResourceRequestType substituteResourceRequestType =
    new SubstituteResourceRequestType();
    AgileSubstituteResourceRequestType[] agileSubstituteResourceRequestType =
        new AgileSubstituteResourceRequestType[1];
    agileSubstituteResourceRequestType[0] = new AgileSubstituteResourceRequestType();
    agileSubstituteResourceRequestType[0].setProjectIdentifier("PGM00014");
    AgileUserUserGroupIdentifierType currentUser = new AgileUserUserGroupIdentifierType();
    currentUser.setClassIdentifier("User");
    currentUser.setObjectIdentifier("badriv");
    agileSubstituteResourceRequestType[0].setCurrentResource(currentUser); //Currently allocated resource
    AgileUserUserGroupIdentifierType newUser = new AgileUserUserGroupIdentifierType();
    newUser.setClassIdentifier("User");
    newUser.setObjectIdentifier("yvonnec");
    agileSubstituteResourceRequestType[0].setNewResource(newUser); //Resource that substitutes the current resource
    agileSubstituteResourceRequestType[0].setApplyToChildren(true); //the delegated owner is set for the children as well
    substituteResourceRequestType.setRequests(agileSubstituteResourceRequestType);

Example: Assigning Users from a Resource Pool

    AssignUsersFromPoolRequestType assignUsersFromPoolRequestType =
    new AssignUsersFromPoolRequestType();
    AgileAssignUsersFromPoolRequestType[] agileAssignUsersFromPoolRequestType =
        new AgileAssignUsersFromPoolRequestType[1];
    agileAssignUsersFromPoolRequestType[0] = new AgileAssignUsersFromPoolRequestType();
    agileAssignUsersFromPoolRequestType[0].setProjectIdentifier("PGM00014");
    agileAssignUsersFromPoolRequestType[0].setUsergroup("Test"); //Assign userpool from which you want to assign resources
    String[] users = {"brianl"}; //Create an array of users you want to add from the userpool above. brianl is a part of the userpool "Test"
    agileAssignUsersFromPoolRequestType[0].setUsers(users);
    assignUsersFromPoolRequestType.setRequests(agileAssignUsersFromPoolRequestType);

## 11.4 Delegating Ownership of a Project to Another User

The owner or manager of a Projects object can assign the ownership of the Projects to other users by delegating it. The delegated user receives a request that he can accept or decline. If he accepts, the delegated user becomes owner of the task. A delegated owner is automatically given the Projects Manager role for the delegated Projects object.

To delegate ownership of a Projects, use the delegateOwnership operation. When you delegate ownership of a Projects, you automatically update the Delegated Owner field, which is read-only. The delegateOwnership operation lets you specify whether delegated ownership also applies to the Projects' children.

Example: Delegating project ownership to another user

    DelegateOwnershipRequestType delegateOwnershipRequestType =
    new DelegateOwnershipRequestType();
    AgileDelegateOwnershipRequestType[] agileDelegateOwnershipRequestType =
        new AgileDelegateOwnershipRequestType[1];
    agileDelegateOwnershipRequestType[0] = new AgileDelegateOwnershipRequestType();
    agileDelegateOwnershipRequestType[0].setProjectIdentifier("PGM00014");
    agileDelegateOwnershipRequestType[0].setUserIdentifier("yvonnec"); //loginID of the user
    agileDelegateOwnershipRequestType[0].setApplyToChildren(true); //the delegated owner is set for the children as well
    delegateOwnershipRequestType.setRequests(agileDelegateOwnershipRequestType);

## 11.5 Locking and Unlocking Projects

The owner of Projects can lock or unlock the Projects object. You cannot modify the schedule of a Projects object once it is locked. To lock or unlock a Projects object, use the setLock operation.

Note: Projects are automatically locked when you use the Gantt Chart or the Microsoft Project integration functionality in Agile Web Client.

Example: Locking a projects object

    SetLockRequestType setLockRequestType =
    new SetLockRequestType();
    AgileSetLockRequestType[] agileSetLockRequestType =
        new AgileSetLockRequestType[1];
    agileSetLockRequestType[0] = new AgileSetLockRequestType();
    agileSetLockRequestType[0].setProjectIdentifier("PGM00014");
    agileSetLockRequestType[0].setLock(true);
    setLockRequestType.setRequests(agileSetLockRequestType);

### 11.5.1 Checking Projects Lock Status

    IsLockedRequestType isLockedRequestType =
    new IsLockedRequestType();
    AgileIsLockedRequestType[] agileIsLockedRequestType =
        new AgileIsLockedRequestType[1];
    agileIsLockedRequestType[0] = new AgileIsLockedRequestType();
    agileIsLockedRequestType[0].setProjectIdentifier("PGM00014");
    isLockedRequestType.setRequests(agileIsLockedRequestType);