拡張タスク属性の操作
Contents
[
Hide
Show
]拡張タスク属性 Microsoft Projectでは、カスタムフィールドを定義し、タスクに関する追加情報を保存できます。Aspose.Tasks for .NET は、タスクの拡張属性の作成、読み取り、管理を完全にサポートし、 MPP および XML 形式で、Microsoft Project のすべてのバージョン(2003–2019)に対応します。
拡張タスク属性とは何ですか?
Microsoft Projectでは、 拡張属性 はカスタムフィールドです(例: Text1、 Cost2、または Flag5)は、標準フィールドで扱われない業務固有の情報を格納するために使用できます。これらの属性は以下の点で非常に有用です:
- タスクに関する追加メタデータの追跡(例:タスクカテゴリ、リスクレベル、予算コード)。
- レポート作成に必要なプロジェクト固有の情報の追加。
- 全社的なプロジェクト管理基準の適用。
Aspose.Tasks はこの機能を主に次の2つのクラスで提供します:
- ExtendedAttributeDefinition — カスタムフィールド(名前、型、計算ルール、検索値)を定義します。
- ExtendedAttribute — 特定のタスクに対するそのカスタムフィールドの実際の値を格納します。
タスクへの拡張属性情報の追加
プログラムでタスクに拡張属性を追加するには:
- カスタムフィールドの種類を定義するオブジェクトを作成します。
ExtendedAttributeDefinition
(カスタムフィールドの種類を定義する) - その定義に基づくオブジェクトを作成します。
ExtendedAttribute
(定義に基づくオブジェクト) - 属性を目的のタスクに割り当てます。
例:拡張属性の追加
1// Create new project
2Project project = new Project("New Project.mpp");
3
4// Create an Extended Attribute Definition of Text1 type
5var taskExtendedAttributeText1Definition = ExtendedAttributeDefinition.CreateTaskDefinition(CustomFieldType.Text, ExtendedAttributeTask.Text1, "Task City Name");
6
7// Add it to the project's Extended Attributes collection
8project.ExtendedAttributes.Add(taskExtendedAttributeText1Definition);
9
10// Add a task to the project
11Task task = project.RootTask.Children.Add("Task 1");
12
13// Create an Extended Attribute from the Attribute Definition
14var taskExtendedAttributeText1 = taskExtendedAttributeText1Definition.CreateExtendedAttribute();
15
16// Assign a value to the generated Extended Attribute. The type of the attribute is "Text", the "TextValue" property should be used.
17taskExtendedAttributeText1.TextValue = "London";
18
19// Add the Extended Attribute to task
20task.ExtendedAttributes.Add(taskExtendedAttributeText1);
21
22project.Save("PlainTextExtendedAttribute_out.mpp", SaveFileFormat.MPP);
23
24Project project = new Project("New Project.mpp");
25
26// Create an Extended Attribute Definition of Text2 type
27var taskExtendedAttributeText2Definition = ExtendedAttributeDefinition.CreateLookupTaskDefinition(CustomFieldType.Text, ExtendedAttributeTask.Text2, "Task Towns Name");
28
29// Add lookup values for the extended attribute definition
30taskExtendedAttributeText2Definition.AddLookupValue(new Value { Id = 1, StringValue = "Town1", Description = "This is Town1" });
31taskExtendedAttributeText2Definition.AddLookupValue(new Value { Id = 2, StringValue = "Town2", Description = "This is Town2" });
32
33// Add it to the project's Extended Attributes collection
34project.ExtendedAttributes.Add(taskExtendedAttributeText2Definition);
35
36// Add a task to the project
37var task2 = project.RootTask.Children.Add("Task 2");
38
39// Crate an Extended Attribute from the Text2 Lookup Definition for Id 1
40var taskExtendedAttributeText2 = taskExtendedAttributeText2Definition.CreateExtendedAttribute(taskExtendedAttributeText2Definition.ValueList[1]);
41
42// Add the Extended Attribute to task
43task2.ExtendedAttributes.Add(taskExtendedAttributeText2);
44
45project.Save("TextExtendedAttributeWithLookup_out.mpp", SaveFileFormat.MPP);
46
47Project project2 = new Project("New Project.mpp");
48
49// Create an Extended Attribute Definition of Duration2 type
50var taskExtendedAttributeDuration2Definition = ExtendedAttributeDefinition.CreateLookupTaskDefinition(CustomFieldType.Duration, ExtendedAttributeTask.Duration2, "Some duration");
51
52// Add lookup values for extended attribute definition
53taskExtendedAttributeDuration2Definition.AddLookupValue(new Value { Id = 2, Duration = project2.GetDuration(4, TimeUnitType.Hour), Description = "4 hours" });
54taskExtendedAttributeDuration2Definition.AddLookupValue(new Value { Id = 3, Duration = project2.GetDuration(1, TimeUnitType.Day), Description = "1 day" });
55taskExtendedAttributeDuration2Definition.AddLookupValue(new Value { Id = 4, Duration = project2.GetDuration(1, TimeUnitType.Hour), Description = "1 hour" });
56taskExtendedAttributeDuration2Definition.AddLookupValue(new Value { Id = 7, Duration = project2.GetDuration(10, TimeUnitType.Day), Description = "10 days" });
57
58// Add the definition to the project's Extended Attributes collection
59project2.ExtendedAttributes.Add(taskExtendedAttributeDuration2Definition);
60
61// Add a task to the project
62var task3 = project2.RootTask.Children.Add("Task 3");
63
64// Create an Extended Attribute from the Duration2 Lookup Definition for Id 3
65var taskExtendedAttributeDuration2 = taskExtendedAttributeDuration2Definition.CreateExtendedAttribute(taskExtendedAttributeDuration2Definition.ValueList[3]);
66
67// Add the Extended Attribute to task
68task3.ExtendedAttributes.Add(taskExtendedAttributeDuration2);
69
70project2.Save("DurationExtendedAttributeWithLookup_out.mpp", SaveFileFormat.MPP);
71
72Project project3 = new Project("New Project.mpp");
73
74// Create an Extended Attribute Definition of Finish2 Type
75var taskExtendedAttributeFinish2Definition = ExtendedAttributeDefinition.CreateLookupTaskDefinition(CustomFieldType.Finish, ExtendedAttributeTask.Finish2, "Some finish");
76
77// Add lookup values for extended attribute defintion
78taskExtendedAttributeFinish2Definition.AddLookupValue(new Value { Id = 2, DateTimeValue = new DateTime(1984, 01, 01, 00, 00, 01), Description = "This is Value2" });
79taskExtendedAttributeFinish2Definition.AddLookupValue(new Value { Id = 3, DateTimeValue = new DateTime(1994, 01, 01, 00, 01, 01), Description = "This is Value3" });
80taskExtendedAttributeFinish2Definition.AddLookupValue(new Value { Id = 4, DateTimeValue = new DateTime(2009, 12, 31, 00, 00, 00), Description = "This is Value4" });
81taskExtendedAttributeFinish2Definition.AddLookupValue(new Value { Id = 7, DateTimeValue = DateTime.Now, Description = "This is Value6" });
82
83// Add the definition to the project's Extended Attributes collection
84project3.ExtendedAttributes.Add(taskExtendedAttributeFinish2Definition);
85
86// Add a task to the project
87var task4 = project3.RootTask.Children.Add("Task 4");
88
89// Create an Extended Attribute from the Finish2 Lookup Definition for Id 3
90var taskExtendedAttributeFinish2 = taskExtendedAttributeFinish2Definition.CreateExtendedAttribute(taskExtendedAttributeFinish2Definition.ValueList[3]);
91
92// Add the Extended Attribute to task
93task4.ExtendedAttributes.Add(taskExtendedAttributeFinish2);
94
95project3.Save("FinishExtendedAttributeWithLookup_out.mpp", SaveFileFormat.MPP);
説明:
- 最初に、 テキスト のカスタムフィールド(例: Text1)を定義します。
- 次に、
ExtendedAttribute
特定の値を持つインスタンスを作成します。 - 最後に、それをタスクに関連付けてカスタム情報を保存できるようにします。
拡張タスク属性の読み取り
拡張属性が割り当てられたら、次を使用してそれらを読み取ることができます: ExtendedAttributes のコレクションを持つ Task
クラス。 このプロパティは ExtendedAttribute
オブジェクトのリストを返します。各オブジェクトはタスクのカスタムフィールドに関する詳細を含みます。
例:拡張属性の読み取り
1Project project = new Project("New Project.mpp");
2
3// Read extended attributes for tasks
4foreach (Task task in project.RootTask.Children)
5{
6 foreach (ExtendedAttribute ea in task.ExtendedAttributes)
7 {
8 Console.WriteLine(ea.FieldId);
9 Console.WriteLine(ea.ValueGuid);
10
11 switch (ea.AttributeDefinition.CfType)
12 {
13 case CustomFieldType.Date:
14 case CustomFieldType.Start:
15 case CustomFieldType.Finish:
16 Console.WriteLine(ea.DateValue);
17 break;
18
19 case CustomFieldType.Text:
20 Console.WriteLine(ea.TextValue);
21 break;
22
23 case CustomFieldType.Duration:
24 Console.WriteLine(ea.DurationValue.ToString());
25 break;
26
27 case CustomFieldType.Cost:
28 case CustomFieldType.Number:
29 Console.WriteLine(ea.NumericValue);
30 break;
31
32 case CustomFieldType.Flag:
33 Console.WriteLine(ea.FlagValue);
34 break;
35 }
36 }
37}
説明:
- 各タスクは複数の拡張属性を保持できます。
- それらをループ処理してカスタムデータ(例:テキストラベル、数値、フラグ)を抽出できます。
- これにより、レポート、ダッシュボード、業務ロジックとの統合が可能になります。
要点
- 拡張属性はプロジェクトデータをカスタマイズする柔軟性を提供します。
- プログラムで 定義、割り当て、および読み取り が可能です。
- この
ExtendedAttributeDefinition
クラスはカスタムフィールドのスキーマを定義するために使用されます。 - この
ExtendedAttribute
クラスはタスクごとの実際の値を格納します。 - 対応: すべての主要な Microsoft Project バージョン (MPP 2003–2019)および XML 形式。
よくある質問
Q: 拡張属性のためにルックアップテーブルを作成できますか?
- はい。
ExtendedAttributeDefinition
そのクラスは Microsoft Project と同様にルックアップ値をサポートします。
Q: サポートされている拡張属性の種類は何ですか?
- テキスト、数値、コスト、フラグ、日付、期間、開始/終了フィールド。
Q: タスク作成後に拡張属性を変更できますか?
- はい。いつでも拡張属性を更新または削除できます。
Q: 拡張属性はMPP/XMLファイルに保存されますか?
- はい。Aspose.Tasks は変更したプロジェクトファイルを保存する際に拡張属性を保持します。
Q: この機能は .NET Framework と .NET Core の両方で利用できますか?
- はい。Aspose.Tasks for .NET は両プラットフォームをサポートします。