คำนวณโครงการโดยทางโปรแกรมโดยใช้ C#

เราสามารถคำนวณกำหนดการหรือต้นทุนโครงการโดยใช้โหมดการคำนวณที่กำหนดไว้ในตัวเลือกโครงการสำหรับ Microsoft Project กำหนดการโครงการแสดงวันที่เริ่มต้นและสิ้นสุดของงานโครงการทั้งหมด Microsoft Project ช่วยให้การคำนวณโครงการด้วยตนเองหรือโดยอัตโนมัติ ในฐานะนักพัฒนา C# เราสามารถตั้งค่าโหมดการคำนวณโครงการในแอปพลิเคชัน .NET และคำนวณคุณสมบัติของโครงการได้อย่างง่ายดาย ในบทความนี้ เราจะมาเรียนรู้วิธีการคำนวณโครงการทางโปรแกรมโดยใช้ C#

หัวข้อต่อไปนี้จะครอบคลุมในบทความนี้:

C # API เพื่อคำนวณโครงการโดยทางโปรแกรม

สำหรับการตั้งค่าโหมดการคำนวณโครงการ เราจะใช้ API Aspose.Tasks for .NET มีโหมดการคำนวณโครงการสามโหมด เพื่อคำนวณค่าของคุณสมบัติที่ขึ้นต่อกัน โหมดการคำนวณเหล่านี้คือ:

  • ไม่มี – ตั้งค่าคุณสมบัติที่จำเป็นเท่านั้น และไม่คำนวณวันที่และต้นทุนของโครงการใหม่
  • แบบแมนนวล – ตั้งค่าเฉพาะคุณสมบัติของออบเจกต์ที่ขึ้นต่อกันโดยไม่มีการคำนวณวันที่และต้นทุนของโครงการใหม่
  • อัตโนมัติ – จะคำนวณวันที่ของโครงการและคุณสมบัติต้นทุนใหม่โดยอัตโนมัติ

API กำหนดโหมดการคำนวณที่กล่าวถึงข้างต้นในการแจงนับ CalculationMode คุณสมบัติ CalculationMode ของคลาส Project อนุญาตให้ตั้งค่าหรือรับค่าของ CalculationMode API ยังอนุญาตให้จัดการโครงการที่มีอยู่เพื่อเพิ่มการแก้ไขบางอย่าง นอกจากนี้ยังอำนวยความสะดวกในการดำเนินการจัดการโครงการขั้นพื้นฐานและขั้นสูงได้อย่างราบรื่น โปรด ดาวน์โหลด DLL ของ API หรือติดตั้งโดยใช้ NuGet

PM> Install-Package Aspose.Tasks

การคำนวณโครงการด้วยตนเองโดยใช้ C

เราสามารถตั้งค่าโหมดการคำนวณเป็นแบบแมนนวลและตรวจสอบได้โดยทำตามขั้นตอนด้านล่าง:

  1. ขั้นแรก สร้างอินสแตนซ์ของคลาส Project
  2. ถัดไป ตั้งค่าโหมดการคำนวณเป็นแบบแมนนวล
  3. จากนั้นระบุวันที่เริ่มโครงการ
  4. จากนั้น เพิ่มงานใหม่ เช่น งานที่ 1 และงานที่ 2
  5. จากนั้น อ่านคุณสมบัติของงานที่ตั้งในโหมดแมนนวล
  6. หลังจากนั้น เริ่มต้นวัตถุของคลาส TaskLinks และเชื่อมโยงงาน
  7. สุดท้าย ตรวจสอบวันที่เริ่มต้นและสิ้นสุดของงาน 2

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการคำนวณโครงการด้วยตนเองโดยใช้ C#

// ตัวอย่างรหัสนี้สาธิตวิธีการตั้งค่าโหมดการคำนวณโครงการด้วยตนเอง
// สร้างตัวอย่างของโครงการ
Project project = new Project();

// ตั้งโหมดการคำนวณเป็น Manual
project.CalculationMode = CalculationMode.Manual;

// กำหนดวันที่เริ่มต้นโครงการ
project.Set(Prj.StartDate, new DateTime(2015, 4, 15));

// เพิ่มงานใหม่
Aspose.Tasks.Task task1 = project.RootTask.Children.Add("Task 1");
Aspose.Tasks.Task task2 = project.RootTask.Children.Add("Task 2");

// คุณสมบัติที่จำเป็นถูกตั้งค่าในโหมดแมนนวล
Console.WriteLine("Task1.Id Equals 1 : {0} ", task1.Get(Tsk.Id).Equals(1));
Console.WriteLine("Task1 OutlineLevel Equals 1 : {0} ", task1.Get(Tsk.OutlineLevel).Equals(1));
Console.WriteLine("Task1 Start Equals 15/04/2015 08:00 AM : {0} ", task1.Get(Tsk.Start).Equals(new DateTime(2015, 4, 15, 8, 0, 0)));
Console.WriteLine("Task1 Finish Equals 15/04/2015 05:00 PM : {0} ", task1.Get(Tsk.Finish).Equals(new DateTime(2015, 4, 15, 17, 0, 0)));
Console.WriteLine("Task1 Duration Equals 1 day : {0} ", task1.Get(Tsk.Duration).ToString().Equals("1 day"));
Console.WriteLine("Task2 Start Equals 15/04/2015 08:00 AM : {0} ", task2.Get(Tsk.Start).Equals(new DateTime(2015, 4, 15, 8, 0, 0)));
Console.WriteLine("Task2 Finish Equals 15/04/2015 05:00 PM : {0} ", task2.Get(Tsk.Finish).Equals(new DateTime(2015, 4, 15, 17, 0, 0)));
Console.WriteLine("Task2 Duration Equals 1 day : {0} ", task2.Get(Tsk.Duration).ToString().Equals("1 day"));

// เชื่อมโยงสองงานเข้าด้วยกัน วันที่ของงานจะไม่ถูกคำนวณใหม่ในโหมดแมนนวล
TaskLink link = project.TaskLinks.Add(task1, task2, TaskLinkType.FinishToStart);

// ไม่มีการเปลี่ยนแปลงในวันที่ของงาน 2
Console.WriteLine("Task1 Start Equals Task2 Start : {0} ", task1.Get(Tsk.Start).Equals(task2.Get(Tsk.Start)));
Console.WriteLine("Task1 Finish Equals Task2 Finish : {0} ", task1.Get(Tsk.Finish).Equals(task2.Get(Tsk.Finish)));
Task1.Id Equals 1 : True
Task1 OutlineLevel Equals 1 : True
Task1 Start Equals 15/04/2015 08:00 AM : True
Task1 Finish Equals 15/04/2015 05:00 PM : True
Task1 Duration Equals 1 day : True
Task2 Start Equals 15/04/2015 08:00 AM : True
Task2 Finish Equals 15/04/2015 05:00 PM : True
Task2 Duration Equals 1 day : True
Task1 Start Equals Task2 Start : True
Task1 Finish Equals Task2 Finish : True

การคำนวณโครงการอัตโนมัติโดยใช้ C#

เราสามารถตั้งค่าโหมดการคำนวณเป็นแบบอัตโนมัติและตรวจสอบได้โดยทำตามขั้นตอนด้านล่าง:

  1. ขั้นแรก สร้างอินสแตนซ์ของคลาส Project
  2. ถัดไป ตั้งค่าโหมดการคำนวณเป็นอัตโนมัติ
  3. จากนั้นกำหนดวันที่เริ่มต้นโครงการ
  4. ตอนนี้ เพิ่มงานใหม่ เช่น งานที่ 1 และ งานที่ 2
  5. หลังจากนั้น เริ่มต้นวัตถุของคลาส TaskLinks และเชื่อมโยงงาน
  6. สุดท้าย ตรวจสอบวันที่ที่คำนวณใหม่

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการคำนวณโครงการโดยอัตโนมัติโดยใช้ C#

// ตัวอย่างรหัสนี้สาธิตวิธีการตั้งค่าโหมดการคำนวณโครงการอัตโนมัติ
// สร้างตัวอย่างของโครงการ
Project project = new Project();

// ตั้งค่าโหมดการคำนวณเป็นอัตโนมัติ
project.CalculationMode = CalculationMode.Automatic;

// กำหนดวันที่เริ่มต้นโครงการ
project.Set(Prj.StartDate, new DateTime(2015, 4, 15));

// เพิ่มงานใหม่
Aspose.Tasks.Task task1 = project.RootTask.Children.Add("Task 1");
Aspose.Tasks.Task task2 = project.RootTask.Children.Add("Task 2");

// งานเชื่อมโยง
TaskLink link = project.TaskLinks.Add(task1, task2, TaskLinkType.FinishToStart);

// ตรวจสอบวันที่ที่คำนวณใหม่
Console.WriteLine("Task1 Start + 1 Equals Task2 Start : {0} ", task1.Get(Tsk.Start).AddDays(1).Equals(task2.Get(Tsk.Start)));
Console.WriteLine("Task1 Finish + 1 Equals Task2 Finish : {0} ", task1.Get(Tsk.Finish).AddDays(1).Equals(task2.Get(Tsk.Finish)));
Console.WriteLine("RootTask Finish Equals Task2 Finish : {0} ", task2.Get(Tsk.Finish).Equals(project.RootTask.Get(Tsk.Finish)));
Console.WriteLine("Project Finish Date Equals Task2 Finish : {0} ", task2.Get(Tsk.Finish).Equals(project.Get(Prj.FinishDate)));
Task1 Start + 1 Equals Task2 Start : True
Task1 Finish + 1 Equals Task2 Finish : True
RootTask Finish Equals Task2 Finish : True
Project Finish Date Equals Task2 Finish : True

ไม่มีโหมดการคำนวณโครงการใน C#

เราสามารถตั้งค่าโหมดการคำนวณเป็นแบบอัตโนมัติและตรวจสอบได้โดยทำตามขั้นตอนด้านล่าง:

  1. ขั้นแรก สร้างอินสแตนซ์ของคลาส Project
  2. ถัดไป ตั้งค่าโหมดการคำนวณเป็นไม่มี
  3. จากนั้นระบุวันที่เริ่มโครงการ
  4. จากนั้น เพิ่มงานใหม่ เช่น งาน 1
  5. จากนั้น อ่านคุณสมบัติของงาน
  6. หลังจากนั้น กำหนดระยะเวลาของงานเป็นวัน
  7. สุดท้าย ตรวจสอบวันที่เริ่มต้นและสิ้นสุดของงาน

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีตั้งค่าการคำนวณโครงการเป็นไม่มีโดยใช้ C#

// ตัวอย่างรหัสนี้สาธิตวิธีการตั้งค่าโหมดการคำนวณโครงการเป็นไม่มี
// สร้างตัวอย่างของโครงการ
Project project = new Project();

// ตั้งค่าโหมดการคำนวณเป็นไม่มี
project.CalculationMode = CalculationMode.None;

// เพิ่มงานใหม่
Aspose.Tasks.Task task = project.RootTask.Children.Add("Task");

// โปรดทราบว่าไม่ได้คำนวณแม้แต่รหัส
Console.WriteLine("Task.Id Equals 0 : {0} ", task.Get(Tsk.Id).Equals(0));
Console.WriteLine("Task.OutlineLevel Equals 0 : {0} ", task.Get(Tsk.OutlineLevel).Equals(0));
Console.WriteLine("Task Start Equals DateTime.MinValue : {0} ", task.Get(Tsk.Start).Equals(DateTime.MinValue));
Console.WriteLine("Task Finish Equals DateTime.MinValue : {0} ", task.Get(Tsk.Finish).Equals(DateTime.MinValue));
Console.WriteLine("Task Duration Equals 0 mins : {0} ", task.Get(Tsk.Duration).ToString().Equals("0 mins"));

// กำหนดคุณสมบัติระยะเวลา
task.Set(Tsk.Duration, project.GetDuration(2, TimeUnitType.Day));
Console.WriteLine("Task Duration Equals 2 days : {0} ", task.Get(Tsk.Duration).ToString().Equals("2 days"));
Console.WriteLine("Task Start Equals DateTime.MinValue  : {0} ", task.Get(Tsk.Start).Equals(DateTime.MinValue));
Console.WriteLine("Task Finish Equals DateTime.MinValue  : {0} ", task.Get(Tsk.Finish).Equals(DateTime.MinValue));
Task.Id Equals 0 : True
Task.OutlineLevel Equals 0 : False
Task Start Equals DateTime.MinValue : True
Task Finish Equals DateTime.MinValue : True
Task Duration Equals 0 mins : True
Task Duration Equals 2 days : True
Task Start Equals DateTime.MinValue  : True
Task Finish Equals DateTime.MinValue  : True

รับใบอนุญาตฟรี

คุณสามารถ รับใบอนุญาตชั่วคราวได้ฟรี เพื่อทดลองใช้ห้องสมุดโดยไม่มีข้อจำกัดในการประเมิน

บทสรุป

ในบทความนี้ เราได้เรียนรู้วิธีตั้งค่าโหมดการคำนวณโครงการโดยทางโปรแกรม เราได้เห็นวิธีคำนวณค่าของคุณสมบัติที่ขึ้นต่อกันในแต่ละโหมดการคำนวณโดยใช้ C# นอกจากนี้ คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับ Aspose.Tasks for .NET API โดยใช้ เอกสารประกอบ ในกรณีที่มีความคลุมเครือ โปรดติดต่อเราได้ที่ ฟอรัม

ดูสิ่งนี้ด้วย