Skip Headers
Agile Product Lifecycle Management Web Services Guide
Release 9.3.3
E39310-02
  Go To Table Of Contents
Contents

Previous
Previous
 
Next
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.

You can use the Projects object to schedule and execute projects. Each project, in addition to schedule information, contains attachments, discussions and actions items, resources and roles, 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 interfaces 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 and 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);