プロジェクトの再スケジュール
開始日または終了日からプロジェクトを再スケジュールする
このトピックは、JavaのAspose.Tasksを使用して、プロジェクトの開始/終了日からプロジェクトを再スケジュールする方法を示しています。
終了日からプロジェクトを再スケジュールする
プロジェクトの終了日を設定し、Project.Recalculate()メソッドを呼び出すことにより、終了日から日付を再計算できます。タスクのスラックを早期/遅い日付に基づいて計算できます。
プログラミングサンプル
次のコード行は、Javaを使用してこれを達成する方法を示しています
1// For complete examples and data files, please go to https://github.com/aspose-tasks/Aspose.Tasks-for-Java
2// The path to the documents directory.
3String dataDir = Utils.getDataDir(RescheduleProjectFromStartOrFinishDate.class);
4
5Project project = new Project(dataDir + "Project.mpp");
6project.set(Prj.SCHEDULE_FROM_START, new NullableBool(false));
7java.util.Calendar cal = java.util.Calendar.getInstance();
8cal.set(2020, 1, 1, 0, 0, 0);
9project.set(Prj.FINISH_DATE, cal.getTime());
10
11// Now all tasks dates (Start, Finish, EarlyStart, EarlyFinish,
12// LateStart,
13// LateFinish) are calculated.
14// To get the critical path we need to calculate slacks (can be invoked
15// in
16// separate thread, but only after calculation of all early/late dates)
17project.recalculate();
18TaskCollection criticalPath = project.getCriticalPath();
Rescheduling a Project from the Start Date
We can calculate dates from start date by setting the project start date and then invoke the Project.recalculate() method.
The following lines of code show how to achieve this using Java.
1// For complete examples and data files, please go to https://github.com/aspose-tasks/Aspose.Tasks-for-Java
2// The path to the documents directory.
3String dataDir = Utils.getDataDir(RescheduleProjectFromStartOrFinishDate.class);
4
5Project project = new Project(dataDir + "Project.mpp");
6project.set(Prj.SCHEDULE_FROM_START, new NullableBool(true));
7java.util.Calendar cal = java.util.Calendar.getInstance();
8cal.set(2020, 1, 1, 0, 0, 0);
9project.set(Prj.START_DATE, cal.getTime());
10
11// Now all tasks dates (Start, Finish, EarlyStart, EarlyFinish,
12// LateStart,
13// LateFinish) are calculated.
14// To get the critical path we need to calculate slacks (can be invoked
15// in
16// separate thread, but only after calculation of all early/late dates)
17project.recalculate();
18TaskCollection criticalPath = project.getCriticalPath();
Update Project and Reschedule Uncompleted Work
Microsoft Project lets users update and reschedule work through a defined date. This helps identify work completed up to the specified date as well as reschedule any uncompleted work from a specified date. Aspose.Tasks ’ Project API provides the same functionality by exposing the updateProjectWorkAsComplete and rescheduleUncompletedWorkToStartAfter methods. This article provides a working example of both these methods as a single use case.
Update Project
This topic demonstrates how to update a project through a specified date. The updateProjectWorkAsComplete method updates all the work as complete through a specified date for an entire project.
- If the Boolean input parameter is set to true, the method updates only those tasks to 100% complete that have finish dates before the specified completed-through date.
- If the Boolean input parameter is set to false, the method calculates a percentage complete value based on the scheduled state and complete through dates.
- If a list of task is specified, the method updates all work as complete through the specified date for the list of tasks.
The following sample demonstrates how to achieve this
1// For complete examples and data files, please go to https://github.com/aspose-tasks/Aspose.Tasks-for-Java
2// The path to the documents directory.
3String dataDir = Utils.getDataDir(UpdateProjectAndRescheduleuncompletedwork.class);
4
5long OneSec = 10000000;// microsecond * 10
6long OneMin = 60 * OneSec;
7long OneHour = 60 * OneMin;
8
9Project project = new Project();
10
11java.util.Calendar cal = java.util.Calendar.getInstance();
12cal.set(2014, 1, 27, 8, 0, 0);
13project.set(Prj.START_DATE, cal.getTime());
14
15Task task1 = project.getRootTask().getChildren().add("Task 1");
16Task task2 = project.getRootTask().getChildren().add("Task 2");
17task2.set(Tsk.DURATION, task2.getParentProject().getDuration(16, TimeUnitType.Hour));
18Task task3 = project.getRootTask().getChildren().add("Task 3");
19task3.set(Tsk.DURATION, task2.getParentProject().getDuration(24, TimeUnitType.Hour));
20Task task4 = project.getRootTask().getChildren().add("Task 4");
21task4.set(Tsk.DURATION, task2.getParentProject().getDuration(16, TimeUnitType.Hour));
22Task task5 = project.getRootTask().getChildren().add("Task 5");
23task5.set(Tsk.DURATION, task2.getParentProject().getDuration(16, TimeUnitType.Hour));
24
25TaskLink link12 = project.getTaskLinks().add(task1, task2, TaskLinkType.FinishToStart);
26TaskLink link23 = project.getTaskLinks().add(task2, task3, TaskLinkType.FinishToStart);
27link23.setLinkLag(4800); // one day lag
28TaskLink link34 = project.getTaskLinks().add(task3, task4, TaskLinkType.FinishToStart);
29TaskLink link45 = project.getTaskLinks().add(task4, task5, TaskLinkType.FinishToStart);
30
31Task task6 = project.getRootTask().getChildren().add("Task 6");
32Task task7 = project.getRootTask().getChildren().add("Task 7");
33task7.set(Tsk.DURATION, task7.getParentProject().getDuration(24, TimeUnitType.Hour));
34Task task8 = project.getRootTask().getChildren().add("Task 8");
35task8.set(Tsk.DURATION, task2.getParentProject().getDuration(16, TimeUnitType.Hour));
36Task task9 = project.getRootTask().getChildren().add("Task 9");
37task9.set(Tsk.DURATION, task2.getParentProject().getDuration(16, TimeUnitType.Hour));
38Task task10 = project.getRootTask().getChildren().add("Task 10");
39
40TaskLink link67 = project.getTaskLinks().add(task6, task7, TaskLinkType.FinishToStart);
41TaskLink link78 = project.getTaskLinks().add(task7, task8, TaskLinkType.FinishToStart);
42TaskLink link89 = project.getTaskLinks().add(task8, task9, TaskLinkType.FinishToStart);
43TaskLink link910 = project.getTaskLinks().add(task9, task10, TaskLinkType.FinishToStart);
44
45task6.set(Tsk.IS_MANUAL, new NullableBool(true));
46task7.set(Tsk.IS_MANUAL, new NullableBool(true));
47task8.set(Tsk.IS_MANUAL, new NullableBool(true));
48task9.set(Tsk.IS_MANUAL, new NullableBool(true));
49task10.set(Tsk.IS_MANUAL, new NullableBool(true));
50
51project.save(dataDir + "not updated.xml", SaveFileFormat.XML);
52
53cal.set(2014, 1, 28, 17, 0, 0);
54project.updateProjectWorkAsComplete(cal.getTime(), false);
55
56project.save(dataDir + "updated.xml", SaveFileFormat.XML);
57
58cal.set(2014, 1, 28, 17, 0, 0);
59project.rescheduleUncompletedWorkToStartAfter(cal.getTime());
60
61project.save(dataDir + "rescheduled.xml", SaveFileFormat.XML);