1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Aspose.Tasks;
using System.IO;
namespace Aspose.Tasks.Demos
{
public partial class SplitTask : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnCreateProject_Click(object sender, EventArgs e)
{
//Create new project
Project splitTaskProject = new Project();
//Make a standard calendar
Calendar calendar = Calendar.MakeStandardCalendar();
calendar.Name = "Standart";
splitTaskProject.Calendars.Add(calendar);
splitTaskProject.Calendar = calendar;
//Set project's calendar settings
splitTaskProject.StartDate = new DateTime(2011, 3, 15, 8, 0, 0);
splitTaskProject.FinishDate = new DateTime(2011, 3, 21, 17, 0, 0);
splitTaskProject.MinutesPerDay = 8 * 60;
splitTaskProject.MinutesPerWeek = 5 * 8 * 60;
splitTaskProject.DaysPerMonth = 20;
//Create root task
Task rootTask = new Task("Root");
splitTaskProject.RootTask = rootTask;
//Add a new task
Task taskToSplit = new Task("Task1");
taskToSplit.Start = new DateTime(2011, 3, 15, 8, 0, 0);
taskToSplit.Duration = new TimeSpan(24, 0, 0);
taskToSplit.RemainingDuration = taskToSplit.Duration;
taskToSplit.Finish = calendar.GetFinishDateByStartAndWork(taskToSplit.Start, taskToSplit.Duration);
taskToSplit.DurationFormat = TimeUnitType.Day;
//Set the parent project for calculation.
taskToSplit.ParentProject = splitTaskProject;
rootTask.Children.Add(taskToSplit);
//Create a new resource assignment
ResourceAssignment splitResourceAssignment = new ResourceAssignment(taskToSplit, null);
splitTaskProject.ResourceAssignments.Add(splitResourceAssignment);
splitResourceAssignment.Start = taskToSplit.Start;
splitResourceAssignment.Finish = taskToSplit.Finish;
//Generate resource assignment timephased data
splitResourceAssignment.TimephasedDataFromTaskDuration(calendar);
//Split the task into 3 parts.
//Provide start date and finish date arguments to SplitTask method
//These dates will be used for split
splitResourceAssignment.SplitTask(new DateTime(2011, 3, 16, 8, 0, 0), new DateTime(2011, 3, 16, 17, 0, 0), calendar);
splitResourceAssignment.SplitTask(new DateTime(2011, 3, 18, 8, 0, 0), new DateTime(2011, 3, 18, 17, 0, 0), calendar);
splitResourceAssignment.WorkContour = WorkContourType.Contoured;
//Calculate project IDs
splitTaskProject.CalcCalendarUids();
splitTaskProject.CalcTaskIds();
splitTaskProject.CalcTaskUids();
splitTaskProject.CalcResourceAssignmentIds();
splitTaskProject.CalcResourceAssignmentUids();
//Write to file and check by MS Project.
ProjectWriter writer = new ProjectWriter();
this.Response.ContentType = "application/vnd.ms-project";
this.Response.AppendHeader("Content-Disposition", "attachment; filename=SplitTaskProject.xml");
this.Response.Flush();
System.IO.Stream stream = this.Response.OutputStream;
writer.Write(splitTaskProject, stream, TasksDataFormat.XML);
this.Response.End();
}
}
}
|