Aspose.Tasks에서 달력 작업

소개

Aspose.Tasks for .NET은 캘린더 작업을 위한 강력한 기능을 제공하여 개발자가 프로젝트 일정과 리소스 할당을 효율적으로 관리할 수 있도록 해줍니다. 이 튜토리얼에서는 Aspose.Tasks를 활용하여 달력과 상호 작용하는 방법을 살펴보고 달력 정보 검색, 근무 주 정의, 근무 시간 계산 등과 같은 필수 작업을 다룹니다.

전제조건

시작하기 전에 다음 전제 조건이 설정되어 있는지 확인하세요.

  • C# 프로그래밍 언어에 대한 기본 이해.
  • .NET용 Aspose.Tasks 설치. 설치되어 있지 않은 경우 다음에서 다운로드하세요.여기.
  • Visual Studio 또는 기타 선호하는 .NET 개발 환경에 대한 지식.

네임스페이스 가져오기

코딩을 시작하기 전에 필요한 네임스페이스를 가져와야 합니다.

using Aspose.Tasks;
using System;

using Aspose.Tasks.Saving;

이제 단계별 가이드 형식으로 각 예를 여러 단계로 나누어 보겠습니다.

1단계: 캘린더 정보 검색

프로젝트에서 달력 정보를 검색하려면 다음 단계를 따르세요.

public static void RetrieveCalendarInfo()
{
    var project = new Project(DataDir + "RetrieveCalendarInfo.mpp");

    // 캘린더 정보 검색
    foreach (var calendar in project.Calendars)
    {
        if (calendar.Name == null)
        {
            continue;
        }

        Console.WriteLine("Calendar UID: " + calendar.Uid);
        Console.WriteLine("Calendar Name: " + calendar.Name);
    }
}

설명:

  • 프로젝트 파일을 로드합니다.
  • 프로젝트의 각 달력을 반복합니다.
  • 각 달력의 UID와 이름을 인쇄합니다.

2단계: 근무 주 정보 읽기

달력에서 근무 주 정보를 읽으려면 다음 단계를 따르세요.

public static void ReadWorkWeeksInformation()
{
    var project = new Project(DataDir + "WorkWithWorkWeekCollection.mpp");
    var calendar = project.Calendars.GetByUid(1);

    foreach (var workWeek in calendar.WorkWeeks)
    {
        var name = workWeek.Name;
        var fromDate = workWeek.FromDate;
        var toDate = workWeek.ToDate;
        Console.WriteLine("Name: " + name);
        Console.WriteLine("From Date: " + fromDate);
        Console.WriteLine("To Date: " + toDate);

        foreach (var day in workWeek.WeekDays)
        {
            foreach (var workingTime in day.WorkingTimes)
            {
                Console.WriteLine(workingTime.From);
                Console.WriteLine(workingTime.To);
            }
        }
    }
}

설명:

  • 프로젝트 파일을 로드합니다.
  • UID로 달력을 가져옵니다.
  • 달력의 각 작업 주를 반복합니다.
  • 각 근무 주의 이름, 시작 날짜, 종료 날짜를 인쇄체로 입력하세요.
  • 매주 근무일과 근무 시간을 순회합니다.

3단계: 달력 속성 읽기

프로젝트 달력의 속성을 읽으려면 다음 단계를 따르세요.

public void ReadCalendarProps()
{
    var project = new Project(DataDir + "Project_GeneralCalendarProperties.xml");

    foreach (var calendar in project.Calendars)
    {
        if (calendar.Name == null)
        {
            continue;
        }

        Console.WriteLine("UID : " + calendar.Uid + " Name: " + calendar.Name);

        Console.Write("Base Calendar : ");
        Console.WriteLine(calendar.IsBaseCalendar ? "Self" : calendar.BaseCalendar.Name);

        foreach (var wd in calendar.WeekDays)
        {
            var ts = wd.GetWorkingTime();
            Console.WriteLine("Day Type: " + wd.DayType + " Hours: " + ts);
        }
    }
}

설명:

  • 프로젝트 파일을 로드합니다.
  • 프로젝트의 각 달력을 반복합니다.
  • UID, 이름, 기본 달력인지 여부를 인쇄합니다.
  • 각 요일별 근무 시간을 인쇄하세요.

4단계: 근무 시간 계산

작업의 작업 시간을 계산하려면 다음 단계를 따르세요.

public void CalculateWorkHours()
{
    var project = new Project(DataDir + "CalculateWorkHours.mpp");
    var task = project.RootTask.Children.GetById(1);
    var taskCalendar = task.Get(Tsk.Calendar);
    var startDate = task.Get(Tsk.Start);
    var endDate = task.Get(Tsk.Finish);
    var resource = project.Resources.GetByUid(1);
    var resourceCalendar = resource.Get(Rsc.Calendar);
    TimeSpan timeSpan;
    double durationInMins = 0;
    var tempDate = startDate;

    while (tempDate < endDate)
    {
        if (taskCalendar.IsDayWorking(tempDate) && resourceCalendar.IsDayWorking(tempDate))
        {
            timeSpan = taskCalendar.GetWorkingHours(tempDate);
            durationInMins += timeSpan.TotalMinutes;
        }

        tempDate = tempDate.AddDays(1);
    }

    Console.WriteLine("Duration in Minutes = " + durationInMins);
}

설명:

  • 프로젝트 파일을 로드합니다.
  • 달력, 시작 날짜, 종료 날짜 등 작업 세부정보를 확인하세요.
  • 매일 반복하고 근무일인지 확인하여 근무 시간을 계산합니다.
  • 총 소요 시간을 분 단위로 요약합니다.

5단계: 달력의 평일 정의

달력의 평일을 정의하려면 다음 단계를 따르세요.

public void DefineWeekdaysForCalendar()
{
    var project = new Project();
    var calendar = project.Calendars.Add("Calendar1");

    calendar.WeekDays.Add(WeekDay.CreateDefaultWorkingDay(DayType.Monday));
    calendar.WeekDays.Add(WeekDay.CreateDefaultWorkingDay(DayType.Tuesday));
    calendar.WeekDays.Add(WeekDay.CreateDefaultWorkingDay(DayType.Wednesday));
    calendar.WeekDays.Add(WeekDay.CreateDefaultWorkingDay(DayType.Thursday));
    calendar.WeekDays.Add(new WeekDay(DayType.Saturday));
    calendar.WeekDays.Add(new WeekDay(DayType.Sunday));

    var weekDay = new WeekDay(DayType.Friday);
    var workingTime = new WorkingTime(9, 12);
    var workingTime2 = new WorkingTime(13, 16);
    weekDay.WorkingTimes.Add(workingTime);
    weekDay.WorkingTimes.Add(workingTime2);
    weekDay.DayWorking = true;
    calendar.WeekDays.Add(weekDay);
}

설명:

  • 새 프로젝트와 달력을 만듭니다.
  • 기본 근무일(월요일~목요일)과 금요일의 맞춤 근무 시간을 추가하세요.
  • 토요일과 일요일을 휴무일로 설정하세요.

6단계: 업데이트된 달력 데이터를 MPP에 쓰기

업데이트된 달력 데이터를 MPP 파일에 쓰려면 다음 단계를 따르세요.

public void WriteUpdatedCalendarDataToMpp()
{
    try
    {
        var project = new Project(DataDir + "project_update_test.mpp");
        var calendar = project.Calendars.GetByName("Standard");

        Calendar.MakeStandardCalendar(calendar);
        calendar.Name = "Test calendar";
        var exception = new CalendarException();
        exception.Name = "Exception 1";
        exception.FromDate = DateTime.Now;
        exception.ToDate = DateTime.Now.AddDays(2);
        exception.DayWorking = true;

        exception.WorkingTimes.Add(new WorkingTime(9, 13));
        exception.WorkingTimes.Add(new WorkingTime(14, 19));
        exception.WorkingTimes.Add(new WorkingTime(20, 21));
        calendar.Exceptions.Add(exception);

        var exception2 = new CalendarException();
        exception.Name = "Exception 2";
        exception2.FromDate = DateTime.Now.AddDays(7);
        exception2.ToDate = exception2.FromDate;
        exception2.DayWorking = false;
        calendar.Exceptions.Add(exception2);

        project.Set(Prj.Calendar, calendar);

        project.Save(OutDir + "WriteUpdatedCalendarDataToMPP_out.mpp", SaveFileFormat.Mpp);
    }
    catch (NotSupportedException ex)
    {
        Console.WriteLine(ex.Message + "\nThis example will only work if you apply a valid Aspose License. You can purchase a full license or get a 30-day temporary license from [here](https://buy.aspose.com/temporary-license/).");
    }
}

설명:

  • 프로젝트 파일을 로드하고 표준 달력을 검색합니다.
  • 예외사항, 근무시간 등 달력 데이터를 수정합니다.
  • 수정된 캘린더 데이터로 업데이트된 프로젝트를 저장합니다.

7단계: 분할 작업 완료 날짜 계산

분할 작업의 완료 날짜를 계산하려면 다음 단계를 따르세요.

public void CalculateSplitTaskFinishDate()
{
    var project = new Project(DataDir + "SplitTaskFinishDate.mpp");
    var task = project.RootTask.Children.GetByUid(4);
    var calendar = project.Get(Prj.Calendar);

    Console.WriteLine(
        "Start Date: " + task.Get(Tsk.Start).ToShortDateString() + "\n+ Duration 8 hours\nFinish Date: "
        + calendar.GetTaskFinishDateFromDuration(task, new TimeSpan(8, 0, 0)));
}

설명:

  • 프로젝트 파일을 로드하고 분할 작업을 검색합니다.
  • 프로젝트 달력을 받으세요.
  • 사용자 정의 기간을 기준으로 완료 날짜를 계산합니다.

8단계: 달력 예외 검색

캘린더 예외에 대한 정보를 검색하려면 다음 단계를 따르세요.

public void RetrieveCalendarExceptions()
{
    var project = new Project(DataDir + "project_RetrieveExceptions_test.mpp");

    foreach (var calendar in project.Calendars)
    {
        foreach (var exception in calendar.Exceptions)
        {
            Console.WriteLine("From: " + exception.FromDate.ToShortDateString());
            Console.WriteLine("To: " + exception.ToDate.ToShortDateString());
        }
    }
}

설명:

  • 프로젝트 파일을 로드합니다.
  • 각 달력과 해당 예외를 반복합니다.
  • 각 예외의 시작 및 종료 날짜를 인쇄합니다.

9단계: 기본 자원 달력 가져오기

자원 달력의 기본 달력을 사용하려면 다음 단계를 따르세요.

public void GetBaseResourceCalendar()
{
    var project = new Project(DataDir + "ResourceCalendar.mpp");
    var resource = project.Resources.Add("Resource1");
    var calendar = project.Calendars.Add("Resource1");
    resource.Set(Rsc.Calendar, calendar);

    foreach (var rsc in project.Resources)
    {
        if (rsc.Get(Rsc.Name) != null)
        {
            Console.WriteLine(rsc.Get(Rsc.Calendar).BaseCalendar.Name);
        }
    }
}

설명:

  • 프로젝트 파일을 로드합니다.
  • 리소스와 해당 달력을 추가합니다.
  • 모든 자원의 기본 달력 이름을 인쇄합니다.

10단계: 캘린더 삭제

프로젝트에서 달력을 삭제하려면 다음 단계를 따르세요.

public void DeleteCalendar()
{
    var project = new Project(DataDir + "BrokenCalendar.mpp");
    var calendar = project.Calendars.GetByName("Broken Calendar");
    calendar.Delete();
}

설명:

  • 프로젝트 파일을 로드합니다.
  • 이름으로 달력을 가져옵니다.
  • 달력을 삭제하세요.

11단계: 시작 및 작업별로 완료 날짜 가져오기

시작 날짜 및 작업별로 완료 날짜를 계산하려면 다음 단계를 따르세요.

public void GetFinishDateByStartAndWork()
{
    var project = new Project(DataDir + "Blank2010.mpp");
    var calendar = project.Calendars.GetByName("Standard");
    var start = new DateTime(2017, 10, 26, 8, 0, 0);
    var work = project.GetWork(7);
    var finish = calendar.GetFinishDateByStartAndWork(start, work);
    Console.WriteLine("Task start date: " + start);
    Console.WriteLine("Task work: " + work);
    Console.WriteLine("Task finish date: " + finish);
}

설명:

  • 프로젝트 파일을 로드합니다.
  • 표준 달력을 받으세요.
  • 시작 날짜와 작업 기간을 정의합니다.
  • 시작 날짜와 작업을 기준으로 완료 날짜를 계산합니다.

12단계: 다음 근무일 시작

달력을 사용하여 다음 근무일을 시작하려면 다음 단계를 따르세요.

public void GetNextWorking

DayStart()
{
    var project = new Project(DataDir + "Project1.mpp");
    var calendar = project.Calendars.GetByUid(1);
    var nextWorkingDayStart = calendar.GetNextWorkingDayStart(new DateTime(2020, 4, 10, 13, 0, 0));
    Console.WriteLine(nextWorkingDayStart);
}

설명:

  • 프로젝트 파일을 로드합니다.
  • UID로 달력을 가져옵니다.
  • 다음 근무일 시작 시간을 가져옵니다.

13단계: 이전 근무일 종료 가져오기

달력을 사용하여 이전 근무일을 종료하려면 다음 단계를 따르세요.

public void GetPreviousWorkingDayEnd()
{
    var project = new Project(DataDir + "Project1.mpp");
    var calendar = project.Calendars.GetByUid(1);
    var previousWorkingDayEnd = calendar.GetPreviousWorkingDayEnd(new DateTime(2020, 4, 10, 13, 0, 0));
    Console.WriteLine(previousWorkingDayEnd);
}

설명:

  • 프로젝트 파일을 로드합니다.
  • UID로 달력을 가져옵니다.
  • 이전 근무일 종료 시간을 가져옵니다.

14단계: 완료 및 기간에서 시작 날짜 가져오기

완료 날짜 및 기간별로 시작 날짜를 얻으려면 다음 단계를 따르십시오.

public void GetStartDateFromFinishAndDuration()
{
    var project = new Project(DataDir + "Project1.mpp");
    var calendar = project.Calendars.GetByUid(1);
    var startDate = calendar.GetStartDateFromFinishAndDuration(new DateTime(2020, 4, 10, 9, 0, 0), project.GetDuration(16, TimeUnitType.Hour));
    Console.WriteLine(startDate);
}

설명:

  • 프로젝트 파일을 로드합니다.
  • UID로 달력을 가져옵니다.
  • 종료일과 기간으로부터 시작일을 계산합니다.

15단계: 근무 시간 가져오기

특정 날짜의 근무 시간을 확인하려면 다음 단계를 따르세요.

public void GetWorkingHours()
{
    var project = new Project(DataDir + "Project1.mpp");
    var calendar = project.Calendars.GetByUid(1);
    var workingHours = calendar.GetWorkingHours(new DateTime(2020, 4, 10));
    Console.WriteLine(workingHours.Hours);
}

설명:

  • 프로젝트 파일을 로드합니다.
  • UID로 달력을 가져옵니다.
  • 지정된 날짜의 근무 시간을 가져옵니다.

16단계: 근무 시간 가져오기

특정 날짜의 근무 시간을 확인하려면 다음 단계를 따르세요.

public void GetWorkingTimes()
{
    var project = new Project(DataDir + "Project1.mpp");
    var calendar = project.Calendars.GetByUid(1);
    var workingTimes = calendar.GetWorkingTimes(new DateTime(2020, 4, 8, 8, 0, 0));

    foreach (var workingTime in workingTimes)
    {
        Console.WriteLine("From: " + workingTime.From);
        Console.WriteLine("To: " + workingTime.To);
    }
}

설명:

  • 프로젝트 파일을 로드합니다.
  • UID로 달력을 가져옵니다.
  • 지정된 날짜의 근무 시간을 가져옵니다.

결론

Aspose.Tasks for .NET에서 달력을 사용하는 것은 프로젝트 일정을 효과적으로 관리하는 데 중요합니다. 제공된 예제와 단계별 가이드를 통해 캘린더 데이터를 쉽게 조작하고, 작업 기간을 계산하고, 예외를 효율적으로 처리할 수 있습니다. 이러한 기능을 애플리케이션에 통합하면 프로젝트 관리 프로세스를 간소화하고 정확한 일정을 계획할 수 있습니다.

FAQ

Q1: Aspose.Tasks for .NET을 사용하려면 라이선스가 필요합니까?

A1: 예, 애플리케이션에서 Aspose.Tasks for .NET을 활용하려면 유효한 라이선스가 필요합니다. 정식 라이센스를 구입하거나 다음 사이트에서 30일 임시 라이센스를 얻을 수 있습니다.여기.

질문 2: 프로그래밍 방식으로 일정 예외를 수정할 수 있습니까?

A2: 예, .NET API용 Aspose.Tasks를 사용하여 프로그래밍 방식으로 달력 예외를 추가, 업데이트 또는 삭제할 수 있습니다.

Q3: 사용자 지정 기간을 사용하여 작업 완료 날짜를 어떻게 계산할 수 있나요?

A3: .NET용 Aspose.Tasks는 다음과 같은 메서드를 제공합니다.GetTaskFinishDateFromDuration() 사용자 정의 기간을 기준으로 작업 완료 날짜를 계산합니다.

Q4: 야간 근무 달력과 같은 맞춤형 달력을 만들 수 있습니까?

A4: 예, .NET API용 Aspose.Tasks를 사용하여 야간 근무 달력과 같은 사용자 정의 달력을 만들 수 있습니다.

Q5: 프로젝트 파일에서 달력 예외에 대한 정보를 검색할 수 있습니까?

A5: 예, Aspose.Tasks for .NET을 사용하면 프로젝트 파일에서 달력 예외에 대한 정보를 쉽게 검색할 수 있습니다.