Aspose.Tasks for .NET의 도구 기능
Microsoft Project 파일을 다룰 때 개발자는 작업과 자원 생성 이상의 것이 필요한 경우가 많습니다. 이들은 다음과 같은 정보에 접근할 필요가 있습니다. 프로젝트를 지원하는 데이터 예: 필터, 테이블, 그룹, 임베디드 객체 및 오류 처리를 위한 진단 도구 등입니다. Aspose.Tasks for .NET은 다음과 같은 유용한 기능 프로젝트 관리 워크플로를 더욱 강력하고 유연하게 만드는 기능들입니다. 여기에는 프로젝트의 임계 경로 계산, 작업 작성 예외 처리, 필터 및 그룹 정의 검색, 임베디드 객체 추출 등과 같은 기능이 포함됩니다. 이러한 기능들은 개발자가 프로젝트 기능을 확장하고 보고의 정확성을 향상시키며 Microsoft Project 파일을 다른 시스템과 원활하게 통합할 수 있도록 도와줍니다.
임계 경로 계산
임계 경로는 궁극적으로 프로젝트 종료 시점을 결정하는 작업(또는 작업들)입니다. 임계 경로와 그에 할당된 자원을 추적하면 프로젝트를 일정에 맞게 유지하는 데 도움이 됩니다. Microsoft Project는 여유 시간이 없거나 특정 날짜 제약조건(must start on, must finish on, as soon as possible or as late as possible)이 있거나 프로젝트와 동일하거나 이후의 종료일을 가진 작업을 기준으로 임계 경로를 계산합니다. Aspose.Tasks를 사용하면 임계 경로를 계산할 수 있습니다.
해당 Project 클래스는 CriticalPath 속성을 제공하며, 이는 프로젝트의 임계 경로를 구성하는 작업 컬렉션을 검색하는 데 사용됩니다. 다음 코드 예제는 임계 경로에 있는 작업을 계산하고 표시하는 방법을 보여줍니다.
1Project project = new Project("New Project.mpp");
2project.CalculationMode = CalculationMode.Automatic;
3
4Task subtask1 = project.RootTask.Children.Add("1");
5Task subtask2 = project.RootTask.Children.Add("2");
6Task subtask3 = project.RootTask.Children.Add("3");
7project.TaskLinks.Add(subtask1, subtask2, TaskLinkType.FinishToStart);
8
9// Display the critical path now
10foreach (Task task in project.CriticalPath)
11{
12 Console.WriteLine(task.Get(Tsk.Name));
13}
TaskWritingException 출력
프로젝트는 다수의 작업으로 구성되며 Aspose.Tasks for .NET API는 작업 정보를 추가, 삭제 및 업데이트할 수 있게 합니다. 작업을 기록하는 중 문제가 발생하면 TasksWritingException 으로 예외를 잡을 수 있습니다.
Aspose.Tasks for .NET은 작업 기록 중 예외가 발생할 때 메시지를 출력하는 기능을 지원합니다. 이는 TaskWritingException을 통해 수행되며, TaskReadingException이 사용되는 방식과 유사합니다.
로그 메시지는 공개 속성 TasksWritingException.LogText에 포함되어 있으며, 다음 코드 예제에 표시된 것과 같습니다.
1try
2{
3 Project project = new Project("New Project.mpp");
4 Console.Write("This example will only work if you apply a valid Aspose License. You can purchase full license or get 30 day temporary license from http://www.aspose.com/purchase/default.aspx.");
5 project.Save("output.mpp", SaveFileFormat.MPP);
6}
7catch (TasksWritingException ex)
8{
9 Console.WriteLine(ex.LogText);
10}
11catch (NotSupportedException ex)
12{
13 Console.WriteLine(ex.Message + "\nThis example will only work if you apply a valid Aspose License. You can purchase full license or get 30 day temporary license from http://www.aspose.com/purchase/default.aspx.");
14}
MPP 파일의 필터 데이터 작업
Aspose.Tasks를 사용하면 개발자가 MPP 파일 데이터에 적용된 필터에 대한 정보를 읽을 수 있습니다. 이 문서에서는 Microsoft Project MPP 파일에서 필터 정의와 필터 조건 데이터를 검색하는 방법을 보여줍니다.
필터 정의 데이터 읽기
Microsoft Project의 필터 정의는 필터의 구조(예: 이름, 유형 및 적용되는 필드 등)를 설명합니다. Aspose.Tasks for .NET을 사용하면 이러한 필터 정의에 프로그래밍 방식으로 액세스하고 MPP 파일에서 필터가 어떻게 구성되어 있는지 확인할 수 있습니다.
1// Instantiate project and access task filters
2Project project = new Project("ReadFilterDefinitionData.mpp");
3List<Filter> taskFilters = project.TaskFilters.ToList();
4Console.WriteLine("Task Filters Count: " + taskFilters.Count);
5Console.WriteLine("All Tasks: " + taskFilters[0].Name);
6Console.WriteLine("Task Item: " + taskFilters[0].FilterType);
7Console.WriteLine("Task Filters Show In Menu: " + taskFilters[0].ShowInMenu);
8Console.WriteLine("Task filter ShowRelatedSummaryRows: " + taskFilters[0].ShowRelatedSummaryRows);
9
10// Access resource filters
11List<Filter> filters = project.ResourceFilters.ToList();
12Console.WriteLine("Project.ResourceFilters count: " + filters.Count);
13Console.WriteLine("Resource Filter Item Type: Item.ResourceType: " + filters[0].FilterType);
14Console.WriteLine("Resource filter ShowInMenu" + filters[0].ShowInMenu);
15Console.WriteLine("Resource filter ShowRelatedSummaryRows: " + filters[0].ShowRelatedSummaryRows);
필터 조건 데이터 읽기
정의가 필터의 구조를 설명하는 반면, 필터 조건은 프로젝트 데이터에 적용되는 정확한 조건을 결정합니다(예: 특정 날짜나 자원을 가진 작업). Aspose.Tasks를 사용하면 MPP 파일에서 이러한 조건을 읽을 수 있으며, 이는 Microsoft Project에서 사용되는 맞춤 보기(custom views)를 복제하거나 분석하는 데 특히 유용합니다.
1Project project = new Project("New Project.mpp");
2
3Filter filter = project.TaskFilters.ToList()[1];
4Console.WriteLine(filter.Criteria.CriteriaRows.Count);
5Console.WriteLine(filter.Criteria.Operation.ToString());
6
7FilterCriteria criteria1 = filter.Criteria.CriteriaRows[0];
8Console.WriteLine(criteria1.Test.ToString());
9Console.WriteLine(criteria1.Field.ToString());
10Console.WriteLine(criteria1.Values[0].ToString());
11
12FilterCriteria criteria2 = filter.Criteria.CriteriaRows[1];
13Console.WriteLine(criteria2.Operation.ToString());
14Console.WriteLine(criteria2.CriteriaRows.Count);
15
16FilterCriteria criteria21 = criteria2.CriteriaRows[0];
17Console.WriteLine(criteria21.Test.ToString());
18Console.WriteLine(criteria21.Field.ToString());
19Console.WriteLine(criteria21.Values[0].ToString());
20
21FilterCriteria criteria22 = criteria2.CriteriaRows[1];
22Console.WriteLine(criteria22.Test.ToString());
23Console.WriteLine(criteria22.Field.ToString());
24Console.WriteLine(criteria22.Values[0].ToString());
25Console.WriteLine(filter.Criteria);
그룹 정의 데이터 읽기
Microsoft Project 데이터 파일은 그룹 형태의 데이터를 포함할 수 있습니다. Aspose.Tasks for .NET은 아래 예제에 표시된 것과 같이 그룹 정의 데이터를 읽는 기능을 제공합니다.
1Project project = new Project("New Project.mpp");
2
3Console.WriteLine("Task Groups Count: " + project.TaskGroups.Count);
4
5Group taskGroup = project.TaskGroups.ToList()[1];
6Console.WriteLine("Group Name:", taskGroup.Name);
7Console.WriteLine("Group Criteria count: " + taskGroup.GroupCriteria.Count);
8Console.WriteLine("************* Retrieving Task Group's Criterion information *************");
9
10GroupCriterion criterion = taskGroup.GroupCriteria.ToList()[0];
11Console.WriteLine("Criterion Field: " + criterion.Field.ToString());
12Console.WriteLine("Criterion GroupOn: " + criterion.GroupOn.ToString());
13Console.WriteLine("Criterion Cell Color: " + criterion.CellColor);
14Console.WriteLine("Criterion Pattern: " + criterion.Pattern.ToString());
15
16if (taskGroup == criterion.ParentGroup)
17{
18 Console.WriteLine("Parent Group is equal to task Group.");
19}
20
21Console.WriteLine("*********** Retrieving Criterion's Font Information ***********");
22Console.WriteLine("Font Name: " + criterion.Font.Name);
23Console.WriteLine("Font Size: " + criterion.Font.Size);
24Console.WriteLine("Font Style: " + criterion.Font.Style);
25Console.WriteLine("Ascending/Descending: " + criterion.Ascending);
MPP 파일에서 테이블 데이터 읽기
Aspose.Tasks for .NET API는 Microsoft Project 데이터 파일에서 테이블 데이터를 읽는 것을 지원합니다. Project.Tables는 ICollection 인터페이스를 구현하여 MPP 파일의 테이블 데이터에 접근할 수 있게 합니다. 이 기능은 MPP 2003, 2007, 2010 및 2013을 포함한 모든 버전의 Microsoft Project 데이터 파일에서 지원됩니다.
아래 예제는 Microsoft Project MPP 파일에서 테이블 데이터를 검색하는 방법을 보여줍니다. 폭(width), 제목(title), 제목 정렬(title alignment) 및 데이터 정렬(data alignment)과 같은 테이블 속성 값들이 데모용으로 표시됩니다.
1Project project = new Project("New Project.mpp");
2
3// Access table
4Table task1 = project.Tables.ToList()[0];
5Console.WriteLine("Table Fields Count" + task1.TableFields.Count);
6
7// Display all table fields information
8foreach (TableField tableField in task1.TableFields)
9{
10 Console.WriteLine("Field width: " + tableField.Width);
11 Console.WriteLine("Field Title: " + tableField.Title);
12 Console.WriteLine("Field Title Alignment: " + tableField.AlignTitle.ToString());
13 Console.WriteLine("Field Align Data: " + tableField.AlignData.ToString());
14}
작업 또는 검토 양식에서 임베디드 객체 추출
Microsoft Project 데이터 파일(MPP/XML)은 작업 또는 자원 보기에서 문서, 스프레드시트, PDF, 이미지 등과 같은 임베디드 객체를 포함할 수 있습니다. Aspose.Tasks for .NET API는 프로젝트의 작업 또는 자원 보기에서 이를 추출하는 기능을 아래 항목들에서 보여줍니다.
임베디드 객체 추출
임베디드 객체(파일 경로 선택으로 파일에서 생성된 것)는 MPP 파일 내부의 OLE Package에 패키징됩니다. 원본 파일을 추출하려면 OleObject 클래스 인스턴스의 Content 및 FullPath 속성을 사용할 수 있습니다.
1Project project = new Project("ExtractEmbeddedObjects.mpp");
2OleObject ole = project.OleObjects.ToList()[0];
3// We have to check this property because it can be null if the embedded object was created inside the ms project application Or, alternatively, you can use this check: if (ole.FileFormat == "Package")
4if (!string.IsNullOrEmpty(ole.FullPath))
5{
6 using (FileStream stream = new FileStream("out.ole", FileMode.Create))
7 {
8 stream.Write(ole.Content, 0, ole.Content.Length);
9 }
10}
Microsoft Project 애플리케이션 내부에서 생성된 임베디드 객체는 다음과 같은 방식으로 추출할 수 있습니다:
1IDictionary<string, string> fileFormatExt = new Dictionary<string, string>();
2fileFormatExt.Add("RTF", "_rtfFile_out.rtf");
3fileFormatExt.Add("MSWordDoc", "_wordFile_out.docx");
4fileFormatExt.Add("ExcelML12", "_excelFile_out.xlsx");
5Project project = new Project("New Project.mpp");
6foreach (OleObject oleObject in project.OleObjects)
7{
8 if (!string.IsNullOrEmpty(oleObject.FileFormat) && fileFormatExt.ContainsKey(oleObject.FileFormat))
9 {
10 using (FileStream stream = new FileStream("EmbeddedContent_" + fileFormatExt[oleObject.FileFormat], FileMode.Create))
11 {
12 stream.Write(oleObject.Content, 0, oleObject.Content.Length);
13 }
14 }
15}
Aspose.Tasks for .NET의 도구 기능은 단순한 작업 또는 자원 조작을 넘어서는 프로젝트 세부사항을 처리할 수 있는 완전한 도구 모음 을 개발자에게 제공합니다. 임계 경로 식별 및 작업 동작 문제 해결부터 필터, 그룹 및 테이블 검색, 임베디드 콘텐츠 추출에 이르기까지 이러한 기능들은 개발자가 프로젝트 데이터 수명 주기를 완전히 제어할 수 있도록 보장합니다. 이러한 도구들을 워크플로에 통합함으로써 팀은 더 나은 모니터링, 더 깨끗한 데이터 교환 및 더 깊은 자동화을 달성하여 궁극적으로 프로젝트 관리 효율성을 향상시킬 수 있습니다.