Agile Product Lifecycle Management Web Services Guide Release 9.3.3 E39310-02 |
|
![]() Previous |
![]() Next |
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.
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.
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.
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);
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);
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);
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);
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);
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);
IsLockedRequestType isLockedRequestType = new IsLockedRequestType(); AgileIsLockedRequestType[] agileIsLockedRequestType = new AgileIsLockedRequestType[1]; agileIsLockedRequestType[0] = new AgileIsLockedRequestType(); agileIsLockedRequestType[0].setProjectIdentifier("PGM00014"); isLockedRequestType.setRequests(agileIsLockedRequestType);